itextsharp html到pdf

Dom*_*ams 0 c# itextsharp

我想在pdf中更改一些HTML.我的所有HTML都是HTML字符串,但我不知道如何正确传递它iTextSharp.

public void PDF()
        {

            // Create a doc object
            var doc = new doc(PageSize.A4, 50, 50, 25, 25);

            // Create a new PdfWrite object, writing the output to the file ~/PDFTemplate/SimpleFormFieldDemo.pdf
            var output = new FileStream(Server.MapPath("t.pdf"), FileMode.Create);
            var writer = PdfWriter.GetInstance(doc, output);

            // Open the doc for writing
            doc.Open();

            //Add Wallpaper image to the pdf
            var Wallpaper = iTextSharp.text.Image.GetInstance(Server.MapPath("hfc.png"));
            Wallpaper.SetAbsolutePosition(0, 0);
            Wallpaper.ScaleAbsolute(600, 840);
            doc.Add(Wallpaper);


            iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(doc);
            StyleSheet css = new StyleSheet();
            css.LoadTagStyle("body", "face", "Garamond");
            css.LoadTagStyle("body", "encoding", "Identity-H");
            css.LoadTagStyle("body", "size", "12pt");

            hw.Parse(new StringReader(HTML));

            doc.Close();
            Response.Redirect("t.pdf");
        }
Run Code Online (Sandbox Code Playgroud)

如果有人知道如何使这项工作..这是好的.谢谢Dom

Bru*_*gie 6

请下载StackOverflow上的最佳iText问题.这是一本免费的电子书,你将从中受益.

下载完之后,请转到标题为"解析XML和XHTML"的部分.

请允许我引用这个问题的答案:RowSpan在iTextSharp中不起作用?

您正在使用HTMLWorker而不是XML Worker,并且您是对的: HTMLWorker不支持CSS.说CSS在iTextSharp中不起作用是错误的.它在您使用时不起作用HTMLWorker,但是有记录:您需要的CSS在XML Worker中工作.

请丢弃您的代码,然后使用XML Worker重新开始.

书中有很多例子(简单的和复杂的例子).我只给你一个:

using (var fsOut = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
    using (var stringReader = new StringReader(result))
    {
        var document = new Document();
        var pdfWriter = PdfWriter.GetInstance(document, fsOut);
        pdfWriter.InitialLeading = 12.5f;
        document.Open();
        var xmlWorkerHelper = XMLWorkerHelper.GetInstance();
        var cssResolver = new StyleAttrCSSResolver();
        var xmlWorkerFontProvider = new XMLWorkerFontProvider();
        foreach (string font in fonts)
        {
            xmlWorkerFontProvider.Register(font);
        }
        var cssAppliers = new CssAppliersImpl(xmlWorkerFontProvider);
        var htmlContext = new HtmlPipelineContext(cssAppliers);
        htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
        PdfWriterPipeline pdfWriterPipeline = new PdfWriterPipeline(document, pdfWriter);
        HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, pdfWriterPipeline);
        CssResolverPipeline cssResolverPipeline = new CssResolverPipeline(cssResolver, htmlPipeline);
        XMLWorker xmlWorker = new XMLWorker(cssResolverPipeline, true);
        XMLParser xmlParser = new XMLParser(xmlWorker);
        xmlParser.Parse(stringReader);
        document.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

(来源:iTextSharp XmlWorker:从右到左)

如果您想要一个更简单的示例,请查看以下问题的答案:

将HTML字符串和CSS字符串解析为iText(Sharp)元素列表的代码非常简单:

ElementList list = XMLWorkerHelper.parseToElementList(html, css);
Run Code Online (Sandbox Code Playgroud)

您可以在iText官方网站上找到更多示例.