PDF页面流优化器库?

时间:2010-11-10 23:20:07

标签: pdf

是否有人编写了一个优化PDF页面流内容的库(或只是一个程序)?我说的是“删除没有整体效果的q ... Q块”,“合并相邻的BT ... ET块”,“轨道”图形状态和删除操作符设置了它已经具有的值“,甚至可以”重新排序绘图操作以最小化图形状态更改,这可以在不改变页面外观的情况下完成“。我对实现语言并不挑剔,但开源是非常受欢迎的,因为我可能需要根据我的特殊需求进行破解。

这是我想要做的一个例子的一小部分。 R的“网格”图形+其PDF后端产生了大量无意义的操作,如下所示:

1 J 1 j q
Q q
Q q
Q q
Q q
Q q
Q q
Q q
Q q
Q q
BT
0.000 0.000 0.000 rg
/F2 1 Tf 12.00 0.00 -0.00 12.00 168.43 14.40 Tm [(T) 120 (ask)] TJ
ET
Q q
BT
0.000 0.000 0.000 rg
/F2 1 Tf 0.00 12.00 -12.00 0.00 19.42 205.26 Tm 
[(Quer) -15 (ies per min) 10 (ute)] TJ
ET
Q q
Q q 23.02 489.60 26.53 0.00 re W n
Q q
Q q 23.02 489.60 26.53 0.00 re W n
Q q
Q q
Q q
[...]

这可以简化为

1 J 1 j
BT
/F2 1 Tf
12 0 0 12 168.43 14.40 Tm [(T) 120 (ask)] TJ
0 12 -12 0 19.42 205.26 Tm [(Quer) -15 (ies per min) 10 (ute)] TJ
ET

甚至可能更进一步使用文本操作符,这是我无法想象的。

2 个答案:

答案 0 :(得分:0)

Java“多价工具”有一个“压缩”工具,它将执行此操作: http://multivalent.sourceforge.net/Tools/pdf/Compress.html

Compress工具已从最新的Multivalent jar中删除,但您可以从以下位置下载旧版本: http://code.google.com/p/pdfsizeopt/downloads/detail?name=Multivalent20060102.jar&can=2&q=

答案 1 :(得分:0)

这看起来非常像iText的PdfGraphics2D界面的PDF输出,在一个比通常更糟糕的情况下。通常的情况也不是那么热,但并不是那么糟糕。

如果我是对的,答案仍然是否定的,但你可以自己写一个,因为你显然不必担心内容流:

ByteBuffer internalBuf = myPdfContentByte.getInternalBuffer();

String newContents = magic( internalBuf.toString() ); 

internalBuf.reset();
internalBuf.append( newContents );

magic()有点模糊不清,但编写删除“q Q”对的代码应该是微不足道的。在其中没有任何内容的剪切区域(行 - 线W n)不应该用一点regEx更难。

当不使用线路上限/线路连接设置(j& J)时,将更加困难。同上,组合文本块或将冗余更改转储到填充/描边颜色,字体和大小等

“文本运算符的复杂使用”将在短时间内开始看起来像黑魔法编译器优化。

如果这恰好是iText,如果你分享你的代码我们都会很感激。我保证,我们会高兴地接受任何PdfGraphics2D输出清理。

相关问题