Как создать заголовок в формате PDF с использованием C # iText7 - PullRequest
0 голосов
/ 17 октября 2018

Я пытался добавить заголовок на все страницы моего PDF, используя пакет iText в .NET C #, но он не работает.

Примечание. Я использую iText версии 7

Я попробовал следующие ответы переполнения стека, они демонстрировались только для нижнего колонтитула (т. Е. END_PAGE ), а не для START_PAGE

Мой код :

class Program {
    static void Main(string[] args) {

        var writer = new PdfWriter("E:/pdfSample/bala.pdf");
        var pdf = new PdfDocument(writer);
        var document = new Document(pdf,PageSize.A4);
        document.SetMargins(120,40,100,40);

        // Create a PdfFont
        var font = PdfFontFactory.CreateFont(StandardFonts.TIMES_ROMAN);

        List list = new List();

        // Add ListItem objects
        list.Add(new ListItem("Never gonna give you up"))
            .Add(new ListItem("Never gonna let you down"))    
            .Add(new ListItem("Never gonna run around and desert you"))
            .Add(new ListItem("Never gonna make you cry"))
            .Add(new ListItem("Never gonna say goodbye"))
            .Add(new ListItem("Never gonna tell a lie and hurt you"));
        // Add the list
        document.Add(list);

        // Add a Paragraph
        document.Add(new Paragraph("iText is:").SetFont(font));


        document.Add(logo);
        var tree = new Image(ImageDataFactory.CreateJpeg(new Uri("E:/pdfSample/RelatednessTree.jpg")));
        // document.Add(tree);

        pdf.AddEventHandler(PdfDocumentEvent.START_PAGE,new Paragraph("HEADER TEXT"));
        pdf.AddEventHandler(PdfDocumentEvent.END_PAGE,new Paragraph("FOOTER TEXT"));

        document.Close();

    }
}


public class TableFooter : IEventHandler {
    private Paragraph para;

    public TableFooter(Paragraph paraObj) {
        para = paraObj;
    }

    public void HandleEvent(Event @event) {
        PdfDocumentEvent docEvent = @event as PdfDocumentEvent;
        PdfDocument doc = docEvent.GetDocument();
        PdfPage page = docEvent.GetPage();
        PdfCanvas canvas = new PdfCanvas(page.NewContentStreamBefore(),page.GetResources(),doc);

        new Canvas(canvas,doc, new Rectangle(20, -20, page.GetPageSize().GetWidth() - 80,80)).Add(para);
    }
}

Пожалуйста, помогите мне, как добавить Заголовок (т. е. START_PAGE ) и какая конфигурация требуется для отображения заголовка на всех страницах PDF.

1 Ответ

0 голосов
/ 17 октября 2018

Я делал это в прошлом, используя PdfEventHandler, переопределяя подобные методы.

class PdfEvents : PdfPageEventHelper
    {

        public override void OnStartPage(PdfWriter writer, Document document)
        {

        }

        public override void OnEndPage(PdfWriter writer, Document document)
        {  

        }
    }

, а затем вы можете написать свой контент, получив точную площадь в pdf, используя:

table.WriteSelectedRows(2, -1, 0, -1, 36, 806, canvas);
...