2011-12-30 172 views
1

我正在使用ABCpdf版本5來將某些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()); 

現在像Umlaute(AOU)一些特殊字符與一個空的空間所取代。有趣的不是全部。我弄明白了: 在我擁有的html頁面內。

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

如果我把它解析掉,所有的特殊字符都會被正確渲染。但在我看來,這似乎是一個醜陋的黑客。

在前幾天我沒有使用HttpServerUtility.Execute(),但我讓ABCpdf調用URL本身:pdfDoc.AddImageUrl("someUrl");。在那裏我沒有這樣的編碼問題。

我可以試試其他什麼?

+0

我意識到ABCpdf Verion 7似乎沒有這個問題。 – sl3dg3 2012-01-03 16:56:52

回答

5

剛剛遇到這個問題ABCpdf 8

在您的代碼中,您檢索HTML內容並將pageResult傳遞給AddImageHtml()。作爲documentation狀態,

ABCpdf保存該HTML到一個臨時文件,並呈現使用文件 「文件://」協議說明。

什麼沒有提到的是臨時文件是UTF-8編碼,但編碼沒有在HTML文件中說明。

< meta>標籤實際設置所需的編碼,並解決了我的問題。

避免聲明編碼的一種方法是使用AddImageUrl()方法,我期望從HTTP/HTML響應中檢測HTML編碼。

0

對元標記和AddImageURL方法進行編碼可能有助於處理簡單的文檔,但不會出現在鏈式情況下,儘管編碼標記會以某種方式丟失編碼。我遇到了這個問題(完全按照原始問題描述 - 一些外部字符,如變音符號會消失),並且看不到任何解決方案。我正在考慮完全擺脫ABCPDF並將其替換爲可以呈現PDF格式的SSRS。