将所有 PDF 页面调整为字母大小 - 如何调整或删除 CropBox?

Posted

技术标签:

【中文标题】将所有 PDF 页面调整为字母大小 - 如何调整或删除 CropBox?【英文标题】:Resize all PDF pages to letter size - how to resize or remove CropBox? 【发布时间】:2020-06-05 16:52:43 【问题描述】:

我使用的服务要求所有 PDF 页面的大小完全相同。现在,我的 PDF 的第二页是 US letter 大小,但第一页比这小一些 - 我希望第一页也是 letter 大小。

Here's a sample PDF 我开始的内容。以下是pdfinfo 对这个文件的开头所说的:

Creator:        pdftk 2.02 - www.pdftk.com
Producer:       itext-paulo-155 (itextpdf.sf.net-lowagie.com)
CreationDate:   Fri Jun  5 11:37:13 2020 CDT
ModDate:        Fri Jun  5 11:37:13 2020 CDT
Tagged:         no
UserProperties: no
Suspects:       no
Form:           AcroForm
javascript:     no
Pages:          2
Encrypted:      no
Page    1 size: 576 x 755.999 pts
Page    1 rot:  0
Page    2 size: 612 x 792 pts (letter)
Page    2 rot:  0
Page    1 MediaBox:     0.00     0.00   576.00   756.00
Page    1 CropBox:      0.00     0.00   576.00   756.00
Page    1 BleedBox:     0.00     0.00   576.00   756.00
Page    1 TrimBox:      0.00     0.00   576.00   756.00
Page    1 ArtBox:      44.83   151.48   534.17   576.50
Page    2 MediaBox:     0.00     0.00   612.00   792.00
Page    2 CropBox:      0.00     0.00   612.00   792.00
Page    2 BleedBox:     0.00     0.00   612.00   792.00
Page    2 TrimBox:      0.00     0.00   612.00   792.00
Page    2 ArtBox:       0.00     0.00   612.00   792.00
File size:      484669 bytes
Optimized:      no
PDF version:    1.

我的第一次尝试是这样的:

gs -dBATCH -dNOPAUSE -q \
  -sPAPERSIZE=letter -dFIXEDMEDIA -dPDFFitPage \
  -sDEVICE=pdfwrite -sOutputFile=/tmp/output.pdf \
  /tmp/input.pdf

pdfinfo 对此的输出是这样说的:

Creator:        pdftk 2.02 - www.pdftk.com
Producer:       GPL Ghostscript 9.26
CreationDate:   Fri Jun  5 11:46:15 2020 CDT
ModDate:        Fri Jun  5 11:46:15 2020 CDT
Tagged:         no
UserProperties: no
Suspects:       no
Form:           none
JavaScript:     no
Pages:          2
Encrypted:      no
Page    1 size: 603.429 x 792 pts
Page    1 rot:  0
Page    2 size: 612 x 792 pts (letter)
Page    2 rot:  0
Page    1 MediaBox:     0.00     0.00   612.00   792.00
Page    1 CropBox:      4.29     0.00   607.71   792.00
Page    1 BleedBox:     4.29     0.00   607.71   792.00
Page    1 TrimBox:      4.29     0.00   607.71   792.00
Page    1 ArtBox:      51.25   158.69   563.89   603.95
Page    2 MediaBox:     0.00     0.00   612.00   792.00
Page    2 CropBox:      0.00     0.00   612.00   792.00
Page    2 BleedBox:     0.00     0.00   612.00   792.00
Page    2 TrimBox:      0.00     0.00   612.00   792.00
Page    2 ArtBox:       0.00     0.00   612.00   792.00
File size:      143412 bytes
Optimized:      no
PDF version:    1.7

此时我使用的服务仍然拒绝我的 PDF 页面大小不匹配,我猜是因为 PDF 的第 1 页设置了 CropBox。

此时我尝试使用以下命令将 CropBox 设置为与 MediaBox 相同的尺寸:

gs -dBATCH -dNOPAUSE -q \
  -sPAPERSIZE=letter -dFIXEDMEDIA -dPDFFitPage \
  -sDEVICE=pdfwrite -sOutputFile=/tmp/output.pdf \
  -c "[/CropBox [0 0 612 792] /PAGES pdfmark" \
  -f /tmp/input.pdf

但它似乎没有任何效果 - pdfinfo 仍然相同,除了文件大小在 143435 bytes 稍大。

如何调整或删除我的 PDF 的 CropBox 以使所有内容都以 MediaBox 页面大小呈现?

这是我的 Ghostscript 版本:

GPL Ghostscript 9.26 (2018-11-20)

【问题讨论】:

【参考方案1】:

好吧,我发现 this answer 包含一种使用 sed (!) 删除 CropBoxes 的方法,这似乎对我有用:

sed -i.bak -e "/CropBox/,/]/s#.# #g" /tmp/output.pdf

pdfinfo:

Creator:        pdftk 2.02 - www.pdftk.com
Producer:       GPL Ghostscript 9.26
CreationDate:   Fri Jun  5 12:03:07 2020 CDT
ModDate:        Fri Jun  5 12:03:07 2020 CDT
Tagged:         no
UserProperties: no
Suspects:       no
Form:           none
JavaScript:     no
Pages:          2
Encrypted:      no
Page    1 size: 612 x 792 pts (letter)
Page    1 rot:  0
Page    2 size: 612 x 792 pts (letter)
Page    2 rot:  0
Page    1 MediaBox:     0.00     0.00   612.00   792.00
Page    1 CropBox:      0.00     0.00   612.00   792.00
Page    1 BleedBox:     0.00     0.00   612.00   792.00
Page    1 TrimBox:      4.29     0.00   607.71   792.00
Page    1 ArtBox:      51.25   158.69   563.89   603.95
Page    2 MediaBox:     0.00     0.00   612.00   792.00
Page    2 CropBox:      0.00     0.00   612.00   792.00
Page    2 BleedBox:     0.00     0.00   612.00   792.00
Page    2 TrimBox:      0.00     0.00   612.00   792.00
Page    2 ArtBox:       0.00     0.00   612.00   792.00
File size:      143413 bytes
Optimized:      no
PDF version:    1.7

希望有更好的方法在 Ghostscript 中执行此操作,而不是通过直接文本编辑来破坏文件,但现在它正在工作,我正在使用的服务正在接受该文件。

【讨论】:

以上是关于将所有 PDF 页面调整为字母大小 - 如何调整或删除 CropBox?的主要内容,如果未能解决你的问题,请参考以下文章

PDF文件如何调整页面尺寸

PDF文件如何调整页面尺寸,非常实用的方法

python - svg 或 pdf 的破坏性裁剪和调整大小

itextsharp 合并调整大小并取消旋转 pdf

使用 Ghostscript 调整多页混合格式 PDF 的大小?

为 PDF 查看器自动调整 UIViews 的大小