我正在使用ABCpdf第5版,以便将一些html页面呈现为PDF。
我基本上使用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(äöü))将替换为空格。有趣的是并非全部。我做了什么弄清楚: 在我的html页面中。
`<meta http-equiv="content-type" content="text/xhtml; charset=utf-8" />`
如果我解析它,所有特殊字符都会正确呈现。但在我看来,这似乎是一个丑陋的黑客。
在早些时候我没有使用HttpServerUtility.Execute()
,但我让ABCpdf调用URL本身:pdfDoc.AddImageUrl("someUrl");
。我没有这样的编码问题。
我还能尝试什么?
答案 0 :(得分:5)
刚刚遇到ABCpdf 8的问题。
在您的代码中,您检索HTML内容并将pageResult传递给AddImageHtml()。正如documentation所述,
ABCpdf将此HTML保存到临时文件中并呈现该文件 使用'file://'协议说明符。
未提及的是临时文件是UTF-8编码的,但HTML文件中没有说明编码。
&lt; meta&gt; tag实际上设置了所需的编码,并解决了我的问题。
避免声明编码的一种方法是使用我希望从HTTP / HTML响应中检测HTML编码的AddImageUrl()方法。
答案 1 :(得分:0)
编码元标记和AddImageURL方法可能有助于简单的文档,但不是在链式情况下,尽管编码标记,编码会以某种方式丢失。我遇到了这个问题(正如原始问题中所述 - 某些外来字符如变音符号会消失),并且看不到解决方案。我正在考虑完全摆脱ABCPDF并用SSRS替换它,它可以呈现PDF格式。