我想把现有的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:
我可以确认,pyPdf是非常好的,应该是解决您的问题。
在Linux中执行这个任务的两种方法
使用ghostscript槽gsview
请在/ root或/ home中查找隐藏文件.gsview.ini
去部分:
[pdfwrite选项]
选项=
X偏移= 0
Y偏移= 0
改变X轴的值,建立一个方便的值(值在后记点, 1英寸 = 72后记点 )
所以:
[pdfwrite选项]
选项=
X偏移= 72
Y偏移= 0
关闭.gsview.ini
用gsview打开你的pdf文件
文件/转换/ pdfwrite
现在对偶数页重复相同的步骤
[pdfwrite选项]
选项=
X偏移= -72
Y偏移= 0
现在您需要将这两个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
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 pypdf2
来pip 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)