我需要创建一个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 */
希望您的帮助,谢谢!
答案 0 :(得分:0)
您可以通过在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-SNAPSHOT。