我正在使用iTextSharp将HTML转换为PDF并通过电子邮件发送给我。它工作正常,除了它似乎不支持“背景”风格。这是我用来解析HTML的代码
private MemoryStream createPDF(string html){
MemoryStream msOutput = new MemoryStream();
TextReader reader = new StringReader(html);
Document document = new Document(PageSize.A4, 30, 30, 30, 30);
PdfWriter writer = PdfWriter.GetInstance(document, msOutput);
HTMLWorker worker = new HTMLWorker(document);
document.Open();
writer.CloseStream = false;
worker.StartDocument();
worker.Parse(reader);
worker.EndDocument();
worker.Close();
document.Close();
msOutput.Position = 0;
return msOutput;
}
HTML看起来像这样:
<p>
Have you <span style="background:red;padding:0.1em 0;" title="This has been brought to your attention.">ever switched your electronic medical records vendor? If so...</span></p>
哪个不突出显示我想要的文字。然而,使用“颜色:红色”,工作,改变文本的颜色,但我需要它突出,像'背景'会做。
无论如何,我一直在寻找最后一天,但找不到解决方案。这可能吗?如果没有,是否有支持此功能的库?我也尝试了Pechkin库,但同样的事情发生了。
答案 0 :(得分:2)
HTMLWorker
正在进行零工作,所有工作都在单独但相关的项目XMLWorker
中完成,所以请转到此处。然后,您可以将其插入而不是HTMLWorker
:
//Bind a reader to our text
using (TextReader reader = new StringReader(html)) {
//Parse the HTML and write it to the document
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader);
}
旁注,我真的建议不要传递MemoryStream
除非你真的需要,而只是传递基础字节数组。当绕过原始流时,你必须担心当前位置,检查是否有东西为你关闭等等。我建议你改变你的方法(也注意using
模式):
private byte[] createPDF(string html) {
//Basic PDF setup
using (var msOutput = new MemoryStream()) {
using (var document = new Document(PageSize.A4, 30, 30, 30, 30)) {
using (var writer = PdfWriter.GetInstance(document, msOutput)) {
//Open our document for writing
document.Open();
//Bind a reader to our text
using (TextReader reader = new StringReader(html)) {
//Parse the HTML and write it to the document
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader);
}
//Close the main document
document.Close();
}
//Return our raw bytes
return msOutput.ToArray();
}
}
}
答案 1 :(得分:0)
我想你在这里有答案。 http://blog.rubypdf.com/itextsharp/tutorial01/index.html 一个基本的教程。寻找背景教程。