【发布时间】:2019-03-26 08:34:53
【问题描述】:
我需要创建一个包含应包含在图层中的图像的 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 */
希望得到您的帮助,谢谢!
【问题讨论】:
-
首先,你所说的层到底是什么意思?我问是因为这不是 pdf 规范中定义的术语,所以它对我们来说可能意味着也可能不同。你是否例如是指可选的内容组?
-
根据 iText 规范:可选内容组是表示图形集合的字典,可以由查看器应用程序的用户动态地使其可见或不可见。在 iText 中,它们被称为图层。
-
我的回答能解决你的问题吗?或者还有未解决的问题?
-
@mkl 确实如此,谢谢。但是在itext中实现层的概念对我来说确实很奇怪并且难以掌握(开始层和结束层??)。最大的问题是官方文档没有解释任何内容。您知道如何在表格中构建一组图像并同时使用图层吗? (选择在单元格中显示和隐藏图像)。提前致谢!
-
“但是在 itext 中实现层的概念对我来说确实很奇怪,很难掌握” - 原因是“层”这个词已经具有误导性; PDF 规范中的正式名称是“可选内容组”,这更好地描述了这个概念:任何绘制的元素都可以属于这样的 OCG(甚至它们中的多个!),无论内容流中多早或多晚该元素被绘制。并且可以通过在标记内容运算符BDC 和EMC 之间用标记内容标记OC 将元素括起来来使元素成为可选的。 iText 用 start 和 end 反映了这一点
标签: java image pdf itext layer