0

我有一个输出为 PDF 的程序,但是,我希望它能够从中读取。

我想出了我自己的程序能够读取的数据类型,但我需要它以某种方式包含在 PDF 文件中(没有多个文件,我希望每个输出一个文件)。我还需要这些数据对用户来说是不可见且不可检测的。

我听说过一些有关 PDF 词典的信息,但我不知道该怎么做(或者是否有其他方法)。我不想使用 XMP/XML 文件,我的数据比键值更复杂。

如果有人给我写了几行示例代码,这将使我能够:

  • 使用 iText 向 PDF 添加新词典
  • 使用 iText 填充数据
  • 使用 iText 在文件中找到它
  • 使用 iText 从中读取
4

2 回答 2

3

您想做一些类似于 Adob​​e Illustrator 正在做的事情。如果您从 Adob​​e Illustrator 创建 PDF,则可以封装原始 AI 文件。这给您的印象是可以编辑 PDF。实际上,Adobe Illustrator 获取 AI 文件并使用它进行编辑,并从更新的 AI 重新创建 PDF。

这些信息存储在哪里?请参阅 ISO-32000-1 第 14.5 节:

符合标准的产品可以使用此字典作为存储与该文档、页面或表单相关的私人数据的地方。此类私有数据可以传达对生成它的合格产品有意义的信息(例如有关图形编辑器的对象分组信息或 Adob​​e Photoshop® 使用的图层信息),但可能会被通用的合格阅读器忽略。

我不确定这里问的是什么。如果您要像我上面回答的那样寻求建议:例如,将 PieceInfo 条目添加到根字典(又名目录)。这都是有据可查的,不是吗?阅读 ISO 规范,并阅读“iText in Action”的第 4 部分。

如果您的问题是:为我编写一些代码来完成我需要做的事情。那么我认为这或多或少违反了本网站的目标。

于 2012-09-11T09:52:56.320 回答
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

于 2012-09-11T10:02:24.913 回答