【发布时间】:2020-08-14 22:46:49
【问题描述】:
我有一份标准 pdf 格式的 4-up 拼版文件。我需要将它们反向强加为 1-up pdf。我查看了解决方案here。这可以完美地将pdf分成两半。但我是 python 脚本的新手,不太清楚如何根据我的需要修改它。 我的 PDF 组织为:
[1|3] [1]
[2|4] [2]
----- [3]
[5|6] ⇒ [4]
[7|8] [5]
---- [6]...
如果可能的话,最好让它只处理一系列页码,但这只是锦上添花。 我找到了一个名为 [briss here][1] 的带有 gui 的 java 应用程序来实现我所需要的,但是学习一点 Python 来自动完成这项任务会很棒。
所以我已经能够输出我需要的内容,但我不确定如何设置脚本以接受页码范围
import copy
import math
from PyPDF2 import PdfFileReader, PdfFileWriter
import argparse
def split_pages2(src, dst):
src_f = file(src, 'r+b')
dst_f = file(dst, 'w+b')
input = PdfFileReader(src_f)
output = PdfFileWriter()
for i in range(input.getNumPages()):
# make two copies of the input page
pp = input.getPage(i)
p = copy.copy(pp)
q = copy.copy(pp)
r = copy.copy(pp)
s = copy.copy(pp)
# the new media boxes are the previous crop boxes
p.mediaBox = copy.copy(p.cropBox)
q.mediaBox = copy.copy(p.cropBox)
#x1, x2 = p.mediaBox.lowerLeft
x1, x2 = 72, 71.5
#x3, x4 = p.mediaBox.upperRight
x3, x4 = 540.7, 727
x1, x2 = math.floor(x1), math.floor(x2)
x3, x4 = math.floor(x3), math.floor(x4)
#x5, x6 = x1+math.floor((x3-x1)/2), x2+math.floor((x4-x2)/2)
x5, x6 = 306, 396
# vertical
p.mediaBox.upperRight = (x5, x6)
p.mediaBox.lowerLeft = (x1, x2)
q.mediaBox.upperRight = (x5, x4)
q.mediaBox.lowerLeft = (x1, x6)
r.mediaBox.upperRight = (x3, x6)
r.mediaBox.lowerLeft = (x5, x2)
s.mediaBox.upperRight = (x3, x4)
s.mediaBox.lowerLeft = (x5, x6)
p.artBox = p.mediaBox
p.bleedBox = p.mediaBox
p.cropBox = p.mediaBox
q.artBox = q.mediaBox
q.bleedBox = q.mediaBox
q.cropBox = q.mediaBox
r.artBox = r.mediaBox
r.bleedBox = r.mediaBox
r.cropBox = r.mediaBox
s.artBox = s.mediaBox
s.bleedBox = s.mediaBox
s.cropBox = s.mediaBox
output.addPage(q)
output.addPage(p)
output.addPage(s)
output.addPage(r)
output.write(dst_f)
src_f.close()
dst_f.close()
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description=("Split up pdf from 4-up "
"to single page"))
parser.add_argument("src", help="Source file")
parser.add_argument("dst", help="Destination file")
args = parser.parse_args()
split_pages2(args.src, args.dst)
【问题讨论】:
-
也许使用
print()来查看变量中的值。也许它会帮助你替换函数中的变量,以不同的顺序获取数据。 -
如果您为测试添加代码和示例数据会更容易。
标签: python