python-3.x 如何使用PyPDF2在PDF中插入空白页

xyhw6mcr  于 2023-04-08  发布在  Python
关注(0)|答案(3)|浏览(303)

问题:我有一个页码数组,需要将空白页插入或合并到原始PDF中。例如)[1,3,5,8,10]。我需要这些页面为空白,然后原始文档的页码会增加。
我用Python脚本在一个PDF文件中搜索特定的文本,它表示一个字母的结尾。每个字母的页数都不同。使用PyPDF 2,我尝试了合并()目录中只有一个空白页pdf,请插入空白页(),addPage(),我遇到的问题是空白页覆盖了原始页。第一页需要空白,但接下来的几页是不正确的。似乎空白页是写在现有的页面上,而不是插入在页码。
如何在数组中列出的页码处插入空白页?下面是代码。输出的页面数组不需要是字符串;如果我可以用Python添加空白页,那么页码数组就不需要是字符串了。

import PyPDF2, re

pdfIn = open('sample_letter.pdf', 'rb')
pdfFile = PyPDF2.PdfFileReader(pdfIn)
NumPages = pdfFile.getNumPages()
string = "Text I am searching for."
separator = ', '
mystring = ""

def end_of_letter():
    pages = []
    for page in range(NumPages):
        pgObj = pdfFile.getPage(page)
        text = pgObj.extractText()
        match = re.search(string, text)
        if match:
            pages.append(str(page + 1))
    mystring = separator.join(pages)
    print(mystring)
    return mystring

end_of_letter()
b4qexyjb

b4qexyjb1#

我能够找到一个解决方案,成功地通过PDF迭代,找到信件结尾的文本,然后插入空白页。代码如下。

"""This program will take an input pdf file and search for a string that signifies the end of a letter.
 After the end of the letter is found based on a string, a blank page is added. The output file is then
 created in the directory with blank pages added """

import PyPDF2, re

pdfIn = open('sample_letter.pdf', 'rb')
pdfFile = PyPDF2.PdfFileReader(pdfIn)
NumPages = pdfFile.getNumPages()
string = "Text I am searching for"
output = PyPDF2.PdfFileWriter()
outputStream = open('added_blank_pages.pdf', 'wb')

def end_of_letter():
    pages = []
    for page in range(NumPages):
        pgObj = pdfFile.getPage(page)
        text = pgObj.extractText()
        match = re.search(string, text)
        output.addPage(pgObj)
        if match:
            pages.append(page + 1)
            output.addBlankPage()
    output.write(outputStream)
    print(pages)

end_of_letter()
ebdffaop

ebdffaop2#

我知道这个问题是专门针对pyPDF2的,但我使用的是不同的PDF库pikepdf,它对我来说更快,我想分享我的代码:

import pikepdf
import sys

if len(sys.argv) == 1:
    exit("No File provided")
with pikepdf.open(sys.argv[1], allow_overwriting_input=True) as pdf:
    print(f"Editing {sys.argv[1]}")
    length = len(pdf.pages)
    pdf.add_blank_page(page_size=(pdf.pages[0]["/MediaBox"][2], 
        pdf.pages[0]["/MediaBox"][3]))
    for i in range(1, 2*length-2, 2):
        print(f"inserting  blank page at {i}")
        pdf.pages.insert(i, pdf.pages[-1])

    pdf.save()

您可以通过以下方式对文件夹中的每个文件执行此操作(PowerShell):

dir ~/Downloads | ? -Property Extension -eq .pdf | % {py .\addEmpty.py "$_"}
k0pti3hp

k0pti3hp3#

只是想分享一个方法,我用另一个Python库解决了我今天的问题。我在Windows 11上安装了Python 3.10.10。

# Import library
# More, visit https://pypi.org/project/PyMuPDF/
import fitz

# Load input file
doc = fitz.open("file_to_be_edited.pdf")

# You can see the width and height of a pdf file like so
# print('Width: ',doc[0].rect.width,'Height: ',doc[0].rect.height)

# Insert a blank page before page 2, after page 1
# First page starts as 0, not 1
# Width and height are points/pt
# More see https://pymupdf.readthedocs.io/en/latest/document.html#Document.new_page
doc.new_page(pno=1, width=612, height=792)

doc.save("output_file_with_blank_page_inserted.pdf")

相关问题