Java中的FOP图像缩放问题

时间:2009-05-07 20:00:40

标签: java xsl-fo apache-fop

好的,所以这是我的问题:

我们使用FOP创建“漂亮”的报告输出。如果用户想要一个文件,我们使用pdf选项,使用AWT进行预览,使用-print选项打印它们。我们使用FOP 0.25.x,我完全认识到它不是最新版本,但升级到0.95似乎是一项非常重要的任务,我不一定要这样做。

无论如何,我们的一位用户注意到,当ID卡(通过FOP -print选项生成)打印到身份证打印机时,卡片上的图像(员工的照片)中有一些损坏。像绿色和红色的点和线一样的。我们还发现,如果我们向我们的HP彩色激光喷射器发送完全相同的打印请求,它打印得很好。为了增加这种陌生感,如果我们使用FOP创建身份证的PDF然后通过卡片打印机上的acrobat阅读器进行打印,它打印就可以了。

我最终发现它与图像缩放有关...我们将600px高图像缩小到120px。如果我把图像压低,甚至只是将它们分成两半,腐败就会显着下降。同样,当我升级图像时,腐败现象也随之增加。

所以我的问题是:任何人都知道这里发生了什么?或者曾遇到过这样的事情?

由于我不知道为什么会这样,我不知道如何解决根本原因,但我一直在研究各种解决方法:

1)使用FOP创建图像的pdf,然后通过Java打印。这似乎是一个明显的答案,但一些谷歌搜索表明,通过Java打印PDF并非易事。我在java.net上看过PDF Renderer项目,但对于一个非常具体的应用程序看起来相当笨重。

2)尝试在将图像提供给FOP之前调整图像大小。这似乎也很简单,但是我们的各种用户可以为这些身份证设置样式表,但是他们想要并使用“pt”和“in”大小调整它们似乎很常见......我不知道有什么好办法将其映射到像素大小调整。

如果有人对根本原因有任何了解,如何使这些工作和/或其他想法,你将负债。

2 个答案:

答案 0 :(得分:0)

最确切的解释:
图像腐败?这是一个错误。

为什么不使用0.95?你迟早要升级,Apache财团不会 修复0.25.x版本的错误。

您无法希望找到将来可能发生的每个错误的变通方法。

答案 1 :(得分:0)

我最后做了我在原问题中提到的第二件事......即。在给予FOP之前调整它的大小。我发现我可以检索我正在打印的打印机的dpi并对其进行一些数学计算以获得像素大小。似乎在我的所有测试中都能完美运行......不是一个真正的解决方案,而是一个充分的解决方法。