如何在html中添加pdf中的行,如<hr />标记

时间:2011-03-12 10:41:05

标签: itextsharp

我需要使用iTextSharp.dll中的pdf生成,在html页面中使用类似


标记的行

3 个答案:

答案 0 :(得分:3)

你可以使用iTextSharp draw Shapes and Graphics

答案 1 :(得分:1)

我在网上找到了这个,没有经过测试,但是如果它不适合你的话会在以后发现。

PdfWriter writer = PdfWriter.getInstance(document, out);
PdfContentByte cb = writer.getDirectContent();

cb.setLineWidth(2.0f);   // Make a bit thicker than 1.0 default
cb.setGrayStroke(0.95f); // 1 = black, 0 = white
float x = 72f;
float 7 = 72f;
cb.moveTo(x,         y);
cb.lineTo(x + 72f*6, y);
cb.stroke();

答案 2 :(得分:1)

因为,iTextSharp在理解几个HTML样式/标签方面确实存在局限性,并且在解析时会在html中包含<hr />标记时出错。

解决方案是一个小解决方法并使用图形:

  • 您需要创建一个扩展HTMLWorker类的新类,并覆盖StartElement方法,该方法为每个html元素的启动提供事件。

    public class HTMLWorkerExtended : HTMLWorker
    {
    LineSeparator line = new LineSeparator(4f, 100f, BaseColor.BLACK, Element.ALIGN_CENTER, -1);
    public HTMLWorkerExtended(IDocListener document): base(document)
    {
    
    }
    public override void StartElement(string tag, IDictionary<string, string> str)
    {
        if (tag.Equals("hrline"))
            document.Add(new Chunk(line));
        else
            base.StartElement(tag, str);
    }
    

    }

  • 在您的html中,添加<hrline />标记,无论您想要分页符。

  • 现在使用HTMLWorkerExtended class'对象来解析html。

                using (TextReader htmlViewReader = new StringReader(htmlText))
                {
                    using (var htmlWorker = new HTMLWorkerExtended(pdfDocument))
                    {
                        htmlWorker.Open();
                        htmlWorker.Parse(htmlViewReader);
                    }
                }