如何使用Java计算PDF / Word文档中的彩色页面

时间:2015-06-04 13:11:19

标签: java pdf

我希望使用Java开发一个桌面应用程序,以计算 PDF Word 文件中的彩色页数。这将用作整个系统的一部分,以帮助根据页数(颜色/ B& W)计算打印文档的成本

理想情况下,应用程序的用户将使用文件对话框选择所需的PRF / Word文件,然后应用程序可以计算并输出彩色页面的数量,从而允许系统相应地自动计算文档成本。

即 如果A4彩色页面每页花费50c打印, 和B& W每页花费10c, 计算每个彩色/ B& W页面的文档总成本。

我知道现有软件 Rapid PDF Count http://www.traction-software.co.uk/rapidpdfcount/,但不适合作为整合到新系统的一部分。我也尝试过根据这个解决方案使用GhostScript / Python:http://root42.blogspot.de/2012/10/counting-color-pages-in-pdf-files.html,但这需要太长时间(5分钟计算100页pdf),并且很难在桌面应用程序中实现。

是否有任何使用Java(或替代语言)计算PDF或Word文件中彩色页数的方法

由于

2 个答案:

答案 0 :(得分:1)

虽然听起来很容易,但任务相当复杂。

一种选择是使用诸如iText之类的程序来walk every single token in the PDF,寻找支持颜色的标记,并将其与“黑色”的定义进行比较。但是,这只会获得基本的文本和绘图命令。图像是一个完全不同的野兽,所以你可能需要找到一个图像解析器或获取每个规范的副本然后走这些。

令牌行走的一个缺点是,您需要正确处理引用其他内容的令牌并进一步处理这些令牌。

另一个缺点是事情可能会相互重叠,所以你可能想要了解它们的坐标,z-index,透明度等等。

道路上会有更多的颠簸,但这是一个良好的开端。最有趣的是,如果你完成了这个,你实际上会发现你已经部分构建了一个PDF渲染器!

接下来,您需要定义“黑色”。在我的头顶有RGB黑色,CMYK黑色,灰色黑色和Lab黑色以及一些Pantones。这不应该太难,但如果我要构建这个,我想知道“空白墨水用量”,这也可能是灰色阴影。你也可能需要处理“富裕的空白”!

所以,总而言之,我认为您找到的GhostScript选项确实是最好的选择。它从字面上渲染PDF并从RGB角度计算墨水覆盖率。你仍然应该处理灰色,但这不应该太难,here's a good starting point

答案 1 :(得分:0)

想知道点击费用是一个非常常见的问题,但根本不容易解决。正如克里斯哈斯所给出的答案已经表明的那样,但我想对它进行另一次调整。

首先,您必须想知道您是否真的想要支持Word和PDF文档。分析Word文件没有您想象的那么有用,因为Word文件可能会在打印之前转换为其他内容。而且由于你是从Word开始的,因此你在Word中将漂亮的RGB黑色文本转换为不完美的4色黑色PDF的可能性非常高。换句话说,即使您可能将Word中的黑色文本页面计为“便宜”的。页面,从Word转换为可以打印的内容后,它可能会变成一个昂贵的彩色页面。

让我们考虑一下PDF案例。 PDF支持一系列色彩空间(灰色,RGB,CMYK,相同的ICC配置文件,专色和一些多点颜色变体,CalGray和CalRGB和Lab。除此之外,还有一系列非常棘手的问题你必须考虑到的透明度,套印,阴影,图像,面具等功能。计算你需要的唯一真正好的方法就是完成与你的打印机基本相同的工作;转换PDF每页一张图像并检查像素。

由于你想做什么,最好的进步方式是:
1)将任何单词文件转换为PDF
2)将任何PDF文件转换为CMYK
3)将该CMYK文件的每一页渲染成图像。

完成后,您可以检查图像并查看是否还有任何颜色。您可以使用许多潜在的技术。 GhostScript绝对是一款,但也有商业解决方案,肯定会更昂贵但可能更快。