繁体   English   中英

iTextSharp - html到pdf,背景颜色为字体

[英]iTextSharp - html to pdf with background color for font

我正在使用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库,但同样的事情发生了。

HTMLWorker正在进行零工作,所有工作都在单独但相关的项目XMLWorker完成,因此请转到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基本教程。 寻找背景教程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM