1

データベースから HTML を生成し、それを PrinceXML に送信して PDF に変換しています。これを行うために使用するコードは次のとおりです。

string _htmlTemplate = @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd""><html lang=""en-GB"" xml:lang=""en-GB"" xmlns=""http://www.w3.org/1999/xhtml""><head><meta http-equiv=""Content-type"" content=""text/html;charset=UTF-8"" /><title>Generated PDF Contract</title></head><body>{0}</body></html>";

string _pgeContent = string.Format(_htmlTemplate, sb.ToString());
writer.Write(sb.ToString());
Byte[] arrBytes = UTF8Encoding.Default.GetBytes(_pgeContent);
Stream s = new MemoryStream(arrBytes);

Prince princeConverter = new Prince(ConfigurationManager.AppSettings["PrinceXMLInstallLoc"].ToString());
princeConverter.SetLog(ConfigurationManager.AppSettings["PrinceXMLLogLoc"]);
princeConverter.AddStyleSheet(Server.MapPath(ConfigurationManager.AppSettings["FormsDocGenCssLocl"]));
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.BufferOutput = true;

ただし、変換は次のエラーで失敗します。

入力が適切な UTF-8 ではありません。エンコーディングを指定してください! バイト: 0xA0 0x77 0x65 0x62

生成された html を取得し、W3C バリデーターにアップロードしました。マークアップが UTF-8 でエンコードされた XHTML 1.0 Transitional として検証され、エラーや警告は発生しません。

また、無効な文字を探して細かい櫛でファイルを調べました。これまでのところ何もありません。

誰かが私が試すことができる何か他のことを提案できますか?

4

1 に答える 1

2

呪いをつぶやき、髪の残りを引き裂く午後の後、私は特定の問題の解決策を見つけました.

System.Text.UTF8Encoding は、デフォルトでは UTF-8 識別子バイトを出力しないようです。したがって、私の場合、ブール値のパラメーターを使用してこの出力を制御するコンストラクターを使用する必要がありました。

UTF8Encoding u8enc = new UTF8Encoding(true);//Ensures a UTF8 identifier is emitted.

この後、それはすべて良かったです。これが誰かに役立つことを願っています:-)

于 2010-11-18T09:28:54.673 に答える