【问题标题】:Image Quality using Itext使用 Itext 的图像质量
【发布时间】:2012-01-04 13:54:06
【问题描述】:

可以使用 Itext 生成 PDF 文档,其中包含分辨率为 150 dpi 的图像。

(似乎是 Itext 正在将图像质量降低到 72 dpi。)

谢谢

【问题讨论】:

    标签: pdf itext image-quality


    【解决方案1】:

    请参阅 thread,特别是 this post,它解释了 PDF 没有 DPI 的概念。 This thread 也不错。

    基本上(这在技术上并不准确,但足够接近)默认情况下,当您使用 iText 放置图像时,假设每 72 个像素将使用 1 英寸的打印空间。如果要更改此规则,则需要更改图像的matrix。您可以直接执行此操作(这很难)或使用缩放方法(更容易),例如scaleAbsolute()scaleAbsoluteWidth()scaleAbsoluteHeight()scalePercentage()scaleToFit().

    更改矩阵不会以任何方式更改图像,它只会(本质上)更改将多少像素塞入一英寸的定义,在打印时你会打电话给DPI。 (您实际上是在更改图像像素和文档用户单位之间的关系,但您并不需要知道这一点。) 因此,默认情况下,iText 放置的 200x200 像素图像应在大约 2 3/4"。如果您调用 scaleAbsolute(100,100),它会将这 200 个像素填充到 100 个“用户单位”中,从而为您提供 144 的有效 DPI 并以大约 1 3/8" 的速度打印。

    所有这些都会让您头疼,尤其是如果您习惯使用 Adob​​e Photoshop 等允许您为某些图像类型设置“分辨率”的成像程序。不幸的是,这更像是一个“打印提示”,并没有真正改变文件。 72DPI 的 100x100 像素图像与 300DPI 的 100x100 像素完全相同,打印时除外。 iText 完全忽略了这个打印提示,要么是因为仅此而已,要么是因为并非所有图像格式都支持它。 (不直接相关,但一个常见的神话是“保存为 Web”使图像成为 72DPI,而实际上它完全从文件中去除了分辨率信息。)

    忽略实际发生的情况,要使图像达到您认为的 150 DPI,将源图像的宽度和高度(以像素为单位)乘以 0.48(72 除以 150)并将这些新数字传递给scaleAbsolute().

    Image 类上有一个名为 setDPI 的方法,但据我所知,它实际上对图像的位置没有任何影响,更多的是提供信息。

    【讨论】:

    • 非常感谢您的评论。现在我在我的 PDF 中获得了质量上乘的图像。我想知道为什么我在谷歌上搜索时没有找到您提到的主题。
    • 谢谢@Chris,我怎样才能获得高质量的pdf? Luixv 你能告诉我如何在我的 pdf 中获得精美的图片吗?
    • 只需制作高质量的图像并添加它。 iText 不会改变您的图像。如果这没有帮助,请发布一个新问题,解释您的问题、您尝试过的方法、无效的方法等。
    • 很好的答案!!。
    【解决方案2】:

    如果 PDF 的图像质量较差。您可以执行以下操作:

    1. 创建更大尺寸的高分辨率图像。
    2. 在导出为 PDF 文件时缩小图像。

    这解决了我的问题。

    【讨论】:

    • 这个方案可能可行,但是太模棱两可了——能否提供一个小代码片段? (一个“缩放”功能可能会保持原始图像的分辨率,而另一个会重新采样并更改分辨率)。
    猜你喜欢
    • 2021-02-16
    • 1970-01-01
    • 2018-08-28
    • 2018-11-12
    • 2011-07-31
    • 2011-03-08
    • 2018-06-30
    • 2016-05-25
    • 2021-10-31
    相关资源
    最近更新 更多