如何使用pdfbox恢复pdf中的上次增量更新?
例如,原始文件签名文件
当我使用增量保存对原始文档进行数字签名(证书签名)时,我会得到一个签名的文档。在检查签名文件的来源时,我可以看到“%%EOF”出现了2次。如果我手动删除最后一个“%%EOF”及其内容,我可以看到PDF返回到其初始状态,这与原始文档非常相似。
我怎样才能务实地做到这一点?
我正在使用PDFBOX v2.0.8
祝你好运,阿披舍克
有更先进的方法,也有不太先进的方法。
这是最简单的一个:它搜索%%EOF标记,然后立即切断。这可能与之前的原始版本不同,因为该标记后面可能有一个可选的行尾标记。但是,除非之前的版本已签名或线性化,否则带行尾标记的变体和不带行尾标记的变体将等效为PDF文件。
对于搜索
%%EOF
标记,我们使用来自twitter/Elep-bird项目的StreamSearcher
类,参见。这个早期的堆栈溢出答案:
public List<Long> simpleApproach(InputStream pdf) throws IOException {
StreamSearcher streamSearcher = new StreamSearcher("%%EOF".getBytes());
List<Long> results = new ArrayList<>();
long revisionSize = 0;
long diff;
while ((diff = streamSearcher.search(pdf)) > -1) {
revisionSize += diff;
results.add(revisionSize);
}
return results;
}
为了只复制所需的字节数,我们使用Guava的ByTestStreams类。(有很多选择,例如Apache Commons IO,但Guava碰巧已经在我的测试项目依赖项中。)
List<Long> simpleSizes = null;
try ( InputStream resource = GET_DOCUMENT_INPUTSTREAM) {
simpleSizes = simpleApproach(resource);
}
if (1 < simpleSizes.size()) {
try ( InputStream resource = GET_DOCUMENT_INPUTSTREAM;
OutputStream file = new FileOutputStream("previousRevision.pdf")) {
InputStream revision = ByteStreams.limit(resource, simpleSizes.get(simpleSizes.size() - 2));
ByteStreams.copy(revision, file);
}
}
或GET\u DOCUMENT\u INPUTSTREAM
可能是一个新的文件输入流(PDF\u路径)新的ByteArrayInputStream(PDF\u字节)
或任何您必须重复检索PDF的输入流的方式。对于这些示例(FileInputStream,
ByteArrayInputStream),您甚至可以使用重置()重新使用相同的流。
我想在系统中使用增量备份作为主要的cassandra备份类型,但我有一些误解: 从增量备份进行还原的一种方法对我有用 - 只需从备份文件夹复制到表文件夹,这是正确的方法吗? 我可以以某种方式备份表\键空间参数,如索引/replica_factor等吗? 谢谢。
问题内容: 我正在使用Apache PDFBox处理Java应用程序中的PDF文件。我想在每个页面上分割一个PDF文档。 是否有可能做到这一点Apache PDFBox?如果是这样,怎么办? 问题答案: 可以使用来实现。 这是一个示例代码,它将在每个页面上拆分文档: 您可以使用来控制每个拆分的PDF的页数。
我正在迁移一些代码(最初使用iText)来使用PdfBox进行PDF合并。除了创建PDF包或文件夹,一切都很好。我不得不承认,直到现在我才意识到它的存在。 这是我的代码片段(使用iText): 我需要这个,但与PdfBox。 我正在研究两者的 API 和文档,但找不到解决方案。任何帮助都会很棒。 附言。如果我给人留下印象,我需要在iText中解决方案,我需要它在PdfBox中,因为迁移是从iTex
我正在尝试使用pdfbox库签署pdf。我现在卡住了,真的需要帮助。 这是我的代码: 然后我正在保存我的pdf,但是:1)我注意到sign method从来没有被调用2)我应该在哪里附加CertyFicate?在sign method中? 以下是我保存PDF的方法:
我目前正在尝试用PDFBox生成一些手动封面的PDF,我想知道是否有可能在我的PDF中获取一个精确的文本区域并根据我的曼努埃尔厚度将其移动(向左)(这将由我的手册将有的页数决定) 我很好地创建了我的PDF文件,但我没有找到一种只获取一块文本的方法。 是否可以使用PDFBox这样做? 注意:我试着在网上和其他问题上搜索,但没有一个有用。 谢啦
我正在尝试缩放pdf文件,就像复印机中的缩放功能一样,它可以按百分比缩放文档(如下所示:https://inspectapedia.com/graphics/Safari_Page_Setup.jpg),我正在使用pdfbox管理我的pdf文件。我尝试过这个代码,但为什么它不起作用?代码中没有错误。 有人知道为什么该代码不起作用吗? 编辑 我需要它在API 16上工作