0

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

4

2 回答 2

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

旁注,我真的建议不要传递 a 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();
        }
    }
}
于 2013-08-01T13:27:03.187 回答
0

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

于 2013-08-01T02:29:16.660 回答