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

我想把现有的pdf文档的所有页面都移动一英寸,这样他们就可以在不碰内容的情况下进行三次打孔。 PDF文件已经生成,所以改变生成方式是不可能的。

看来iText可以从以前的问题做到这一点。

什么是C ++或Python的等效库(或者这样做)?

如果它依赖于平台,我需要一个可以在Linux上运行的程序。

更新:图我会张贴一个小脚本,我写了这样做,以防万一谁发现这个网页,需要它。

工作代码感谢Scott Anderson的build议:

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() 

你可以尝试pyPdf:

http://pybrary.net/pyPdf/

我可以确认,pyPdf是非常好的,应该是解决您的问题。

Linux中执行这个任务的两种方法

  1. 使用ghostscriptgsview

    • 请在/ root/ home中查找隐藏文件.gsview.ini

    • 去部分:

    [pdfwrite选项]

    选项=

    X偏移= 0

    Y偏移= 0

改变X轴的值,建立一个方便的值(值在后记点, 1英寸 = 72后记点

所以:

[pdfwrite选项]

选项=

X偏移= 72

Y偏移= 0

  • 关闭.gsview.ini

  • gsview打开你的pdf文件

  • 文件/转换/ pdfwrite

  • 选择第一个奇数页并打印到一个新文件(您可以将其命名为odd.pdf

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

  • gsview打开你的pdf文件

[pdfwrite选项]

选项=

X偏移= -72

Y偏移= 0

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

现在您需要将这两个pdf与奇数页和偶数页混合

您可以使用:

PDF转换器

java -jar ./pdf-transformer-0.4.0.jar <INPUT_FILE_NAME1> <INPUT_FILE_NAME2> <OUTPUT_FILE_NAME> merge -j


2:使用podofobox + pdftk

  • 第一步:用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 widht height 奇数页面的 podofobox file.pdf odd.pdf crop -3600 0 widht height

  • podofobox file.pdf even.pdf crop 3600 0 widht height 偶数页的 podofobox file.pdf even.pdf crop 3600 0 widht height

宽度和高度在后记点×100,可以找到与pdfinfo

例如,如果您的PDF文件的页面大小为482×680 ,则输入

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

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

那么你可以混合奇怪的,甚至在一个独特的文件已经引用

PDF转换器

没有一个完整的答案,但你可以用pdfpages使用LaTeX: http ://www.ctan.org/tex-archive/macros/latex/contrib/pdfpages/

多个命令行Linux工具也使用这种方法,例如pdfjam使用这个: http ://www2.warwick.ac.uk/fac/sci/statistics/staff/academic-research/firth/software/pdfjam

也许pdfjam已经可以提供你所需要的。

这里是python3.x的修改版本。

首先通过pip install pypdf2pip install pypdf2

 import sys import os from PyPDF2 import PdfFileReader, PdfFileWriter uToShift = 40; # amount to shift contents by. +ve shifts right 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() path=os.path.dirname(os.path.realpath(__file__)) with open(("%s\\%s" % (path, sys.argv[1])), "rb") as pdfin: with open(("%s\\%s" % (path, sys.argv[2])), "wb") as pdfout: pdfInput = PdfFileReader(pdfin) 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 ) pdfOutput.write(pdfout)