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



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

我知道iText为此目的提供了一个类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();
}

(添加图像到图层测试testAddLikeIan(

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

最新更新