在我参与过的几个网络应用程序中,我们已经为表格字母和发票等内容生成并存储了PDF文件。
在每种情况下,都涉及三个要素:
虽然任何两个字母或发票可能因< 1kb的文本,我们最终为每个文本存储一个单独的,完整的PDF blob。无论是在数据库中还是在文件系统中(an unpleasant choice),这都是浪费空间。
我考虑过只存储不同的文本和模板,并按需生成PDF,但1)生成PDF文件速度慢; 2)旧文档应始终以相同的方式重新打印,而不是因为模板已更新而更改因为他们得救了。
我有什么解决方案吗?我想:
如何有效地存储几乎相同,不可变的可打印文档?
答案 0 :(得分:2)
以下讨论了一种可能有用的一般方法,如果您可以复制,模板,增量更新,然后保存和剥离,只保留PDF的增量部分。
稍后可以将其与原始PDF重新组合。
示意图,逐步更新的PDF看起来像。
如果您有一个共同的原始模板,加上需要应用以生成不同变体的许多不同更新,那么将原始版本存储一次就很有意义,然后只保存输出的增量部分PDF文件。只需将更新的片段附加到原始PDF上,就可以在需要时重新组合这些片段。
使用您首选的编程语言,可以在较低级别轻松实现PDF的增量部分的剥离。
中间PDF(原始PDF +增量更新)的基本结构如下所示:
%PDF-1.3
%% ** Original document body ****
xref
0 9
0000000000 65535 f
0000000014 00000 n
%% ** ...etc **
trailer
<<
/Root 1 0 R
/Size 9
>>
startxref
644
%%EOF
%% ** Updated section ***
xref
0 1
0000000000 65535 f
3 1
0000000951 00000 n
9 3
0000000892 00000 n
0000001024 00000 n
0000001200 00000 n
trailer
<<
% ...
>>
startxref
1324
%%EOF
直至并包含倒数第二个%%EOF
的部分是您的原始模板。这是不变部分,应该与原始PDF匹配,只需要存储一次。
更新部分是PDF中倒数第二个%%EOF
之后的所有内容,它们是不同的文本,作为增量更新,需要多次存储。
希望您能找到一个合适的工具来执行增量更新,并生成最终的PDF,只附加一个小的更新部分。