吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3120|回复: 8
收起左侧

[经验求助] 如何批量确定PDF是电子版还是扫描版

[复制链接]
U201213 发表于 2023-3-9 11:31
25吾爱币
请教大佬,如何批量确定PDF的类型
电子版就是那种可以直接编辑或者提取文字的
扫描版就是图片转成PDF的那种

现在有几百份PDF,总不能一个个打开看吧

最佳答案

查看完整内容

可以用OCR识别,如果只包含文字层的话,那就是电子版,如果没有文字层,那就是扫描版 下面是代码参考,可以下个Tesseract-OCR +python 实现 [mw_shl_code=python,true]import os import PyPDF2 import subprocess # 设置OCR软件的路径 ocr_path = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe' # 遍历目录中的所有PDF文件 for root, dirs, files in os.walk('path_to_pdf_folder'): for file in files: ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

fortytwo 发表于 2023-3-9 11:31
本帖最后由 SailZhao520 于 2023-3-9 13:38 编辑

可以用OCR识别,如果只包含文字层的话,那就是电子版,如果没有文字层,那就是扫描版
下面是代码参考,可以下个Tesseract-OCR +python 实现
[Python] 纯文本查看 复制代码
import os
import PyPDF2
import subprocess

# 设置OCR软件的路径
ocr_path = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'

# 遍历目录中的所有PDF文件
for root, dirs, files in os.walk('path_to_pdf_folder'):
    for file in files:
        if file.endswith('.pdf'):
            pdf_path = os.path.join(root, file)
            with open(pdf_path, 'rb') as f:
                pdf_reader = PyPDF2.PdfFileReader(f)
                # 如果PDF文件没有文字层,则运行OCR识别
                if not pdf_reader.isEncrypted and not pdf_reader.getNumPages() == 0 and not pdf_reader.getDocumentInfo().get('/Creator') == 'ScanSnap Manager 6.5':
                    text = ''
                    for page_num in range(pdf_reader.getNumPages()):
                        page = pdf_reader.getPage(page_num)
                        text += page.extractText()
                    # 运行OCR识别
                    process = subprocess.Popen([ocr_path, pdf_path, 'stdout'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
                    out, err = process.communicate()
                    # 如果OCR识别结果为空,则说明PDF文件不可识别
                    if not out:
                        print(pdf_path, '是扫描版')
                    else:
                        print(pdf_path, '是电子版')
                else:
                    print(pdf_path, '是电子版')
poyourmumjie 发表于 2023-3-9 13:26
我的方法是,在手机上装一个能看pdf封面预览图的软件,然后一般封面就能看得出来是扫的还是电子的,然后多选进行分类就行。我用的是zarchiver这款压缩软件,坛里有人分享
 楼主| U201213 发表于 2023-3-9 13:38
poyourmumjie 发表于 2023-3-9 13:26
我的方法是,在手机上装一个能看pdf封面预览图的软件,然后一般封面就能看得出来是扫的还是电子的,然后多 ...

电脑上也都有预览图啊,预览就是封面的缩略图,小图是看不出来到底是扫描版还是电子版的

有的质量高一点的扫描版,连边都裁好了,不选中复制几个文字根本看不出来是不是电子版
 楼主| U201213 发表于 2023-3-9 13:41
SailZhao520 发表于 2023-3-9 13:37
可以用OCR识别,如果只包含文字层的话,那就是电子版,如果没有文字层,那就是扫描版
下面是代码参考,可 ...

这个思路可以
没玩过py,晚上抽空试一下

就是不知道有没有什么软件自带这种工具可以判断
poyourmumjie 发表于 2023-3-9 13:43
那种确实是扫描的然后orc出来的,所以会有文字选择,那种只能自己打开看,而且很多即使orc的电子pdf,文字的准确率也不高,浏览图只能区分是扫描的和纯电子版的,具体扫描的orc版本得自己再进去看
仙鬼同拥 发表于 2023-3-9 14:04
给楼主提供一下我的一个批量判断的思路。
①先全部瞅一眼PDF的文件名,对这一堆PDF的大致领域做一个判断,是文档类?电子发票类?图纸类?还是扫描类,这对判断PDF是单页还是多页提供了一个大致方向
②给这一堆PDF的文件大小排个序,取一个中间值分成2份,第一份大文件的肯定是扫描版的多,可能会混杂一些多页的可编辑版,那反之小文件的里面可能就混杂一些单页的图片扫描版
③用PDF编辑软件批量查看PDF属性,PDF文件的鼠标右键属性打开后会多一个英文的标签,显示了PDF的版本、创建的程序,或许有的还会带有PDF的签名。首先看创建的程序,像是阿逗比、office类软件创建的大部分是可编辑的,要是带有惠普、爱普生、佳能之类的字样那肯定就是扫描版了,带PDF签名的就是单页的电子发票之类的。

最后说一个比较复杂的情况,就是工程领域,最后交档案的时候可能要扫描手签了字的纸质竣工图纸到PDF存档,又要初始施工图的CAD转换PDF,这两个类型的PDF文件大小就差不多不太好判断
仙鬼同拥 发表于 2023-3-9 14:20
SailZhao520 发表于 2023-3-9 13:37
可以用OCR识别,如果只包含文字层的话,那就是电子版,如果没有文字层,那就是扫描版
下面是代码参考,可 ...

        这个用程序判断确实比较高效且准确,不过这个判断的条件我觉得应该改一下,来增强适用性。
        有文字层就判断为可编辑版,这个条件有一些不确定性,比如:在一些网站上下载的影印版书籍会带有文字水印,或者在首页加一页文字的书籍信息和水印。还有再进行一遍OCR的话会降低整体的判断速度,个人感觉没必要OCR。
        我觉得判断条件可以改成有且仅有图片的PDF必定为扫描版(例外情况:用office做的只有一张图片的PDF就算是可编辑,那编辑的意义也不大吧?会有人闲的无聊做这种PDF吗),否则就是可编辑电子版。这种也有一种例外情况,电子档转曲后防修改的PDF和AI、CDR、CAD这些矢量图转出来的PDF,不知道Python能不能分辨纯像素图和矢量图,有且只有纯像素图的肯定是扫描的,剩下其他的就人工打开判断吧
 楼主| U201213 发表于 2023-3-9 20:57
仙鬼同拥 发表于 2023-3-9 14:04
给楼主提供一下我的一个批量判断的思路。
①先全部瞅一眼PDF的文件名,对这一堆PDF的大致领域做一个判断, ...

我这个就是一批杂志,有的是扫描版有的是电子版
就是纯粹看能不能复制文字,判断电子版
现在有好几百本,
返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-4-22 16:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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