使用 iText 5 或 7 将图像层添加到 pdf

Adding image layers to a pdf using iText 5 or 7

我需要创建一个 pdf 文档,其中包含应包含在图层中的图像。每个图像都应包含在一个图层中,以便我们可以选择使每个图像可见或不可见。

我知道 iText 为此目的提供了 class PdfLayer 但他们没有解释如何使用它.令人惊讶的是,网上的教程并没有涵盖这个问题。

这是一个小小的开始:

    // Creating a PdfWriter 
    String dest = "export.pdf"; 
    PdfWriter writer = new PdfWriter(dest);

    // Creating a PdfDocument  
    PdfDocument pdfDoc = new PdfDocument(writer);


    // Adding an empty page 
    //pdfDoc.addNewPage(); 

    // Creating a Document   
    Document document = new Document(pdfDoc); 

    /////////////////////////////////////////////////////////

    // Creating an ImageData object 
    String imageFile = "map.png"; 
    ImageData data = ImageDataFactory.create(imageFile);

    // Creating an Image object 
    Image img = new Image(data);

    PdfLayer pdflayer = new PdfLayer("main layer", pdfDoc);
    pdflayer.setOn(true); 

    /* normally, here where the image should be added to the layer */

希望得到您的帮助,谢谢!

您可以通过在 PdfCanvas 中开始要绘制的图层、添加图像并再次结束其中的图层来将图像添加到图层。

根据您是否要自己做内容排版工作,您可以直接或通过 Canvas.

添加图片部分

例如:

try (   PdfWriter writer = new PdfWriter(...);
        PdfDocument pdfDoc = new PdfDocument(writer);
        Document document = new Document(pdfDoc)   ) {
    ImageData data = ImageDataFactory.create(IMAGE_DATA);
    Image img = new Image(data);

    PdfLayer pdflayer = new PdfLayer("main layer", pdfDoc);
    pdflayer.setOn(true); 

    // using a Canvas, to allow iText layout'ing the image
    PdfCanvas pdfCanvas = new PdfCanvas(pdfDoc.addNewPage());
    try (   Canvas canvas = new Canvas(pdfCanvas, pdfDoc, document.getPageEffectiveArea(pdfDoc.getDefaultPageSize()))   ) {
        canvas.add(new Paragraph("This image is added using a Canvas:"));
        pdfCanvas.beginLayer(pdflayer);
        canvas.add(img);
        pdfCanvas.endLayer();
        canvas.add(new Paragraph("And this image is added immediately:"));
    }

    // or directly 
    pdfCanvas.beginLayer(pdflayer);
    pdfCanvas.addImage(data, 100, 100, false);
    pdfCanvas.endLayer();
}

(AddImageToLayer 测试 testAddLikeIan)

根据您的问题标题,您正在寻找适用于 iText 5 或 iText 7 的解决方案。上面的代码适用于 iText 7,我使用的是当前开发版本 7.1.4 -快照.