【问题标题】:Removing pages in a pdf file conditioning on something using Python使用 Python 删除 pdf 文件中的页面
【发布时间】:2022-01-21 05:14:53
【问题描述】:

我有一个大约 1000 页的 PDF 文件,我想删除一些以找不到特定单词为条件的页面。例如,代码会搜索特定单词,例如“STACKOVER”,如果在页面上找不到该单词,则删除页面并继续到下一页,最后保存文件。

【问题讨论】:

  • 欢迎来到 SO。到目前为止,您尝试过什么?
  • 下次发布问题时,您需要提供更多信息并显示尝试。这将为您节省很多悲伤。编码愉快!
  • 感谢您的评论,我下次发帖时会更加小心。

标签: python pdf


【解决方案1】:

这样做的方法是:首先,定义您要查找的搜索词(在我的例子中,我在医学期刊上对其进行了测试并搜索了searchwords=['unclear risk for poorly'])。其次,查找包含单词或字符串的所有页面并将页码存储在列表中(pages_to_delete)。为了安全起见,我把它们放在一个 csv 文件中,给出在其中找到特定搜索词的页面。三、打开原pdf,删除列表中包含的页面,另存为新pdf。

import PyPDF2
import re
from PyPDF2 import PdfFileWriter, PdfFileReader

pdfFileObj=open(r'C:\Users\s-degossondevarennes\......\dddtest.pdf',mode='rb')
pdfReader=PyPDF2.PdfFileReader(pdfFileObj)
number_of_pages=pdfReader.numPages

pages_text=[]
words_start_pos={}
words={}

searchwords=['unclear risk for poorly']

pages_to_delete = []

with open('Pages.csv', 'w') as f:
    f.write('{0},{1}\n'.format("Sheet Number", "Search Word"))
    for word in searchwords:
        for page in range(number_of_pages):
            print(page)
            pages_text.append(pdfReader.getPage(page).extractText())
            words_start_pos[page]=[dwg.start() for dwg in re.finditer(word, pages_text[page].lower())]
            words[page]=[pages_text[page][value:value+len(word)] for value in words_start_pos[page]]
        for page in words:
            for i in range(0,len(words[page])):
                if str(words[page][i]) != 'nan':
                    f.write('{0},{1}\n'.format(page+1, words[page][i]))
                    pages_to_delete.append(page)
                    

infile = PdfFileReader(r'C:\Users\s-degossondevarennes\.......\dddtest.pdf', 'rb')
output = PdfFileWriter()

for i in range(infile.getNumPages()):
    if i not in pages_to_delete:
        p = infile.getPage(i)
        output.addPage(p)

with open('Newdddtest.pdf', 'wb') as f:
    output.write(f)

更新

如果要忽略文字是否加粗替换

words_start_pos[page]=[dwg.start() for dwg in re.finditer(word, pages_text[page].lower())]

words_start_pos[page]=[dwg.start() for dwg in re.finditer(word, pages_text[page])]

【讨论】:

  • 感谢您的帮助。但是,该代码仅适用于“风险不明”的搜索词。我在网上查找了您的 pdf 文件,标题为“评估偏倚风险作为医学测试研究的质量领域”。例如,当我想通过将代码更改为 searchwords=['Abstract'] 来删除此文件的第一页时,该代码不起作用。也许,我错过了什么?
  • 更新了答案!编码愉快!
  • 感谢您的更新。该代码可能对颜色敏感。它不会删除包含除黑色以外的彩色单词的页面。
  • 我用红色的 Abstract 进行了测试。工作得很好。看看你自己的文件会很有趣。
猜你喜欢
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
  • 2011-11-10
  • 2021-11-10
  • 2013-07-16
  • 2020-01-18
相关资源
最近更新 更多