簡體   English   中英

對 IText 中的所有 PDF 頁面使用單一模板 7

[英]Using Single Template for all PDF Pages in IText 7

我有以下PDF 模板,它應該與我正在創建的 PDF 中添加的所有頁面一致,

在此處輸入圖像描述

問題是,我只為第 1 頁和 rest 的頁面獲取此模板,僅使用空白模板,這是我現在使用的代碼,

PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC),new PdfWriter(baosPDF));

PageSize ps = new PageSize(900, 780);

// Initialize document
Document document = new Document(pdfDoc, ps);
document.setMargins(80f, 20f, 50f, 20f);

PdfFont font = PdfFontFactory.createFont(StandardFonts.HELVETICA);
PdfFont bold = PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);
for(int i = 0; i < 10; i++){
    document.add(new Paragraph("Some Content"));
    document.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
}
document.close();

我已經將這個itextsharp add 1 page template 添加到所有頁面示例中,但我需要一些特定於 Itext 7 的內容,因為它與 5.xx 版本有很大不同

如何讓我的 PDF 具有如圖所示的單個模板對所有頁面通用?

如評論中所述,您需要按照教程第 7 章中的說明創建一個IEventHandler

這是 PDF 到 HTML 教程( 第 4 章)的示例。

class Background implements IEventHandler {
    PdfXObject stationery;

    public Background(PdfDocument pdf, String src) throws IOException {
        PdfDocument template = new PdfDocument(new PdfReader(src));
        PdfPage page = template.getPage(1);
        stationery = page.copyAsFormXObject(pdf);
        template.close();
    }

    @Override
    public void handleEvent(Event event) {
        PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
        PdfDocument pdf = docEvent.getDocument();
        PdfPage page = docEvent.getPage();
        PdfCanvas pdfCanvas = new PdfCanvas(
            page.newContentStreamBefore(), page.getResources(), pdf);
        pdfCanvas.addXObject(stationery, 0, 0);
        Rectangle rect = new Rectangle(36, 32, 36, 64);
        Canvas canvas = new Canvas(pdfCanvas, pdf, rect);
        canvas.add(
            new Paragraph(String.valueOf(pdf.getNumberOfPages()))
                .setFontSize(48).setFontColor(Color.WHITE));
        canvas.close();
    }
}

如您所見,我們在構造函數中讀取模板,並在handleEvent()方法中將其繪制到Canvas。 在這個例子中,我們還添加了一個白色的頁碼,您可以刪除所有這些行。

public void handleEvent(Event event) {
    PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
    PdfDocument pdf = docEvent.getDocument();
    PdfPage page = docEvent.getPage();
    PdfCanvas pdfCanvas = new PdfCanvas(
        page.newContentStreamBefore(), page.getResources(), pdf);
    pdfCanvas.addXObject(stationery, 0, 0);
}

顯然,您還需要聲明處理程序:

PdfDocument pdf = new PdfDocument(writer);
IEventHandler handler = new Background(pdf, stationery);
pdf.addEventHandler(PdfDocumentEvent.START_PAGE, handler);

.Net(C#) 版本的代碼:

//Call the handler before multiple page generation
PdfDocument pdfDocument = new PdfDocument(writer);
IEventHandler handler = new Background(pdfDocument, @"YourTemplateFilePath");
pdfDocument.AddEventHandler(PdfDocumentEvent.START_PAGE, handler);

public class Background : IEventHandler
{
   PdfXObject stationery;

   public Background(PdfDocument pdf, String src)
    {
        PdfDocument template = new PdfDocument(new PdfReader(src));
        PdfPage page = template.GetPage(1);
        stationery = page.CopyAsFormXObject(pdf);
        template.Close();
    }

   public void HandleEvent(Event @event)
    {
        PdfDocumentEvent docEvent = (PdfDocumentEvent)@event;
        PdfDocument pdf = docEvent.GetDocument();
        PdfPage page = docEvent.GetPage();
        PdfCanvas pdfCanvas = new PdfCanvas(
        page.NewContentStreamBefore(), page.GetResources(), pdf);
        pdfCanvas.AddXObjectAt(stationery, 0, 0);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM