如何将PDF文档的所有页面右移一英寸
How do you shift all pages of a PDF document right by one inch?
我想把现有pdf文档的所有页面右移一英寸,这样它们就可以在不触及内容的情况下打三孔。pdf文档将已经生成,所以改变它们的生成方式是不可能的。
从上一个问题看来,ittext可以做到这一点。
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()
您可以试试pypdf库。2022年PyPDF2合并回pypdf。
在Linux
中有两种执行此任务的方法using ghostscript through gsview
在/root或/home中查找隐藏文件.gsview.ini
go to section:
[pdfwrite选项]
选项=
Xoffset = 0
Yoffset = 0
改变X轴的值,设置一个方便的值(值以附注点表示,1英寸 = 72附注点)
:
[pdfwrite选项]
选项=
Xoffset = 72
Yoffset = 0
关闭.gsview.ini
打开pdf文件gsview
文件/转换/pdfwrite
- 选择第一个奇数页并打印到一个新文件(你可以命名为奇数.pdf)
现在对偶数页重复相同的步骤
- 使用gsview打开pdf文件
[pdfwrite选项]
选项=
Xoffset = -72
Yoffset = 0
- file/convert/pdfwrite
- 选择第一个even页并打印到一个新文件(你可以命名为even.pdf)
现在你需要混合这两个PDF与奇数和偶数页
可以使用:
Pdf变压器
- http://sourceforge.net/projects/pdf-transformer/
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,包含在 podofoutils
http://podofo.sourceforge.net/about.html podofobox file.pdf odd.pdf crop -3600 0 widht height
奇数页和podofobox file.pdf even.pdf crop 3600 0 widht height
for 偶数页
宽度和高度以附注点x 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变压器
- http://sourceforge.net/projects/pdf-transformer/
对于pdfjam
,将所有页面向右平移1英寸的命令为
pdfjam --offset '1in 0in' doc.pdf
转换后的文档保存到doc-pdfjam.pdf
。对于其他选项,输入pdfjam --help
。目前pdfjam
需要一个类似unix的命令提示符(Linux、Mac或Cygwin)。在Ubuntu中,它可以通过
sudo apt install pdfjam
不是一个完整的答案,但是你可以用LaTeX来处理pdfpages: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
安装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)
- 右移布尔值在C++
- 何时右移操作>>移位符号位,何时不?
- 这个右移是如何工作的:字符串流>>无符号的int>>无符号的int?
- C++中的负数右移运算符
- C++ 尝试将数字右移 32 会得到两种不同的结果
- 对已签名数据进行逻辑右移
- 右移速度与左移相同的速度测试位
- 右移无法正常工作
- 为什么将 int a=1 移到左 31 位然后向右移 31 位,它变成 -1
- 当 b 大于 a 中的位数时右移(a >> b)的未定义行为?
- 为什么无符号的 int 右移总是用"1"填充
- 重载左移和右移运算符(cin和cout)
- 在c++中,取一个整数数组(arr[])、其长度(N)和元素数右移(M):
- 右移g++时出现意外结果
- 如果计数大于类型的宽度,则为右移未定义的行为
- 使用左移或右移计算对数基数 n
- static_assert签名的右移具有两个补码行为是否合法?
- 在C/C++中,左移或右移零点实际上会生成一条指令
- C++中的右移产生异常结果(无符号64位)
- 如何将PDF文档的所有页面右移一英寸