我想用pyPDF編寫幾個python腳本將PDF頁分割成六個單獨的頁面,並對它們進行正確排序(通常是正面和背面都打印,所以每隔一個頁面需要使用它子頁面排序不同),並在輸出文檔的末尾刪除生成的空白頁面。使用pyPDF刪除空白頁的Python腳本
我寫了下面的腳本來剪下PDF頁面並重新排列它們。將每頁分成兩列,每列分成三頁。我對python不是很有經驗,所以請原諒我做得不對的任何事情。
#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
for i in range(0,input.getNumPages(),2):
p = input.getPage(i)
q = copy.copy(p)
r = copy.copy(p)
s = copy.copy(p)
t = copy.copy(p)
u = copy.copy(p)
(x, y) = p.mediaBox.lowerLeft
(w, h) = p.mediaBox.upperRight
p.mediaBox.lowerLeft = (x, 2 * h/3)
p.mediaBox.upperRight = (w/2, h)
q.mediaBox.lowerLeft = (w/2, 2 * h/3)
q.mediaBox.upperRight = (w, h)
r.mediaBox.lowerLeft = (x, h/3)
r.mediaBox.upperRight = (w/2, 2 * h/3)
s.mediaBox.lowerLeft = (w/2, h/3)
s.mediaBox.upperRight = (w, 2 * h/3)
t.mediaBox.lowerLeft = (x, y)
t.mediaBox.upperRight = (w/2, h/3)
u.mediaBox.lowerLeft = (w/2, y)
u.mediaBox.upperRight = (w, h/3)
a = input.getPage(i+1)
b = copy.copy(a)
c = copy.copy(a)
d = copy.copy(a)
e = copy.copy(a)
f = copy.copy(a)
(x, y) = a.mediaBox.lowerLeft
(w, h) = a.mediaBox.upperRight
a.mediaBox.lowerLeft = (x, 2 * h/3)
a.mediaBox.upperRight = (w/2, h)
b.mediaBox.lowerLeft = (w/2, 2 * h/3)
b.mediaBox.upperRight = (w, h)
c.mediaBox.lowerLeft = (x, h/3)
c.mediaBox.upperRight = (w/2, 2 * h/3)
d.mediaBox.lowerLeft = (w/2, h/3)
d.mediaBox.upperRight = (w, 2 * h/3)
e.mediaBox.lowerLeft = (x, y)
e.mediaBox.upperRight = (w/2, h/3)
f.mediaBox.lowerLeft = (w/2, y)
f.mediaBox.upperRight = (w, h/3)
output.addPage(p)
output.addPage(b)
output.addPage(q)
output.addPage(a)
output.addPage(r)
output.addPage(d)
output.addPage(s)
output.addPage(c)
output.addPage(t)
output.addPage(f)
output.addPage(u)
output.addPage(e)
output.write(sys.stdout)
然後我使用下面的腳本刪除空白頁。
#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
for i in range(0,input.getNumPages()):
p = input.getPage(i)
text = p.extractText()
if (len(text) > 10):
output.addPage(p)
output.write(sys.stdout)
問題似乎是,雖然頁面明顯裁剪下來,但文本繪製命令仍然存在。這些頁面都沒有被掃描,所以如果它們是空白的,它們真的是空白的。有沒有人有任何想法,我可以做不同的或可能採取完全不同的方法來刪除空白頁?我真的很感激任何幫助。
更新:如果我在Acrobat中打開第一個腳本的結果,然後使用「另存爲...」,它將從頭開始重建文件。然後,當我運行第二個腳本時,它以我想要的方式工作。我需要一種腳本來處理acrobat在「另存爲...」中執行的過程,以便在不需要Acrobat本身的腳本中使用。 – rpeck1682 2011-06-10 19:46:33
這不是一個真正的答案,所以我會將它作爲評論發佈。整個事情一旦完成就需要放入iOS應用程序中。我使用了一個設置來繪製原始PDF的相應區域,以確定最終的空白頁數。這不是理想的,但它的工作原理。 – rpeck1682 2011-06-16 22:47:23