C++ 如何将PDF文档的所有页面向右移动一英寸?
我想将现有pdf文档的所有页面向右移动一英寸,这样就可以在不影响内容的情况下打三个孔。pdf文档将已生成,因此无法更改生成方式 看起来iText可以从一个服务器上执行此操作 < C++或Python的等价库(或方法)是什么?< /P> 如果它依赖于平台,我需要一个可以在Linux上工作的 更新:我想我会发布一个我写的小脚本,以防其他人找到这个页面并需要它 工作代码感谢Scott Anderson的建议: rightshift.pyC++ 如何将PDF文档的所有页面向右移动一英寸?,c++,python,linux,pdf,pypdf,C++,Python,Linux,Pdf,Pypdf,我想将现有pdf文档的所有页面向右移动一英寸,这样就可以在不影响内容的情况下打三个孔。pdf文档将已生成,因此无法更改生成方式 看起来iText可以从一个服务器上执行此操作 < C++或Python的等价库(或方法)是什么?< /P> 如果它依赖于平台,我需要一个可以在Linux上工作的 更新:我想我会发布一个我写的小脚本,以防其他人找到这个页面并需要它 工作代码感谢Scott Anderson的建议: rightshift.py #!/usr/bin/python2 import sys im
#!/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()
#/usr/bin/python2
导入系统
导入操作系统
从pyPdf导入PdfileReader、PdfileWriter
#不确定默认用户空间单位是什么。
#只是猜测,直到我看到的当前文档起作用
uToShift=50;
如果(len(sys.argv)<3):
打印“Usage rightshift[in_file][out_file]”
sys.exit()
如果操作系统路径不存在(sys.argv[1]):
打印“%s”不存在。“%sys.argv[1]
sys.exit()
pdfInput=PdfFileReader(文件(sys.argv[1],“rb”))
pdfOutput=PdfFileWriter()
pages=pdfInput.getNumPages()
对于范围内的i(0,页):
p=pdfInput.getPage(i)
对于输入框(p.mediaBox、p.cropBox、p.bleedBox、p.trimBox、p.artBox):
box.lowerLeft=(box.getLowerLeft_x()-uToShift,box.getLowerLeft_y())
box.upperRight=(box.getUpperRight\u x()-uToShift,box.getUpperRight\u y())
pdfOutput.addPage(第页)
outputStream=文件(sys.argv[2],“wb”)
pdfOutput.write(outputStream)
outputStream.close()
您可以尝试pyPdf:
不是完整答案,但您可以将LaTeX与pdfpages一起使用: 多个命令行linux工具也使用此方法,例如pdfjam使用以下方法:
也许pdfjam已经可以提供您所需要的了。在Linux中执行此任务的两种方法
- 在/root或/home中查找隐藏文件.gsview.ini
- 转到第节:
- close.gsview.ini
- 使用gsview打开您的pdf文件
- 文件/convert/pdfwrite
- 选择第一个奇数页并打印到新文件(您可以将其命名为odd.pdf)
- 使用gsview打开您的pdf文件
- 文件/convert/pdfwrite
- 选择前偶数页并打印到新文件(您可以将其命名为偶数.pdf)
java-jar./pdf-transformer-0.4.0.jar merge-j
2::使用podofobox+pdftk
- 第一步:使用pdftk,将整个pdf文档分成两个pdf文件,只有奇数页和偶数页
pdftk file.pdf cat 1-endodd output odd.pdf和&pdftk file.pdf cat 1-endeven output偶数.pdf
- 现在有了podofobox,包括在podofo utils中
用于奇数页和podofobox file.pdf odd.pdf裁剪-3600宽高
偶数页podofobox file.pdf偶数.pdf裁剪3600宽高
/podofobox file.pdf odd.pdf crop-3600 48200 68000
/podofobox file.pdf偶数.pdf裁剪3600 48200 68000
然后,您可以将奇数和偶数混合在一个唯一的文件中,其中包含已引用的
Pdf转换器
- 这里是python3.x的一个修改版本
首先通过
pip安装pypdf2安装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)
导入系统
导入操作系统
从PyPDF2导入PdfileReader、PdfileWriter
uToShift=40;#移动内容的数量+右移
如果(len(sys.argv)<3):
打印(“用法右移[输入文件][输出文件]”)
sys.exit()
如果操作系统路径不存在(sys.argv[1]):
打印(“%s”不存在。“%sys.argv[1])
sys.exit()
path=os.path.dirname(os.path.realpath(_文件__))
以open(“%s\\%s”%(路径,sys.argv[1]),“rb”)作为pdfin:
以open(“%s\\%s”%(路径,sys.argv[2]),“wb”)作为pdfout:
pdfInput=PdfFileReader(pdfin)
pdfOutput=PdfFileWriter()
pages=pdfInput.getNumPages()
对于范围内的i(0,页):
p=pdfInput.getPage(i)
对于输入框(p.mediaBox、p.cropBox、p.bleedBox、p.trimBox、p.artBox):
box.lowerLeft=(box.getLowerLeft_x()-uToShift,box.getLowerLeft_y())
box.upperRight=(box.getUpperRight\u x()-uToShift,box.getUpperRight\u y())
pdfOutput.addPage(第页)
pdfOutput.write(pdfout)
使用
pdfjam
,将所有页面向右平移1英寸的命令为
pdfjam --offset '1in 0in' doc.pdf
转换后的文档将保存到doc pdfjam.pdf
。有关更多选项,请键入pdfjam--help
。当前,pdfjam
需要类似Unix的命令提示符(Linux、Mac或Cygwin)。在Ubuntu中,它可以与
sudo apt install pdfjam
您的显示器有多重?您将打印机上的纸张导轨向左移动了一英寸。看起来有很多相关性和很大的学习曲线。对pdfjam的外部调用看起来是一个不错的选择。谢谢你的快速回答。如果你不知道它是;)然而,LaTeX是工具箱imho中的一个好工具。它非常适合从文本源快速创建PDF。那家属呢