Как добавить строку в формате PDF, кактег в HTML - PullRequest
4 голосов
/ 12 марта 2011

Мне нужна линия, которая похожа натег на html-странице с помощью генерации PDF-файла из iTextSharp.dll

Ответы [ 3 ]

3 голосов
/ 12 марта 2011

Вы можете рисовать фигуры и графику с помощью iTextSharp.

1 голос
/ 11 сентября 2013

С тех пор, iTextSharp имеет ограничения в понимании нескольких стилей / тегов HTML и выдает ошибки при включении тега <hr /> в html при синтаксическом анализе.

Решение этого небольшого обходного пути и использование графики:

  • Вам необходимо создать новый класс, который расширяет класс 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);
                    }
                }
    
1 голос
/ 12 марта 2011

Я нашел это онлайн, не проверял, но позже, если он не работает для вас.

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();
...