使用 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 -快照.
我需要创建一个 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 -快照.