Python3检验pdf文件是否有效

简介:

【基本原理】

  利用PyPDF2的PdfFileReader模块打开pdf文件,如果不抛异常,就认为此pdf文件有效。有时打开并不抛出异常,但是有这种警告:UserWarning: startxref on same line as offset [pdf.py:1680]。这种情况pdf多半也是坏的,可进一步通过页数判断。但walker在测试中发现,对于正常pdf文件,进一步通过页数判断时有时会抛出异常。

【情形一】

  pdf文件在磁盘上。    

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

import traceback

from PyPDF2 import PdfFileReader    

 

#参数为pdf文件全路径名

def isValidPDF_pathfile(pathfile):

   bValid = True

   try:

       #PdfFileReader(open(pathfile, 'rb'))

       reader = PdfFileReader(pathfile)

       if reader.getNumPages() < 1:    #进一步通过页数判断。

           bValid = False

   except:

       bValid = False

       print('*' + traceback.format_exc())

        

   return bValid

【情形二】

  pdf是来自网络的bytes数据。由于PdfFileReader的参数为文件名或文件对象,所以需要做一下转换。

方法一:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import traceback, tempfile

from PyPDF2 import PdfFileReader    

 

#参数为bytes类型数据。利用临时文件。

def isValidPDF_bytes(pdfBytes):

   bValid = True

   try:

       fp = tempfile.TemporaryFile()

       fp.write(pdfBytes)

       reader = PdfFileReader(fp)

       fp.close()

       if reader.getNumPages() < 1:    #进一步通过页数判断。

           bValid = False

   except:

       bValid = False

       print('*' + traceback.format_exc())

        

   return bValid

方法二:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

import io, traceback

from PyPDF2 import PdfFileReader    

 

#参数为bytes类型数据。利用BytesIO转换。

def isValidPDF_bytes(pdfBytes):

   bValid = True

   try:

       b = io.BytesIO(pdfBytes)

       reader = PdfFileReader(b)

       if reader.getNumPages() < 1:    #进一步通过页数判断。

           bValid = False

   except:

       bValid = False

       print('*' + traceback.format_exc())

        

   return bValid


还可以利用PDFlib判断:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

import os

from PDFlib.PDFlib import PDFlib

from PDFlib.PDFlib import PDFlibException

 

def isValidPdf(pathfile):

   p = PDFlib()

 

   p.set_option("license=xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx")

   p.set_option("errorpolicy=return");

    

   indoc = p.open_pdi_document(pathfile, 'repair=none');

   print('indoc:' + str(indoc))

   print('pathfile size:' + str(os.path.getsize(pathfile)) + 'B')

   bValid = False

   if (indoc == -1):

       print('*' + p.get_errmsg())

       bValid = False

   else:

       pageNumber = p.pcos_get_number(indoc, "length:pages")

       print('pageNumber:' + str(pageNumber))

       if pageNumber < 1:      #页数为0

           bValid = False

       else:

           bValid = True

    

   if bValid:

       p.close_pdi_document(indoc)

    

   return bValid


参考文档:

1、The PdfFileReader Class

2、tempfile — Generate temporary files and directories

3、io — Core tools for working with streams


*** walker ***

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1683680如需转载请自行联系原作者


RQSLT

相关文章
|
9月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
2025 2
|
10月前
|
安全 JavaScript 开发者
Python 自动化办公神器|一键转换所有文档为 PDF
本文介绍一个自动化批量将 Word、Excel、PPT、TXT、HTML 及图片转换为 PDF 的 Python 脚本。支持多格式识别、错误处理与日志记录,适用于文档归档、报告整理等场景,大幅提升办公效率。仅限 Windows 平台,需安装 Office 及相关依赖。
520 0
|
8月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
1397 68
|
10月前
|
程序员 数据安全/隐私保护 Python
1行Python代码,实现PDF的加密、解密
程序员晚枫分享使用python-office库实现PDF批量加密与解密的新方法。只需一行代码,即可完成单个或多个PDF文件的加密、解密操作,支持文件路径与正则筛选,适合自动化办公需求。更新至最新版,适配性更佳,操作更简单。
353 8
1行Python代码,实现PDF的加密、解密
|
9月前
|
机器学习/深度学习 文字识别 Java
Python实现PDF图片OCR识别:从原理到实战的全流程解析
本文详解2025年Python实现扫描PDF文本提取的四大OCR方案(Tesseract、EasyOCR、PaddleOCR、OCRmyPDF),涵盖环境配置、图像预处理、核心识别与性能优化,结合财务票据、古籍数字化等实战场景,助力高效构建自动化文档处理系统。
2326 0
|
11月前
|
C#
【PDF提取内容改名】批量提取PDF指定区域内容重命名PDF文件,PDF自动提取内容命名的方案和详细步骤
本工具可批量提取PDF中的合同编号、日期、发票号等关键信息,支持PDF自定义区域提取并自动重命名文件,适用于合同管理、发票处理、文档归档和数据录入场景。基于iTextSharp库实现,提供完整代码示例与百度、腾讯网盘下载链接,助力高效处理PDF文档。
1392 40
|
11月前
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。
|
11月前
|
编译器 Python
如何利用Python批量重命名文件
本文介绍了如何使用Python和PyCharm对文件进行批量重命名,包括文件名前后互换、按特定字符调整顺序等实用技巧,并提供了完整代码示例。同时推荐了第三方工具Bulk Rename Utility,便于无需编程实现高效重命名。适用于需要处理大量文件命名的场景,提升工作效率。
|
10月前
|
缓存 数据可视化 Linux
Python文件/目录比较实战:排除特定类型的实用技巧
本文通过四个实战案例,详解如何使用Python比较目录差异并灵活排除特定文件,涵盖基础比较、大文件处理、跨平台适配与可视化报告生成,助力开发者高效完成目录同步与数据校验任务。
311 0
|
10月前
|
监控 Linux 数据安全/隐私保护
Python实现Word转PDF全攻略:从入门到实战
在数字化办公中,Python实现Word转PDF自动化,可大幅提升处理效率,解决格式兼容问题。本文详解五种主流方案,包括跨平台的docx2pdf、Windows原生的pywin32、服务器部署首选的LibreOffice命令行、企业级的Aspose.Words,以及轻量级的python-docx+pdfkit组合。每种方案均提供核心代码与适用场景,并涵盖中文字体处理、表格优化、批量进度监控等实用技巧,助力高效办公自动化。
2026 0

推荐镜像

更多