鱼C论坛

 找回密码
 立即注册
查看: 1757|回复: 1

[已解决]PyMuPDF导出txt时,多出来的是哪来的?能否不导出pdf中看不见的东西?

[复制链接]
发表于 2023-5-24 14:43:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 blackantt 于 2023-5-25 21:36 编辑




pymupdf 升级到1.22.3 后,问题解决




无标题.png

pdf见  https://t.wss.ink/f/baa9uyq87sz


import sys, fitz

fname = 'Whose-Button-Is-It-FKB_CC-BY-SA.pdf'
doc = fitz.open(fname)  
text = ''
#for page in doc:  
for i,page in enumerate(doc, start=1):

    #text += page.getText() 
    print('page---------' + str(i) ,'\n', page.getText())
最佳答案
2023-5-24 14:48:12
PyMuPDF库通过getText()方法来提取PDF中的文本,它包含了所有的内容,包括页面标题、制作信息以及其他元数据,这可能是你看到的多出的"Title page"、"Imprint page"和时间等信息的来源。

如果你希望仅导出PDF的可见文本内容,可以考虑使用其他的PDF处理库,如PDFMiner。PDFMiner库更专注于从PDF中提取可见的文本,而不是元数据。

如果你还是希望使用PyMuPDF,并希望更准确地控制提取的文本,你可以使用 extract_text() 函数代替 getText() 。这个函数提供了更多的选项,可以帮助你准确地控制要提取的文本。以下是一个例子:
import sys, fitz

fname = 'Whose-Button-Is-It-FKB_CC-BY-SA.pdf'
doc = fitz.open(fname)  
text = ''
#for page in doc:  
for i,page in enumerate(doc, start=1):

    # Use extract_text instead of getText
    text_blocks = page.extract_text().split('\n')
    for block in text_blocks:
        if not block.startswith("Title page") and not block.startswith("Imprint page"):
            print('page---------' + str(i) ,'\n', block)

这个例子中, extract_text() 首先将页面的文本分割成一个个的块,然后我们遍历这些块,忽略那些以"Title page"或者"Imprint page"开头的块。

不过,这只是一个简单的例子,你可能需要进一步调整代码以满足你的特定需求。希望这个信息能够帮到你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-24 14:48:12 | 显示全部楼层    本楼为最佳答案   
PyMuPDF库通过getText()方法来提取PDF中的文本,它包含了所有的内容,包括页面标题、制作信息以及其他元数据,这可能是你看到的多出的"Title page"、"Imprint page"和时间等信息的来源。

如果你希望仅导出PDF的可见文本内容,可以考虑使用其他的PDF处理库,如PDFMiner。PDFMiner库更专注于从PDF中提取可见的文本,而不是元数据。

如果你还是希望使用PyMuPDF,并希望更准确地控制提取的文本,你可以使用 extract_text() 函数代替 getText() 。这个函数提供了更多的选项,可以帮助你准确地控制要提取的文本。以下是一个例子:
import sys, fitz

fname = 'Whose-Button-Is-It-FKB_CC-BY-SA.pdf'
doc = fitz.open(fname)  
text = ''
#for page in doc:  
for i,page in enumerate(doc, start=1):

    # Use extract_text instead of getText
    text_blocks = page.extract_text().split('\n')
    for block in text_blocks:
        if not block.startswith("Title page") and not block.startswith("Imprint page"):
            print('page---------' + str(i) ,'\n', block)

这个例子中, extract_text() 首先将页面的文本分割成一个个的块,然后我们遍历这些块,忽略那些以"Title page"或者"Imprint page"开头的块。

不过,这只是一个简单的例子,你可能需要进一步调整代码以满足你的特定需求。希望这个信息能够帮到你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 01:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表