簡體   English   中英

或者在Java中使用iText pdf更改pdf頁面的顏色

[英]Change the color of pdf pages alternatively using iText pdf in java

我正在根據客戶活動創建報告。 我正在iText PDF庫的幫助下創建此報告。 我想用藍色背景色(用於產品名稱和免責聲明)創建前兩個頁面,並用白色(不使用背景色)創建其余頁面。 我使用以下代碼在報告的開頭用藍色塗了兩頁。

Rectangle pageSize = new Rectangle(PageSize.A4);
pageSize.setBackgroundColor(new BaseColor(84, 141, 212));
Document document = new Document( pageSize );

但是當我使用document.newpage()移至第三頁時,該頁面仍為藍色。 我無法更改第三頁的顏色。 我想將第三頁的顏色更改為白色。 如何使用iText做到這一點?

這是我如何在Java中使用iText如何添加pdf的頁面背景色的后續問題

盡管該問題的答案中給出的建議有效,但這並不是您可以獲得的最佳建議。 如果我早些時候看過您的原始問題,我將以不同的方式回答。 我會建議您使用頁面事件,如PageBackgrounds示例中那樣。

在此示例中,我為頁面1和2創建藍色背景,為所有后續偶數頁面創建灰色背景。 參見page_backgrounds.pdf

如何實現的? 好吧,使用與我對這個相關問題的回答相同的技術: 如何使用iText庫5.5.2為整個pdf頁面繪制邊框

我創建這樣的頁面事件:

public class Background extends PdfPageEventHelper {
    @Override
    public void onEndPage(PdfWriter writer, Document document) {
        int pagenumber = writer.getPageNumber();
        if (pagenumber % 2 == 1 && pagenumber != 1)
            return;
        PdfContentByte canvas = writer.getDirectContentUnder();
        Rectangle rect = document.getPageSize();
        canvas.setColorFill(pagenumber < 3 ? BaseColor.BLUE : BaseColor.LIGHT_GRAY);
        canvas.rectangle(rect.getLeft(), rect.getBottom(), rect.getWidth(), rect.getHeight());
        canvas.fill();
    }
}

如您所見,我首先檢查頁碼。 如果它是一個奇數並且不等於1,我什么也不會做。

但是,如果我在第1頁或第2頁上,或者頁碼是偶數,則從writer那里獲得內容,從document得到頁面的尺寸。 然后,將填充顏色設置為藍色或淺灰色(取決於頁碼),然后為覆蓋整個頁面的矩形構造路徑。 最后,我用填充顏色填充該矩形。

現在我們有了自定義的Background事件,我們可以像這樣使用它:

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
Background event = new Background();
writer.setPageEvent(event);

如果您需要其他行為,請隨時調整Background類。

暫無
暫無

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

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