Chrome:如何按原始大小(100%,无缩放/缩小)打印PDF

10

今天我在Chrome的打印行为中遇到了一个奇怪的错误。当我尝试使用Chrome (在Firefox中也是如此)打印动态创建的PDF时,PDF中的每个图像都会变小一点 (8mm)。而这种情况在Adobe Reader / Acrobat / MacOSX 默认打印机对话框中并不会发生。

让我更详细地解释一下我的代码:

动态PDF:

我使用prawn来动态创建一个横向的A4 PDF,使用以下代码:

require 'prawn'
require "prawn/measurement_extensions"

class CustomPdf < Prawn::Document

  def initialize(label) # A4
    super({
       :page_size =>  "A4", 
       :page_layout => :landscape, 
       :margin => 0, 
       :print_scaling => :none})

    image "my_image.png", :width => 213.mm, :at => [3.mm, 3.mm]
  end
end

PDF中嵌套的图像:

PDF中嵌套的图像尺寸为213mm x 70mm,具有300 DPI。以像素表示:2515x827。

我使用RMagick创建图像,但到目前为止,大小、dpi和其他所有内容似乎都没问题。因此目前不需要进一步的解释。

期望结果:

打印出的PDF将显示一个宽度为213厘米的图像。

实际结果:

打印出的PDF将显示一个宽度为205毫米的图像。

我到目前为止尝试过的:

  • prawn page_size设置为小于A4(因为图像大小也不大于A4...)。
  • 尝试更改print_scaling(有3种模式::none:AppDefault:something_except_the_other_ones (在此阅读更多信息)
  • 给图像固定高度(70mm)
  • Chrome Printer Dialog提供的各种设置玩耍
  • 在Windows Chrome下测试(那里是213mm,很奇怪),也许与MacOSX Chrome有关?
  • 不幸的是,在IE11下测试(205mm)。

这些都没有任何效果。我查看了Chromium的Bug报告人,并发现两个人可能与我的问题相同:

最后一个日期是2013年,但没有人说过任何实���适用于我的情况的东西。


示例

以下是宽度为2515像素的300 DPI图像示例: Example Image 如果Imgur将分辨率更改为72,则可以从存储库中获取示例图像(链接:https://github.com/posixpascal/chrome-printing-bug/blob/master/example.png

以下是示例PDF文件

直接链接Direct Link

GitHub PDF Viewerhttps://github.com/posixpascal/chrome-printing-bug/blob/master/output.pdf


Github存储库,其中包含示例图像和pdf生成器脚本 https://github.com/posixpascal/chrome-printing-bug

不幸的是,我无法更改图像的宽度(甚至没有一个像素)。有人遇到过类似的问题吗?

任何想


来吧,为什么这个问题没有得到任何关注呢?我是不是漏掉了一些重要的数据?你们中的至少有一个能否复现一下,这样我就能确定不是我的打印机或操作系统导致了这个错误? - posixpascal
你尝试使用另一个库来生成PDF了吗?如果是这样,它仍然会缩小吗?通过这种方式,你可以在一定程度上确定问题的源头。 - Pedro Lobito
我会尝试,谢谢。今天稍后会更新一些内容。 - posixpascal
我还打算对虾进行一些测试。以后我会告诉你结果的。 - Pedro Lobito
你说:“PDF中嵌套的图像大小为213mm x 70mm,分辨率为300 DPI。以像素为单位:2515x827”,但是在https://github.com/posixpascal/chrome-printing-bug/blob/master/example.png上的图像是2515x48。你真正使用的是哪一个? - Pedro Lobito
显示剩余6条评论
3个回答

1
我在Windows上使用Chrome时遇到了类似的8毫米缩小问题。检查了我的所有打印机属性和设置,但找不到原因。结果发现,在Chrome打印(ctrl+p)屏幕中选中了“适应页面”选项。取消选中并重新打印一页,比较宽度后发现相差8毫米。有时候解决问题往往是一些简单的事情...

如果您在Firefox/Chrome中打印PDF文件,则此方法无效。但是,如果我使用系统对话框进行打印,则可以正常工作。 - posixpascal

1

这是我使用Windows系统和Mac(Yosemite)所见的测试结果:

Windows:

在Chrome中打印PDF:完美-213毫米

在IE中打印:完美-213毫米。之前少一些(大约205-210左右)。因此更改了默认的打印设置:

选择打印选项 -> 使用打印对话框 -> 选择打印机 -> 打印首选项 -> 高级 -> 纸张大小 -> 手动更改缩放 -> 测试A4、A5等。 -> A5(由于某种原因给了我213)

然后我转到了Mac。

Mac的发现:

更改纸张大小并进行相同的测试:大小为213毫米。

操作如下:苹果打印

自然地,我尝试直接通过Chrome打印它,而不是通过OSX打开PDF文件->打印结果为205毫米。

在prawn上使用printscaling测试:appdefault->打印结果为213毫米。

在Firefox上进行相同的测试->低于205-210毫米。

所以我真的不知道它是否是Chrome问题,因为它在Firefox上表现得很奇怪。

因此,最终这些是我在我的端口测试代码后的发现。


谢谢,是的,这与macOS上的Firefox/Chrome有关:/。我不知道如何使其工作。 - posixpascal
当你在Chrome/Firefox中打印网页时,它们会提供“100% / 原始大小 / 全尺寸”选项,这是像素完美的。不幸的是,当打印PDF时,他们不显示此选项,这很奇怪。我还尝试使用PDF.js来渲染PDF,但也没有帮助我。 也许我无法在这些浏览器中使其正常工作... - posixpascal
@praszyk 我不确定这是否与MacOS Quartz Filters有关(请参见/System/Library/Filters)。这些过滤器用于在打印或PDF转换期间处理图像转换。 - Santanu Dey
我稍后会检查这些过滤器。 - posixpascal
@Joost 我的解决方法是在PDF中添加一段文本,向用户解释如何打印。不幸的是,我没有找到解决方案。如果有人能解决这个问题,那将会让我的一天变得美好。 - posixpascal

0
根据我的经验,Chrome 打印 HTML 时通常会缩小。这可能与 WebKit 引擎具有“智能缩小”功能有关。我在这里(文本搜索收缩)遇到过这个问题。或者,这可能只是 Chrome 开发人员对此进行了一些微调,因为过去的人们抱怨内容无法适应打印页面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接