【基本原理】
【情形一】
pdf文件在磁盘上。
<code>import</code> <code>traceback</code>
<code>from</code> <code>PyPDF2 </code><code>import</code> <code>PdfFileReader </code>
<code>#参数为pdf文件全路径名</code>
<code>def</code> <code>isValidPDF_pathfile(pathfile):</code>
<code> </code><code>bValid </code><code>=</code> <code>True</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>#PdfFileReader(open(pathfile, 'rb'))</code>
<code> </code><code>reader </code><code>=</code> <code>PdfFileReader(pathfile)</code>
<code> </code><code>if</code> <code>reader.getNumPages() < </code><code>1</code><code>: </code><code>#进一步通过页数判断。</code>
<code> </code><code>bValid </code><code>=</code> <code>False</code>
<code> </code><code>except</code><code>:</code>
<code> </code><code>bValid </code><code>=</code> <code>False</code>
<code> </code><code>print</code><code>(</code><code>'*'</code> <code>+</code> <code>traceback.format_exc())</code>
<code> </code>
<code> </code><code>return</code> <code>bValid</code>
【情形二】
pdf是来自网络的bytes数据。由于PdfFileReader的参数为文件名或文件对象,所以需要做一下转换。
方法一:
<code>import</code> <code>traceback, tempfile</code>
<code>#参数为bytes类型数据。利用临时文件。</code>
<code>def</code> <code>isValidPDF_bytes(pdfBytes):</code>
<code> </code><code>fp </code><code>=</code> <code>tempfile.TemporaryFile()</code>
<code> </code><code>fp.write(pdfBytes)</code>
<code> </code><code>reader </code><code>=</code> <code>PdfFileReader(fp)</code>
<code> </code><code>fp.close()</code>
方法二:
<code>import</code> <code>io, traceback</code>
<code>#参数为bytes类型数据。利用BytesIO转换。</code>
<code> </code><code>b </code><code>=</code> <code>io.BytesIO(pdfBytes)</code>
<code> </code><code>reader </code><code>=</code> <code>PdfFileReader(b)</code>
<code>import</code> <code>os</code>
<code>from</code> <code>PDFlib.PDFlib </code><code>import</code> <code>PDFlib</code>
<code>from</code> <code>PDFlib.PDFlib </code><code>import</code> <code>PDFlibException</code>
<code>def</code> <code>isValidPdf(pathfile): </code>
<code> </code><code>p </code><code>=</code> <code>PDFlib()</code>
<code> </code><code>p.set_option(</code><code>"license=xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx"</code><code>)</code>
<code> </code><code>p.set_option(</code><code>"errorpolicy=return"</code><code>);</code>
<code> </code>
<code> </code><code>indoc </code><code>=</code> <code>p.open_pdi_document(pathfile, </code><code>'repair=none'</code><code>);</code>
<code> </code><code>print</code><code>(</code><code>'indoc:'</code> <code>+</code> <code>str</code><code>(indoc))</code>
<code> </code><code>print</code><code>(</code><code>'pathfile size:'</code> <code>+</code> <code>str</code><code>(os.path.getsize(pathfile)) </code><code>+</code> <code>'B'</code><code>)</code>
<code> </code><code>bValid </code><code>=</code> <code>False</code>
<code> </code><code>if</code> <code>(indoc </code><code>=</code><code>=</code> <code>-</code><code>1</code><code>):</code>
<code> </code><code>print</code><code>(</code><code>'*'</code> <code>+</code> <code>p.get_errmsg())</code>
<code> </code><code>else</code><code>: </code>
<code> </code><code>pageNumber </code><code>=</code> <code>p.pcos_get_number(indoc, </code><code>"length:pages"</code><code>)</code>
<code> </code><code>print</code><code>(</code><code>'pageNumber:'</code> <code>+</code> <code>str</code><code>(pageNumber))</code>
<code> </code><code>if</code> <code>pageNumber < </code><code>1</code><code>: </code><code>#页数为0</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>bValid </code><code>=</code> <code>True</code>
<code> </code><code>if</code> <code>bValid:</code>
<code> </code><code>p.close_pdi_document(indoc)</code>
参考文档:
本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1683680如需转载请自行联系原作者
RQSLT