使用iText创建不可见的PDF对象

时间:2012-09-11 09:21:56

标签: java pdf itext

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

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

我听说过有关PDF字典的内容,但我不知道该怎么做(或者是否有另一种方式)。我不想使用XMP / XML文件,我的数据比键值更复杂。

有人会给我写几个代码行代码,让我能够:

  • 使用iText
  • 将新的dicitonary添加到PDF
  • 使用iText
  • 填充数据
  • 使用iText
  • 将其找到文件中
  • 使用iText
  • 读取

2 个答案:

答案 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