1

一部の HTML ページを PDF にレンダリングするために、ABCpdf バージョン 5 を使用しています。

私は基本的に使用HttpServerUtility.Execute()します-pdfのhtmlを取得するためのメソッド:

System.IO.StringWriter writer = new System.IO.StringWriter();
server.Execute(requestUrl, writer);
string pageResult = writer.ToString();

WebSupergoo.ABCpdf5.Doc pdfDoc = new WebSupergoo.ABCpdf5.Doc();
pdfDoc.AddImageHtml(pageResult);

response.Buffer = false;
response.ContentType = "application/pdf";
response.AddHeader("Content-Disposition", "attachment;filename=MyPdf_" + 
    FormatDate(DateTime.Now, "yyyy-MM-dd") + ".pdf");
response.BinaryWrite(pdfDoc.GetData());

現在、ウムラウテ (äöü) などの一部の特殊文字は空白に置き換えられています。興味深いことに、それらのすべてではありません。私が理解したこと:私が持っているhtmlページ内。

`<meta http-equiv="content-type" content="text/xhtml; charset=utf-8" />` 

これを解析すると、すべての特殊文字が正しくレンダリングされます。しかし、これは醜いハックのように思えます。

以前は を使用しませんでしHttpServerUtility.Execute()たが、ABCpdf に URL 自体を呼び出させました: pdfDoc.AddImageUrl("someUrl");. そこでは、そのようなエンコーディングの問題はありませんでした。

他に何を試すことができますか?

4

2 に答える 2

5

ABCpdf8でこの問題に遭遇しました。

コードでは、HTMLコンテンツを取得し、pageResultをAddImageHtml()に渡します。ドキュメントに記載されているように、

ABCpdfは、このHTMLを一時ファイルに保存し、「file://」プロトコル指定子を使用してファイルをレンダリングします。

言及されていないのは、一時ファイルがUTF-8でエンコードされていることですが、エンコードはHTMLファイルに記述されていません。

<meta>タグは実際に必要なエンコーディングを設定し、私の問題を解決しました。

エンコーディングの宣言を回避する1つの方法は、HTTP / HTML応答からHTMLエンコーディングを検出することを期待しているAddImageUrl()メソッドを使用することです。

于 2012-05-11T06:27:16.147 に答える
1

メタ タグと AddImageURL メソッドのエンコーディングは、単純なドキュメントには役立つかもしれませんが、タグのエンコーディングにもかかわらずエンコーディングが何らかの形で失われるチェーンの状況では役に立ちません。この問題に遭遇しました (元の質問で説明したとおりです - ウムラウトなどの一部の外国語の文字が消えてしまいます)、解決策がありません。ABCPDF を完全に取り除き、PDF 形式をレンダリングできる SSRS に置き換えることを検討しています。

于 2013-07-10T20:48:05.303 に答える