如何将PDF文档的所有页面向右移动一英寸?

11 投票
5 回答
3727 浏览
提问于 2025-04-17 05:27

我想把一个现有的PDF文档的所有页面向右移动一英寸,这样就可以打三个孔而不碰到内容。这个PDF文档已经生成了,所以我不能改变它的生成方式。

看起来iText可以做到这一点,之前有个问题提到过。

那么,C++或Python有没有类似的库或者方法可以做到这一点呢?

如果这个方法和平台有关,我需要一个可以在Linux上运行的。

更新:我想分享一个我写的小脚本,以防其他人看到这个页面需要用到。

感谢Scott Anderson的建议,这段代码可以正常工作:

rightshift.py

#!/usr/bin/python2
import sys
import os
from  pyPdf import PdfFileReader, PdfFileWriter

#not sure what default user space units are. 
# just guessed until current document i was looking at worked
uToShift = 50;

if (len(sys.argv) < 3):
  print "Usage rightshift [in_file] [out_file]"
  sys.exit()

if not os.path.exists(sys.argv[1]):
  print "%s does not exist." % sys.argv[1]
  sys.exit()

pdfInput = PdfFileReader(file( sys.argv[1], "rb"))
pdfOutput = PdfFileWriter()

pages=pdfInput.getNumPages()

for i in range(0,pages):
  p = pdfInput.getPage(i)
  for box in (p.mediaBox, p.cropBox, p.bleedBox, p.trimBox, p.artBox):
    box.lowerLeft = (box.getLowerLeft_x() - uToShift, box.getLowerLeft_y())
    box.upperRight = (box.getUpperRight_x() - uToShift, box.getUpperRight_y())
  pdfOutput.addPage( p )

outputStream = file(sys.argv[2], "wb")
pdfOutput.write(outputStream)
outputStream.close()

5 个回答

3

使用 pdfjam 的时候,如果你想把所有页面向右移动1英寸,可以使用以下命令:

pdfjam --offset '1in 0in' doc.pdf 

处理后的文档会保存为 doc-pdfjam.pdf。如果你想了解更多选项,可以输入 pdfjam --help。目前 pdfjam 需要在类Unix的命令行环境下运行,比如Linux、Mac或者Cygwin。在Ubuntu系统中,可以通过以下命令来安装:

sudo apt install pdfjam
3

Linux中完成这个任务有两种方法

  1. 使用ghostscript通过gsview

    • 在你的/root/home目录下找一个隐藏文件.gsview.ini

    • 找到下面这个部分:

    [pdfwrite Options]

    Options=

    Xoffset=0

    Yoffset=0

把X轴的值改成一个合适的数值(这些值是以PostScript点为单位的,1英寸 = 72个PostScript点

比如:

[pdfwrite Options]

Options=

Xoffset=72

Yoffset=0

  • 关闭.gsview.ini

  • gsview打开你的PDF文件

  • 文件 / 转换 / pdfwrite

  • 选择第一页的奇数页并打印到一个新文件(你可以把这个命名为odd.pdf

现在对偶数页重复相同的步骤

  • gsview打开你的PDF文件

[pdfwrite Options]

Options=

Xoffset=-72

Yoffset=0

  • 文件 / 转换 / pdfwrite
  • 选择第一页的偶数页并打印到一个新文件(你可以把这个命名为even.pdf

现在你需要把这两个PDF文件(奇数和偶数页)合并在一起

你可以使用:

Pdf Transformer

java -jar ./pdf-transformer-0.4.0.jar <输入文件名1> <输入文件名2> <输出文件名> merge -j


第二种方法:使用podofoboxpdftk

  • 第一步:用pdftk把整个PDF文档分成两个PDF文件,分别只包含奇数页和偶数

    pdftk file.pdf cat 1-endodd output odd.pdf && pdftk file.pdf cat 1-endeven output even.pdf

  • 接下来使用podofobox,它包含在podofo utils

  • http://podofo.sourceforge.net/about.html

  • podofobox file.pdf odd.pdf crop -3600 0 宽度 高度 用于奇数页,然后

  • podofobox file.pdf even.pdf crop 3600 0 宽度 高度 用于偶数页

宽度和高度是以PostScript点乘以100为单位,可以通过pdfinfo找到

例如:如果你的PDF文件的页面大小是482x680,那么你输入

./podofobox file.pdf odd.pdf crop -3600 0 48200 68000

./podofobox file.pdf even.pdf crop 3600 0 48200 68000

然后你可以用之前提到的Pdf Transformer把奇数和偶数页合并成一个文件

4

你可以试试这个叫做 pypdf 的库。2022年,PyPDF2这个库被合并回pypdf里了。

撰写回答