<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          利用Python優(yōu)雅地將PDF轉換成圖片

          共 1509字,需瀏覽 4分鐘

           ·

          2019-10-17 23:02


          NH8Ir7uYh6.png


          作者:qikqiak
          來源:https://blog.qikqiak.com/post/python-convert-pdf-images/

          之前收集了很多優(yōu)秀的??PDF文檔,但是需要看的時候不是很方便,需要去找到這個文件,如果是在手機上的話往往還需要下載??PDF相關的插件才行,而且最大的問題是不方便資料的整理和如果能夠將??PDF轉換成網頁,豈不是能夠解決這些問題了?還能直接分享出去。

          這里利用??PyPDF包來處理??PDF文件,為了方便快捷,我這里直接將一個頁面轉換成圖片,就不需要去識別頁面中的每一個??PDF元素了,這是沒必要的。


          轉換

          核心代碼很簡單,就是將??PDF文件讀取出來,轉換成??PdfFileReader,然后就可以根據(jù)??PyPDF2的API去獲得每個一個頁面的二進制數(shù)據(jù),拿到二進制數(shù)據(jù)過后,就能很方便的進行圖片處理了,這里用??wand包來進行圖片處理。

          # -*- coding: utf-8 -*-
          import io
          
          from wand.image import Image
          from wand.color import Color
          from PyPDF2 import PdfFileReader, PdfFileWriter
          
          memo = {}
          
          def getPdfReader(filename):
           ? ?reader = memo.get(filename, None)
           ? ?if reader is None:
           ? ? ? ?reader = PdfFileReader(filename, strict=False)
           ? ? ? ?memo[filename] = reader
           ? ?return reader
          
          def _run_convert(filename, page, res=120):
           ? ?idx = page + 1
           ? ?pdfile = getPdfReader(filename)
           ? ?pageObj = pdfile.getPage(page)
           ? ?dst_pdf = PdfFileWriter()
           ? ?dst_pdf.addPage(pageObj)
          
           ? ?pdf_bytes = io.BytesIO()
           ? ?dst_pdf.write(pdf_bytes)
           ? ?pdf_bytes.seek(0)
          
           ? ?img = Image(file=pdf_bytes, resolution=res)
           ? ?img.format = 'png'
           ? ?img.compression_quality = 90
           ? ?img.background_color = Color("white")
           ? ?img_path = '%s%d.png' % (filename[:filename.rindex('.')], idx)
           ? ?img.save(filename=img_path)
           ? ?img.destroy()
          
          需要注意的是一般PDF文件合并,如果一次性轉換整個PDF文件需要小心緩存重疊的問題,我們這里將第一次加載的整個PDF文件保存到內存,避免每次重新放置的時候都重新加載入。


          批量處理

          上面已經完成了一個??PDF頁面的轉換,要完成整個文件的轉換就很簡單了,只需要拿到文件的總頁碼,然后循環(huán)執(zhí)行就行。考慮到轉換比較耗時,可以使用反向處理的方式加快速度。例如可以使用??celery來搭配處理,一定注意小心內存占用。


          瀏覽 53
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  综合久久网| 日韩午夜久久 | 综合日逼网| 亚洲无码app | 中文字幕the same porn |