【问题标题】:Why is image corrupted in PDF reader, but fine in browser?为什么PDF阅读器中的图像已损坏,但在浏览器中却很好?
【发布时间】:2014-04-24 14:42:10
【问题描述】:

我无法理解,因此也解决了以下问题。我正在使用 Zend 框架 (Zend_Pdf) 使用绘图、字体和图像创建动态 PDF。问题在于图像。我正在嵌入 JPG,没有压缩,但它在 Adob​​e PDF Reader 中总是损坏。我尝试使用不同的图像 DPI,在嵌入之前缩放并存储图像,或者我保留原始大小并仅在嵌入 PDF 时对其进行缩放,但结果是相同的。我真的不明白出了什么问题或我还能尝试什么,所以我将不胜感激。

插入PDF的图片(original is here):

当我在任何浏览器(Chrome、FF、IE)中打开 pdf 时,它看起来不错,但在 Adob​​e PDF 阅读器中我得到了这个:

我标记了损坏的地方。 test.pdf can be seen here。谁能帮我理解这个问题?

编辑

经过进一步调试,这似乎与图像大小和Zend_Pdf::drawImage()方法有关。

根据我提供的坐标,PDF 中图像的预期大小应该是 168x120px,但是 PDF 中的实际大小要大得多。相差35%左右。

我相信这就是图像损坏的原因,但我仍然不明白应该使用什么坐标来显示所需的像素大小......基本上我正在使用这种模式:

$page->drawImage($image, $x, ($y - 120), ($x + 168), $y);

是不是坐标计算方法不对?

编辑 2:

我还添加了使用实际尺寸 (168x120px) 将已缩放图像嵌入到 PDF 中的示例,以显示 PDF 中的图像尺寸不同,或者至少似乎没有预期的尺寸,尽管我' m 使用上面的代码。缩放后的图像为here,最终的pdf为here。此缩放后的图像在调整大小之前已经具有白色边框,因此结果看起来更好。

编辑 3:

为了更详细地说明 PDF 中图像的所需像素大小。由于打印,我需要遵循一个布局。布局规范以 mm 为单位,我有图像必须定位的确切区域和最大宽度/高度。 IE。最大宽度为 100 毫米,我在 72ppi 文档中计算为 280 像素,与高度类似(42 毫米 = 119 像素)。还要求嵌入的图像必须为 300 DPI。而且我认为可能存在问题,但我仍然不明白我应该如何重新计算 PDF 的宽度/高度?还建议嵌入大图像并将其绘制得更小,还是使用缩放图像并以实际大小绘制? 我在屏幕上使用 72DPI 的图像看到了更好的结果,所以我是否可能需要创建 2 个 PDF 文件,一个仅用于打印,一个仅用于屏幕或浏览器?

编辑 4(打印):

我测试了 300 和 600 DPI 的打印效果。在 PDF (this one) 中绘制时使用全尺寸图像的 PDF 在这两种情况下都可以。 scaled.pdf 在 300 DPI 打印中非常糟糕(甚至在边缘可以看到一些红色)。它在 600 DPI 打印中相当不错,但由于拉伸而非常模糊。并且拉伸是由于绘制时图像的点大小错误造成的,正如我前面提到的。

【问题讨论】:

  • 我认为这些只是Adobe工具平滑算法的产物。
  • 我在 Apple 的 Preview 中看到了同样的情况(诚然,这不是最强大的 PDF 查看器)。公平地说:在提取 JPEG 并以合理的大小查看它之后——任何小于 100% 的东西——预览也会显示伪影。如果您在其周围包含 1 或 2 个白色像素边框,可能会对渲染器有所帮助。
  • 是的,感谢您的提示。我忘了说,在图像周围添加 5px 白色边框修复了 S 和 A 顶部的问题,但是 Y 的顶部和底部仍然不好。我也可以在缩放时重现 IE 和 Firefox 中的问题,所以我认为嵌入图像的大小确实存在问题,它不成比例(不尊重纵横比)
  • 不,嵌入的图像完全相同大小相同;我直接从您的 PDF 中提取了用于测试的 JPEG。请记住,PDF 不能以“100% 在屏幕上”显示光栅图像;它总是会对其进行重新采样,以将 PDF 中的“所需尺寸”重新调整为“为 your 屏幕缩放”(其中“your”是一个高度相关的概念;我的“屏幕 100%”与您的不同)。
  • 您还可以检查您的 Adob​​e Acrobat/Reader 的首选项。有一个设置可以设置屏幕分辨率。现在很可能是 108 ppi 左右。对于一个实验,将其更改为 72 ppi,然后查看结果。这也可以解释为什么通过将图像缩放 0.66 可以获得更好的结果。一个很好的折衷方案是缩放图像(在图像处理器中),以便在 100% 视图下获得大约 108 ppi 的分辨率。

标签: pdf adobe-reader zend-pdf


【解决方案1】:

如果“say”这个词是由字符组成的,这取决于阅读器(brower reader、acrobat、foxit 等)如何渲染字体。

尝试将字体合并到 pdf 中,看看是否有帮助。

【讨论】:

  • OP 说这是一张图片,甚至还提供了一个链接。该问题似乎与实际显示 text 的图像无关。
  • 你是对的,所以我同意@Bobrowsky,可能这些只是工件,可能与 Zend 的调整大小算法有关。
  • 是的,正如@Jongware 所说。我正在展示仅使用字母的图像示例,但更多的是为了简单起见。这些图像甚至可以包含一些非文本图形,由于应用程序的性质,我自己也无法真正绘制出来。
猜你喜欢
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多