我有一个输出到PDF的程序,但是,我希望它能够从中读取。
我已经提出了我自己的数据类型,我的程序能够读取,但我需要它以某种方式包含在PDF文件中(没有多个文件,我希望每个输出一个文件)。 我还需要这些数据对用户不可见且不可检测。
我听说过有关PDF字典的内容,但我不知道该怎么做(或者是否有另一种方式)。我不想使用XMP / XML文件,我的数据比键值更复杂。
有人会给我写几个代码行代码,让我能够:
答案 0 :(得分:3)
您想要做类似于Adobe Illustrator正在做的事情。如果从Adobe Illustrator创建PDF,则可以封装原始AI文件。这为您提供了可以编辑PDF的印象。实际上,Adobe Illustrator会获取AI文件并使用它来编辑,并从更新的AI中重新创建PDF。
这些信息存储在哪里?见ISO-32000-1第14.5节:
合规产品可能会将此词典用作存储位置 与该文档,页面或表单相关的私人数据。这样 私人数据可以传达对符合性有意义的信息 产生它的产品(例如关于对象分组的信息) 图形编辑器或AdobePhotoshop®使用的图层信息)但是 通用符合读者可能会忽略。
我不确定这里会问什么。如果您正在寻求我上面回答的建议:例如,将一个PieceInfo条目添加到根词典(又名目录)。这都记录在案,不是吗?阅读ISO规范,并阅读“iText in Action”的第4部分。
如果您的问题是:为我编写了一些我需要做的代码。然后我认为这或多或少违反了本网站的目标。
答案 1 :(得分:1)
嗯,你可以将数据十六进制编码为一个字符串,然后将其绘制出屏幕,如下所示:
cb.showTextAligned(PdfContentByte.ALIGN_LEFT,"HIDDENDATA_"+ hexencodeddata, 2000f,2000f, 0f);
并读取处理所有字符串搜索HIDDENDATA _
另一种方法是使用注释
public void addAnnotation(PdfWriter writer,
Document document, Rectangle rect, String text) {
PdfAnnotation annotation = new PdfAnnotation(writer,
new Rectangle(
rect.getRight() + 10, rect.getBottom(),
rect.getRight() + 30, rect.getTop()));
annotation.setTitle("Text annotation");
annotation.put(PdfName.SUBTYPE, PdfName.TEXT);
annotation.put(PdfName.OPEN, PdfBoolean.PDFFALSE);
annotation.put(PdfName.NAME, new PdfName(text));
writer.addAnnotation(annotation);
}
然后用这样的东西来阅读它。
http://downloads.snowtide.com/javadoc/PDFTextStream/2.3.2/com/snowtide/pdf/PDFTextStream.html