将 PDF 设置为不缩放打印
Posted
技术标签:
【中文标题】将 PDF 设置为不缩放打印【英文标题】:Set PDF to print with no scaling 【发布时间】:2011-06-11 04:12:14 【问题描述】:我正在生成一个 PDF(使用 fpdf),我想知道是否有办法将文档的属性设置为默认不缩放打印。
因此,当您从打印对话框菜单中选择打印时,缩放设置为无。我正在尝试确定这是用户设置还是我在创建 PDF 时可以控制的设置。
提前致谢。
【问题讨论】:
【参考方案1】:我已经在_putcatalog()
方法中添加了以下内容:
$this->_out('/ViewerPreferences [/PrintScaling/None]');
行后:
$this->_out('/Type /Catalog');
实现一个方法既快速又简单...
【讨论】:
这对我有用。我将 FPDF 子类化并覆盖 _putcatalog() 以在其现有输出之后输出“/ViewerPreferences >”。 当我使用 ReportLab 的setViewerPreferences('PrintScaling', 'None')
时,它生成了/ViewerPreferences 12 0 R
行并在页面下方添加了12 0 obj << /PrintScaling /None >>
。另一个可能的值似乎是/PrintScaling /AppDefault
。【参考方案2】:
可以使用 Adobe Acrobat 关闭单个 PDF 文件的打印缩放,方法是转到文件 -> 首选项 -> 高级 -> 页面缩放。 (您可以使用 Acrobat 的试用版进行尝试。)
至于在代码中实现这一点,我已经尝试过但未能成功,但文件中的关键区别似乎是:
10 0 obj
<</Metadata 2 0 R/Outlines 6 0 R/Pages 7 0 R/Type/Catalog/ViewerPreferences<</PrintScaling/None>>>>
endobj
与非缩放 PDF 相比
10 0 obj
<</Metadata 2 0 R/Outlines 6 0 R/Pages 7 0 R/Type/Catalog>>
endobj
对于那些使用默认收缩以适应选项的用户。
【讨论】:
嗨,这有点牵强,但我如何将它与 Exiftool 一起使用 - sno.phy.queensu.ca/~phil/exiftool【参考方案3】:缩放由 PDF 应用程序控制 - 它未在文件中设置。
【讨论】:
感谢您的回答。这是否可以通过编写插件并让用户安装插件来实现? 您可以发布自己的查看器或插件,但这需要大量工作,并且您必须保证用户必须使用它 这个答案具有误导性。有一种方法可以在文件中嵌入首选项以请求不缩放。大多数 PDF 应用程序将遵循首选项,因此不会缩放文档。 您可以在页面上设置默认缩放,但也可以由用户(以及通过 PDF 中的操作)进行调整。像 Acrobat 这样的查看器还允许多个打印选项和视图。【参考方案4】:对我来说,更改 FPDF 目录方法 _putcatalog() 并添加
$this->_out('/ViewerPreferences [/PrintScaling/None]');
没有实现目标,所以我查看了 Acrobate XI PDF 生成的代码,发现了更多的冗词。添加以下代码
$this->_out('/ViewerPreferences<</Duplex/Simplex/Enforce[/PrintScaling]/PrintScaling/None>>');
创建了一个不再默认缩放的 PDF,而是只提供了打印所需的实际大小的选项。
【讨论】:
你把这个放在函数的什么地方了?最后还是按照 onosenday 的回答所建议的,在“/Type /Catalog”输出之后?【参考方案5】:嗯,我不确定你的意思是不是这样的: http://www.fpdf.org/en/doc/setdisplaymode.htm
或者没有“缩放”图像?
$im2 = pdf_open_image_file($dokument, 'jpeg', 'example.jpg');
pdf_place_image($dokument, $im2, 395, 655, 1.0); /* 1.0 = qualiti/scaling - 1.0 is original .../*
pdf_close_image($dokument, $im2);
【讨论】:
这很有用,但我正在寻找不同的东西。我更新了帖子以使其更加清晰。感谢您的建议。【参考方案6】:我遇到了同样的问题。
我有几个 PDF,其中 PDF 的内容(即文本和图像)非常靠近 PDF 边框,但打印对话框 Preview/Acrobat 仍然建议以 100% 缩放比例打印它,从而切断不存在的内容由于打印机的自然边距,因此无法打印。
例如,在 Pages 中创建任何 PDF 都会生成默认以 100% 缩放打印的 PDF。
但是,如果我使用与 FPDF 相关的 TCPDF 创建 PDF,则打印机对话框建议对其进行缩放以适合页面。
我怀疑创建 PDF 的方式不同。我怀疑 Pages 和其他工具会创建单独的图层,然后以不同的方式处理它们,可能是通过标志或其他东西。
我比较了我的两个 PDF 文件的可读部分,确实发现了一些差异,尤其是在文档的开始方式上。我对 PDF-Sources 的了解非常有限,所以我只能猜测需要更改的内容。 是否有说明如何控制可打印对象/区域的 PDF 参考?
这里是最小 PDF 的内容,将在不缩放的情况下打印:
%PDF-1.4
1 0 obj
<< /Type /Catalog
/Outlines 2 0 R
/Pages 3 0 R
>>
endobj
2 0 obj
<< /Type /Outlines
/Count 0
>>
endobj
3 0 obj
<< /Type /Pages
/Kids [4 0 R]
/Count 1
>>
endobj
4 0 obj
<< /Type /Page
/Parent 3 0 R
/MediaBox [0 0 595 842]
/Contents 5 0 R
/Resources << /ProcSet 6 0 R
/Font << /F1 7 0 R >>
>>
>>
endobj
5 0 obj
<< /Length 73 >>
stream
BT
/F1 24 Tf
100 100 Td
(Hello World) Tj
ET
endstream
endobj
6 0 obj
[ /PDF /Text ]
endobj
7 0 obj
<< /Type /Font
/Subtype /Type1
/Name /F1
/BaseFont /Helvetica
/Encoding /MacRomanEncoding
>>
endobj
xref
0 8
0000000000 65535 f
0000000009 00000 n
0000000074 00000 n
0000000120 00000 n
0000000179 00000 n
0000000364 00000 n
0000000466 00000 n
0000000496 00000 n
trailer
<< /Size 8
/Root 1 0 R
>>
startxref
625
%%EOF
【讨论】:
【参考方案7】:好的,我想我明白了。 试试这个:打开你的 TCPDF 创建的 PDF 并删除所有出现的 viewerpreferences 和除 MediaBox 之外的任何框语句......这样做最终导致了一个无打印默认缩放的 PDF :) 像那些附加信息这样的接缝 - 用于专业打印 - 只会混淆常见的 pdf 查看器,而不是帮助任何事情:)
转到 tcpdf.php 并将方法 _putpages 中的第 8529 行更改如下
改变
$boxes = array('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox');
进入
$boxes = array('MediaBox');
在我的 PDF 输出中,这立即消除了缩放问题 :)
【讨论】:
以上是关于将 PDF 设置为不缩放打印的主要内容,如果未能解决你的问题,请参考以下文章