gpt4 book ai didi

python - 如何使用Python PyPDF2库从PDF文件中删除水印

转载 作者:行者123 更新时间:2023-12-02 18:52:54 24 4
gpt4 key购买 nike

我编写了一个代码,使用 Python 和 PyPDF2 lib 从 PDF 文件中提取文本。代码适用于大多数文档,但有时会返回一些奇怪的字符。我认为那是因为 PDF 页面上有水印,因此它无法识别文本:

import requests
from io import StringIO, BytesIO
import PyPDF2

def pdf_content_extraction(pdf_link):

all_pdf_content = ''

#sending requests
response = requests.get(pdf_link)
my_raw_data = response.content


pdf_file_text = 'PDF File: ' + pdf_link + '\n\n'
#extract text page by page
with BytesIO(my_raw_data) as data:
read_pdf = PyPDF2.PdfFileReader(data)

#looping trough each page
for page in range(read_pdf.getNumPages()):
page_content = read_pdf.getPage(page).extractText()
page_content = page_content.replace("\n\n\n", "\n").strip()

#store data into variable for each page
pdf_file_text += page_content + '\n\nPAGE '+ str(page+1) + '/' + str(read_pdf.getNumPages()) +'\n\n\n'

all_pdf_content += pdf_file_text + "\n\n"

return all_pdf_content



pdf_link = 'http://www.dielsdorf.ch/dl.php/de/5f867e8255980/2020.10.12.pdf'

print(pdf_content_extraction(pdf_link))

这是我得到的结果:

#$%˘˘
&'(˝˙˝˙)*+"*˜
˜*
,*˜*˜ˆ+-*˘!(
.˜($*%(#%*˜-/
"*
*˜˜0!0˘˘*˜˘˜ˆ
+˜(%
*
*(+%*˜+"*˜'
$*1˜ˆ
...
...

我的问题是,如何解决这个问题?有没有办法从页面或类似的东西中删除水印?我的意思是,也许这个问题可以通过其他方式解决,也许问题不在那个水印/ Logo 中?

最佳答案

您遇到的乱码问题与文档中的水印无关。您的问题似乎与文档中的编码有关。文档中的德语字符应该能够使用 PyPDF2 提取。 ,因为它使用 latin-1 (iso-8859-1) 编码/解码模型。此编码模型不适用于您的 PDF。

当我查看您的 PDF 的基础信息时,我注意到它是使用这些应用程序创建的:

  • “制作人”:“GPL Ghostscript 9.10”
  • 'Creator': 'PDFCreator 版本 1.7.3

当我查看 PDFs 之一时在这个question也是用德语编写的,我注意到它是使用不同的应用程序创建的:

  • '/Creator': 'Acrobat PDFMaker 11 for Excel'
  • '/Producer': 'Adobe PDF Library 11.0'

我可以使用 PyPDF2 完美读取第二个文件.

当我看到这个file时从你的其他问题中我注意到 PyPDF2 也无法正确读取。 。此文件是使用与此赏金问题中的文件相同的应用程序创建的。

  • “制作人”:“GPL Ghostscript 9.10”
  • 'Creator': 'PDFCreator 版本 1.7.3

这是一样的file尝试使用 pdfreader.SimplePDFViewer 提取文本时抛出错误。

我查看了bugs for ghostscript并指出 2015 年发布的 Ghostscript 9.10 存在一些与字体相关的问题。我还注意到有人提到 2018 年发布的 PDFCreator 版本 1.7.3 也存在一些字体嵌入问题。

我一直在尝试找到正确的解码/编码序列,但到目前为止我还无法正确提取文本。

以下是一些序列:

page_content.encode('raw_unicode_escape').decode('ascii', 'xmlcharrefreplace'))
# output
\u02d8
\u02c7\u02c6\u02d9\u02dd\u02d9\u02db\u02da\u02d9\u02dc
\u02d8\u02c6!"""\u02c6\u02d8\u02c6!


page_content.encode('ascii', 'xmlcharrefreplace').decode('raw_unicode_escape'))
# output
# ˘
ˇˆ˙˝˙˛˚˙˜
˘ˆ!"""ˆ˘ˆ!

我将继续寻找与 PyPDF2 一起使用的正确编码/解码序列。毫无值(value)的是PyPDF2自2016年5月18日以来尚未更新。另外encoding issues是模块的常见问题。再加上maintenance该模块的端口已失效,因此模块 PyPDF3 的端口和 PyPDF4 .

我尝试使用 PyPDF2、PyPDF3 和 PyPDF4 从您的 PDF 中提取文本。所有 3 个模块未能从您提供的 PDF 中提取内容。


您绝对可以使用其他Python模块从文档中提取内容。

蒂卡

此示例使用TikaBeautifulSoup从源文档中提取德语内容。

import requests
from tika import parser
from io import BytesIO
from bs4 import BeautifulSoup

pdf_link = 'http://www.dielsdorf.ch/dl.php/de/5f867e8255980/2020.10.12.pdf'
response = requests.get(pdf_link)
with BytesIO(response.content) as data:
parse_pdf = parser.from_buffer(data, xmlContent=True)

# Parse metadata from the PDF
metadata = parse_pdf['metadata']

# Parse the content from the PDF
content = parse_pdf['content']

# Convert double newlines into single newlines
content = content.replace('\n\n', '\n')
soup = BeautifulSoup(content, "lxml")
body = soup.find('body')
for p_tag in body.find_all('p'):
print(p_tag.text.strip())

pdfminer

此示例使用pdfminer从源文档中提取内容。

import requests
from io import BytesIO
from pdfminer.high_level import extract_text


pdf_link = 'http://www.dielsdorf.ch/dl.php/de/5f867e8255980/2020.10.12.pdf'
response = requests.get(pdf_link)
with BytesIO(response.content) as data:
text = extract_text(data, password='', page_numbers=None, maxpages=0, caching=True,
codec='utf-8', laparams=None)
print(text.replace('\n\n', '\n').strip())

关于python - 如何使用Python PyPDF2库从PDF文件中删除水印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66528514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com