代碼怎么轉(zhuǎn)成網(wǎng)頁(代碼怎么轉(zhuǎn)成網(wǎng)頁格式)
作者: qikqiak
來源:https://blog.qikqiak.com/post/python-convert-pdf-images/
作者: qikqiak
來源:https://blog.qikqiak.com/post/python-convert-pdf-images/
之前收集了很多優(yōu)秀的 PDF文檔,但是需要看的時候不是很方便,需要去找到這個文件,如果是在手機上的話往往還需要下載 PDF相關(guān)的插件才行,而且最大的問題是不便于資料的整理和分享。如果能夠?qū)?PDF轉(zhuǎn)換成網(wǎng)頁,豈不是就能解決這些問題了?還能直接分享出去。
這里利用 PyPDF包來處理 PDF文件,為了方便快捷,我這里直接將一個頁面轉(zhuǎn)換成圖片,就不需要去識別頁面中的每一個 PDF元素了,這是沒必要的。
轉(zhuǎn)換
核心代碼很簡單,就是將 PDF文件讀取出來,轉(zhuǎn)換成 PdfFileReader,然后就可以根據(jù) PyPDF2的API去獲得每一個頁面的二進(jìn)制數(shù)據(jù),拿到二進(jìn)制數(shù)據(jù)過后,就能很方便的進(jìn)行圖片處理了,這里用 wand包來進(jìn)行圖片處理。
# -*- coding: utf-8 -*-
importio
fromwand.image importImage
fromwand.color importColor
fromPyPDF2importPdfFileReader,PdfFileWriter
展開全文
memo ={}
defgetPdfReader(filename):
reader =memo.get(filename,None)
ifreader isNone:
reader =PdfFileReader(filename,strict=False)
memo[filename]=reader
returnreader
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文件較大,如果一次性轉(zhuǎn)換整個PDF文件需要小心內(nèi)存溢出的問題,我們這里將第一次載入的整個PDF文件保存到內(nèi)存,避免每次讀取的時候都重新載入。
需要注意的是一般PDF文件較大,如果一次性轉(zhuǎn)換整個PDF文件需要小心內(nèi)存溢出的問題,我們這里將第一次載入的整個PDF文件保存到內(nèi)存,避免每次讀取的時候都重新載入。
上面已經(jīng)完成了一個 PDF頁面的轉(zhuǎn)換,要完成整個文件的轉(zhuǎn)換就很簡單了,只需要拿到文件的總頁碼,然后循環(huán)執(zhí)行就行??紤]到轉(zhuǎn)換比較耗時,可以使用異步處理的方式加快速度。比如可以使用 celery來搭配處理,一定注意小心內(nèi)存泄露。
核心代碼已經(jīng)整理放到github上去了,好了,等有時間的時候準(zhǔn)備做一個公共的 PDF轉(zhuǎn)成 H5的服務(wù),開放給大眾使用。
花了點時間,做成了一個獨立的服務(wù):https://pdfh5.com,歡迎大家試用
花了點時間,做成了一個獨立的服務(wù):https://pdfh5.com,歡迎大家試用
掃描二維碼推送至手機訪問。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請注明出處。