Скрипт Python для удаления пустых страниц с помощью pyPDF
Я пытаюсь написать пару скриптов python, используя pyPDF, чтобы разделить страницы PDF на шесть отдельных страниц, правильно их упорядочить (обычно печатаются спереди и сзади, поэтому каждая другая страница должна иметь свои подстраницы, упорядоченные по-разному), и удалить полученные пустые страницы в конце выходного документа.
Я написал следующий сценарий, чтобы вырезать страницы 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)
проблема заключается в том, что, хотя страницы заметно обрезаны, команды рисования текста все еще существуют. Ни одна из этих страниц не сканируется, поэтому, если они пустые, они действительно пустые. Есть ли у кого-нибудь мысли о том, что я мог бы сделать по-другому или, возможно, совершенно другой подход, чтобы удалить пробел страницы? Я бы очень признателен за любую помощь.
1 ответов
PdfFileReader
есть метод, getPage(self, page number)
, который возвращает объект, PageObject
, что в свою очередь метод getContents
, что вернет None
если страница пустая. Итак, с вашим объектом pdf,getNumPages()
, перебирать с if getPage(i).getContents():
, собирая попадает в список номеров страниц для вывода.