簡體   English   中英

java itext7 水印文本隱藏在圖像后面

[英]java itext7 watermark text is hiding behind images

我嘗試在 pdf 中使用 itext 添加水印。 使用此代碼可以毫無問題地工作:

import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.colors.PatternColor;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.canvas.PdfPatternCanvas;
import com.itextpdf.kernel.pdf.colorspace.PdfPattern;
import com.itextpdf.kernel.pdf.colorspace.PdfPattern.Tiling;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Paragraph;


public class TestNewPdf {

    @SuppressWarnings("resource")
    public static void main(String[] args) throws Exception {
        
        
        
        
          PdfReader reader = new PdfReader("F:/barcode/test.pdf");        
          PdfWriter writer = new PdfWriter("F:/barcode/outputTest.pdf");
        
        
        PdfDocument pdfDocument = new PdfDocument(reader,writer);
    
        PdfPattern.Tiling tiling = new Tiling(new Rectangle(220, 100));
        new Canvas(new PdfPatternCanvas(tiling, pdfDocument), pdfDocument, tiling.getBBox()).add(new Paragraph("franco")
                .setFontColor(ColorConstants.RED)
                .setBold()
                .setFont(PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD))
                .setFontSize(10f)
                .setRotationAngle(Math.PI / 10)
                );

        for (int i = 1; i <= pdfDocument.getNumberOfPages(); i++) {
            PdfPage page = pdfDocument.getPage(i);
            
            new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDocument)
                    .saveState()
                    
                    .setFillColor(new PatternColor(tiling))
                    .rectangle(page.getCropBox())
                    .fill()
                    .restoreState();
        }

        pdfDocument.close();
        
        
    }
    
    
    
    

}

但是當源 pdf 包含圖像或源 pdf 是掃描文件意味着 pdf 變得像圖像時,我在特定情況下遇到問題。

水印文本隱藏在圖像后面

有人可以幫我解決這個問題嗎

您使用page.newContentStreamBefore()為您的水印添加內容 stream 。 因此,在繪制頁面時,首先繪制水印,然后在其上繪制內容。 對於通常的文本和稀疏矢量圖形來說,這很好,但對於覆蓋內容的整個區域,水印可能會被完全隱藏。

嘗試改用page.newContentStreamAfter() 但請注意,您可能不想再將水印文本加粗,甚至可能僅限於輪廓,因為標記現在涵蓋了內容。

暫無
暫無

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

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