gpt4 book ai didi

java - 在java中将PDF读取为文件并使 "PDF"可编辑

转载 作者:太空宇宙 更新时间:2023-11-04 08:04:21 24 4
gpt4 key购买 nike

我有一个程序将用于构建问题数据库。我正在为一个网站制作它,希望用户知道内容是从该网站下载的。这就是为什么我希望输出为 PDF - 几乎每个人都可以查看它,几乎没有人可以编辑它(并删除例如页脚或水印,与某些更简单的文件类型不同)。这就解释了为什么它必须是 PDF。

该程序将被许多用户使用,他们将创建新的数据库或扩展现有的数据库。这就是为什么将输出形成为多个文件是实现我想要实现的目标的极其草率且低效的方式(这会让用户的事情变得复杂)。

我想要做的是创建 PDF 文件,这些文件在创建后仍然可以使用我的程序进行编辑。

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

我想出了三种方法:

  1. 将文件附加到 PDF,然后破坏 PDF 中包含该文件的部分,其方式只是使 PDF 不知道它包含该文件,从而使用户无法(轻松)注意到它。阅读该文档后,我会使用多个 PDF 库之一恢复损坏并提取文件。

  2. 将文件隐藏在图像中,该图像将添加到 PDF 第一页或最后一页的某个位置,以某种方式(仍然需要解决)隐藏在公众视线之外。知道了它的位置,使用 PDF 库检索它应该相对容易。

  3. 我了解到,如果您在 PDF 中添加“%”符号作为行中的第一个字符,整行将被 PDF 阅读器(至少是 Adob​​e 阅读器)忽略(类似于 Java 中的“//”),这使得我可以在 PDF 中添加任意数量的行(如果我知道在哪里,而且我知道),而最终用户却没有意识到这一点。我可以通过这种方式将整个自定义文件实现为 PDF。这里的问题是,我实际上必须使用 Java 的输入阅读器之一来阅读 PDF,但我不确定是哪一个。我知道 PDF 不能像文本文件一样读取,因为它是二进制文件(对吗?)。

最后,我决定采用方法3。除非有人有更好的想法,而条件是: 1. 只有一个文件。该文件是 PDF。 2. 用户不得意识到添加。

问题是我不知道如何将 PDF 作为文件读取(我并没有尝试将其作为 PDF 读取,我会使用 PDF 库来读取)。

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

最佳答案

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

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

更好的方法是使用 PDF 中另一种现有的数据编码方式:XMP 标签。这允许将任何类型的复杂键值对编码为 XML 并嵌入 PDF、JPEG 等中。请参阅 http://partners.adobe.com/public/developer/en/xmp/sdk/XMPspecification.pdf .

Java 中有一个开源库,允许您对其进行操作: http://pdfbox.apache.org/userguide/metadata.html 。另请参阅另一个成功的人的相关问题:custom schema to XMP metadatahttp://plindenbaum.blogspot.co.uk/2010/07/pdfbox-insertextract-metadata-frominto.html

关于java - 在java中将PDF读取为文件并使 "PDF"可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12308513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com