iTextSharp-html到pdf,字体背景色

本文关键字:字体 背景色 pdf iTextSharp-html | 更新日期: 2023-09-27 18:25:54

我正在使用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>

这不会突出显示文本,我希望它这样做。然而,使用"颜色:红色",可以改变文本的颜色,但我需要它突出显示,就像"背景"一样。

无论如何,我一直在寻找最后一天,但找不到解决方案。这可能吗?如果没有,是否有支持此功能的库?我也试过佩奇金图书馆,但同样的事情也发生了。

iTextSharp-html到pdf,字体背景色

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();
        }
    }
}

我想你已经找到了答案。http://blog.rubypdf.com/itextsharp/tutorial01/index.html这是一个基本的教程。查找背景教程。