如何使用Python的PyPDF2 lib从PDF文件中删除水印

在后面

我编写了一个代码,使用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˜ˆ
...
...

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

生活很复杂

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

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

  • '生产者':'GPL Ghostscript 9.10'
  • 'Creator':'PDFCreator版本1.7.3

当我查看问题中也用德语编写PDF之一时,我注意到它是使用不同的应用程序创建的:

  • '/ Creator':'Acrobat PDFMaker 11 for Excel'
  • '/生产者':'Adobe PDF库11.0'

我可以使用PyPDF2完美地阅读第二个文件

当我从另一个问题查看此文件时,我注意到PyPDF2也无法正确读取文件该文件是使用与该赏金问题中的文件相同的应用程序创建的。

  • '生产者':'GPL Ghostscript 9.10'
  • 'Creator':'PDFCreator版本1.7.3

这是与尝试使用pdfreader.SimplePDFViewer提取文本时引发错误的文件

我查看了ghostscript错误,并注意到Ghostscript 9.10于2015年发布了一些与字体有关的问题。我还指出有些人提到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一起使用的正确编码/解码顺序。这是值得什么,PyPDF2尚未自5月18日更新后,2016年又编码问题与模块常见的问题。加上该模块维护工作已失效,因此模块PyPDF3PyPDF4的端口不起作用

我试图使用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())

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用pypdf2打开pdf文件

来自分类Dev

使用Python与PyPDF2从PDF文件提取文本

来自分类Dev

如何从PDF文件中删除水印?

来自分类Dev

如何使用PyPDF2设置PDF版本?

来自分类Dev

如何使用pypdf2检查pdf密码是否正确

来自分类Dev

Python无法使用pyPDF2打印PDF

来自分类Dev

如何在Python 3中使用PyPDF2计算边界框

来自分类Dev

我如何知道使用PyPDF2将文件附加到我的PDF中?

来自分类Dev

如何使用PyPDF2在Python 3中以单个字符串的形式从PDF检索所有页面

来自分类Dev

使用PyPdf2替换pdf中的文本

来自分类Dev

使用 PyPDF2 合并多个 pdf 文档中的页面

来自分类Dev

PyPDF2:从zip文件读取pdf

来自分类Dev

PyPDF2在加水印时损坏文件

来自分类Dev

使用PyPDF2检测Google Docs生成的PDF文件中的非嵌入式字体

来自分类Dev

如何遍历目录中的文件,以便可以使用PyPDF2打开/读取它们?

来自分类Dev

PyPDF2 PdfFileMerger 在合并文件中丢失 PDF 模块

来自分类Dev

使用pypdf2将文件夹中的所有pdf文件合并为一个pdf

来自分类Dev

如何在pdf文件中添加水印?

来自分类Dev

尝试从lib运行示例时出现pyPDF2 TypeError

来自分类Dev

如何使用pdftk从pdf删除水印?

来自分类Dev

无法从PyPDF2上的regex接收正确格式的PDF

来自分类Dev

如何使用python在PDF文件的所有页面中添加水印?

来自分类Dev

如何创建使用PyPDF2的Python2.7路径?

来自分类Dev

如何创建使用PyPDF2的Python2.7路径?

来自分类Dev

使用文件名为文件夹中的所有pdf添加水印

来自分类Dev

使用PHP在PDF文件上加水印

来自分类Dev

如何使用Windows安装pyPDF2模块?

来自分类Dev

如何使用 PyPDF2 更新字段

来自分类Dev

PyPDF2脚本,用于拆分文件夹中pdf的每一页

Related 相关文章

热门标签

归档