一万多个 PDF 文件,有的损坏无法打开,有的加密了无法打开,如何用工具或命令扫描出非正常的 PDF 文件? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Apol1oBelvedere
V2EX    问与答

一万多个 PDF 文件,有的损坏无法打开,有的加密了无法打开,如何用工具或命令扫描出非正常的 PDF 文件?

  •  
  •   Apol1oBelvedere 2024-03-13 20:48:52 +08:00 1807 次点击
    这是一个创建于 660 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一万多个 PDF 文件,有的损坏无法打开,有的加密了无法打开,如何用工具或命令扫描出非正常的 PDF 文件?
    - 只要能使用 PDF 阅读软件打开不弹窗 PDF 文件已损坏的,就算正常文件。
    10 条回复    2024-03-16 17:54:49 +08:00
    Seanfuck
        1
    Seanfuck  
       2024-03-13 20:57:09 +08:00
    有批量转图片的工具,能转就正常
    Apol1oBelvedere
        2
    Apol1oBelvedere  
    OP
       2024-03-13 21:16:11 +08:00
    @Seanfuck 希望有个直接检测而不需要耗时转换的办法。
    lianyue
        3
    lianyue  
       2024-03-13 21:18:03 +08:00
    chatgpt :

    一万多个 PDF 文件在 document 目录里面有子目录,有的损坏无法打开,有的加密了无法打开,如何用用 golang 实现 扫描出非正常的 PDF 文件

    得到的答案:
    https://go.dev/play/p/cLaB6i4M3nj
    Mithril
        4
    Mithril  
       2024-03-13 22:08:40 +08:00
    如果你用的阅读软件支持命令行调用,可以写个脚本循环打开看看能否调用成功就行了。

    不支持的话,随便用什么编程语言,调用个 PDF 库尝试打开一下,然后随便读取点啥。能读出来就算打开成功。
    hulooq
        5
    hulooq  
       2024-03-13 22:20:58 +08:00
    gemini-pro 写的代码:

    ```python
    import os
    import PyPDF2

    def scan_pdf_files(directory):
    """Scans a directory of PDF files and identifies non-normal PDF files.

    Args:
    directory: The directory to scan.

    Returns:
    A list of non-normal PDF files.
    """

    non_normal_pdf_files = []

    # Iterate over the files in the directory.

    for file in os.listdir(directory):

    # Check if the file is a PDF file.

    if file.endswith(".pdf"):

    # Try to open the PDF file.

    try:
    pdf_file = open(os.path.join(directory, file), "rb")
    except:
    # The PDF file could not be opened, so it is non-normal.

    non_normal_pdf_files.append(file)
    continue

    # Try to read the PDF file.

    try:
    pdf_reader = PyPDF2.PdfFileReader(pdf_file)
    except:
    # The PDF file could not be read, so it is non-normal.

    non_normal_pdf_files.append(file)
    continue

    # Check if the PDF file is encrypted.

    if pdf_reader.isEncrypted:
    # The PDF file is encrypted, so it is non-normal.

    non_normal_pdf_files.append(file)

    # Return the list of non-normal PDF files.

    return non_normal_pdf_files


    if __name__ == "__main__":

    # Get the directory to scan from the user.

    directory = input("Enter the directory to scan: ")

    # Scan the directory for non-normal PDF files.

    non_normal_pdf_files = scan_pdf_files(directory)

    # Print the list of non-normal PDF files to the console.

    print("The following PDF files are non-normal:")

    for file in non_normal_pdf_files:
    print(file)

    ```
    z4oSkDNGGC2svsix
        6
    z4oSkDNGGC2svsix  
       2024-03-13 23:06:29 +08:00
    在一万多个 PDF 文件中快速找出损坏的文件可以通过以下步骤进行:

    使用脚本或工具批量检测 PDF 文件的完整性:你可以编写脚本或使用现有的工具来批量检查 PDF 文件的完整性。例如,你可以使用 Python 编写一个脚本,利用 PyPDF2 库或其他 PDF 处理库来打开每个文件并检查其完整性。如果文件损坏,这些库通常会引发异常。

    使用命令行工具:一些命令行工具可以帮助你批量检测 PDF 文件的完整性。例如,使用 PDFtk 工具的 dump_data 命令可以快速检查 PDF 文件的完整性。

    利用 PDF 阅读器批量打开文件:有些 PDF 阅读器支持批量打开文件。你可以使用这样的阅读器来尝试批量打开所有文件,如果某些文件损坏,可能会显示错误或无法打开。

    使用专业的文件恢复软件:有些文件恢复软件可以扫描整个文件系统并识别损坏的文件。尽管这种方法可能需要更长的时间,并且可能会找到其他类型的文件,但它是一种可行的方法。

    利用文件系统搜索功能:有些操作系统提供高级的文件搜索功能,可以通过文件的大小、修改日期等属性来筛选文件。你可以使用这些功能来快速定位 PDF 文件,并手动检查其中是否存在损坏的文件。

    无论你选择哪种方法,都建议在操作前备份所有文件,以免意外删除或修改了原始文件。同时,也要注意处理 PDF 文件时可能会消耗大量的系统资源和时间,尤其是在处理数量庞大的文件时。
    z4oSkDNGGC2svsix
        7
    z4oSkDNGGC2svsix  
       2024-03-13 23:14:57 +08:00
    deorth
        8
    deorth  
       2024-03-13 23:17:46 +08:00 via Android
    得加钱
    gamexg
        9
    gamexg  
       2024-03-13 23:44:54 +08:00
    会什么语言就用什么语言找下可用的 pdf 库,然后尝试打开并读取下内容试试
    不要界面,1 小时内差不多搞定
    Apol1oBelvedere
        10
    Apol1oBelvedere  
    OP
       2024-03-16 17:54:49 +08:00
    谢谢以上的帮助,此问题总结心得如下:

    1 、superuser.com 上有很多相同问题,提供了思路。

    2 、采用开源工具 https://github.com/pdfcpu/pdfcpu ,一行命令可以检测完全无法打开的损坏的 PDF (通过关键字 corrupt 筛选错误),用损坏 pdf 测试可行:
    for /r "C:\Path\to\Dir" %f in (*.pdf) do @(pdfcpu validate "%f" 2>&1 | findstr /C:"corrupt" > nul && echo "%f is corrupt")
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2542 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 13:36 PVG 21:36 LAX 05:36 JFK 08:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86