【问题标题】:iTextSharp - html to pdf with background color for fontiTextSharp - 带有字体背景颜色的 html 到 pdf
【发布时间】:2013-08-01 18:30: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>

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

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

【问题讨论】:

  • 我不知道你是否已经看过这个关于 Pechkin 和背景颜色的常见问题解答,但是...github.com/gmanny/…(它应该几乎默认设置为 true,IMO)

标签: c# html pdf-generation itextsharp


【解决方案1】:

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

【讨论】:

    【解决方案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();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多