繁体   English   中英

以Java文件格式读取PDF,并使“ PDF”可编辑

[英]Reading PDF in java as a file and making “PDF” editable

我有一个程序将用于建立问题数据库。 我正在为希望用户知道该网站已下载contet的网站而努力。 这就是为什么我希望输出为PDF的原因-几乎每个人都可以查看它,几乎没有人可以编辑它(并删除页脚或水印,这与某些简单的文件类型不同)。 这也解释了为什么是PDF。

该程序将被众多用户使用,这些用户将创建新数据库或扩展现有数据库。 这就是将输出形成为多个文件的原因,这是极其松散且效率低下的方式,无法实现我想要实现的目标(这会使用户复杂化)。

我要做的是创建PDF文件,创建后仍可使用我的程序进行编辑。

我想通过将我的程序可读取的自定义文件类型实现为输出PDF来实现此目的。

我想出了三种方法:

  1. 将文件附加到PDF,然后破坏其中包含它的PDF部分,使其仅使PDF意识不到它包含文件,从而使用户无法(轻松地)注意到它。 阅读文档后,我将使用可能的PDF库之一还原损坏并提取文件。

  2. 将文件隐藏在图像中,该图像将被添加到首页或最后一页的PDF位置,以某种方式(仍然需要解决)从公众眼中隐藏起来。 知道它的位置,应该很容易使用PDF库检索它。

  3. 我了解到,如果您在PDF的行首添加“%”符号,则PDF阅读器(至少是Adobe阅读器)将忽略整行(类似于Java中的“ //”),从而可以我要向PDF添加尽可能多的行(如果我知道,我知道),那么最终用户就会意识到这一点。 我可以将整个自定义文件实现为PDF。 这里的问题是我实际上必须使用Java的输入阅读器之一来阅读PDF,但是我不确定是哪一个。 我了解PDF不能像文本文件一样读取,因为它是二进制文件(对吗?)。

最后,我决定采用方法3。除非有人有更好的主意,而且条件是:1.仅一个文件。 该文件为PDF。 2.用户一定不知道添加的内容。

问题是我不知道如何将PDF读取为文件(我不是想将其读取为PDF,而要使用PDF库来读取)。

  1. 那么,有人有更好的主意吗?
  2. 如果不是,如何将PDF作为FILE读取,因此输出为字符数组(带有换行检测),然后用添加的内容重写整个文件?

在Java中,文本文件和二进制文件之间没有真正的区别,您可以将它们作为输入流读取。 区别在于,对于二进制文件,您不能真正为其创建一个Reader,因为它假定存在一种将字节流转换为unicode字符的方法,并且不适用于PDF文件。

因此,在您的情况下,您需要读取字节缓冲区中的文件,并可能遍历它们以扫描表示PDF中'%'和行尾字符的字节。

更好的方法是使用另一种在PDF中编码数据的方法:XMP标签。 这允许将任何类型的复杂键/值对都以XML编码并嵌入到PDF,JPEG等中。请参见http://partners.adobe.com/public/developer/zh/xmp/sdk/XMPspecification.pdf

Java中有一个开放源代码库,可让您对其进行操作: http : //pdfbox.apache.org/userguide/metadata.html 另请参阅成功的另一个人的相关问题: XMP元数据的自定义架构http://plindenbaum.blogspot.co.uk/2010/07/pdfbox-insertextract-metadata-frominto.html

全部都是1和0-只需使用RandomAccessFile并开始阅读。 PDF规范定义了有效的换行符是(多个)。 抓住一个十六进制编辑器并打开一个PDF,您至少可以开始对事情有所了解。 但是,请注意将行插入的位置-您需要将它们添加到文件的末尾,这样它们就不会将外部参照表的偏移量固定到obj条目。

这是一个可能有趣的相关问题: PDF解析文件预告片

我建议将您的评论放在startxref行之前。 如果将其放在其他位置,则可能会四处移动并破坏外部参照表指针。

因此,用于插入您的特殊评论的简单算法是:

转到文件末尾向后搜索startxref在startxref之前立即插入特殊注释-确保在特殊注释末尾插入换行符保存PDF

您可以(并且应该)在十六进制编辑器中手动执行此操作。

真的很重要:您的用户是否要保存对这些文件的更改? 即,如果他们填写表格字段,他们会点击保存吗? 如果是这样,则可能会在保存期间删除您的注释行(在这方面,不同版本的PDF查看器的行为可能会有所不同)。

XMP标记是完成您要尝试做的事情的正确方法-您可以嵌入整个XML段,而且我认为很难提出无法表示为XML的数据结构。

我个人建议为此使用iText,但我有偏见(我是开发人员之一)。 《 iText In Action》一书中有出色的章节介绍了如何将XMP数据嵌入PDF。 这是本书中的一些示例代码(我绝对推荐): http : //itextpdf.com/examples/iia.php?id=217

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM