需要的库:traits
- pip install traits‑5.2.0‑cp37‑cp37m‑win_amd64.whl
-
注意,fitz要先在下面的网址下载
https://www.lfd.uci.edu/~gohlke/pythonlibs/#traitswww.lfd.uci.edu
fitz
- pip install fitz
-
PyMuPDF
- pip install PyMuPDF
-
- # -*- coding;utf-8 -*-
- import fitz
-
- '''
- # 将PDF转化为图片
- pdfPath pdf文件的路径
- imgPath 图像要保存的文件夹
- zoom_x x方向的缩放系数
- zoom_y y方向的缩放系数
- rotation_angle 旋转角度
- zoom_x和zoom_y一般取相同值,值越大,图像分辨率越高。
- '''
-
- def pdf_image(pdfPath, imgPath, zoom_x=5, zoom_y=5, rotation_angle=0):
- # 打开PDF文件
- pdf = fitz.open(pdfPath)
- page_count=pdf.pageCount
- # 逐页读取PDF
- for pg in range(0, page_count):
- page = pdf[pg]
- # 设置缩放和旋转系数
- trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
- pm = page.getPixmap(matrix=trans, alpha=False)
- # 开始写图像
- pm.writePNG(imgPath + str(pg) + ".jpg")
- pdf.close()
-
-
- if __name__ == '__main__':
- pdf_image(r"./P26.pdf", r"./pdf2pic/", 5, 5, 0)
-
zoom_x和zoom_y一般取相同值,值越大,图像分辨率越高。
python大法确实好,但是Adobe Acrobat DC更好,安装了破解版Adobe Acrobat DC,发现其处理PDF功能真强大,分享给大家:
链接: https://pan.baidu.com/s/1YdyeUv43WUmlKR9SVrPSkQ 提取码: gw87
- # -*- coding;utf-8 -*-
- import glob,fitz,os
-
-
- '''图片合并为 PDF 文件
- 将所需合并的图片放置与文件夹 pic2pdf 中
- '''
- #多张图片转pdf
- def pic2pdf():
- doc = fitz.open()
- for img in sorted(glob.glob("pic2pdf/*")): # 读取图片,确保按文件名排序
- print(img)
- imgdoc = fitz.open(img) # 打开图片
- pdfbytes = imgdoc.convertToPDF() # 使用图片创建单页的 PDF
- imgpdf = fitz.open("pdf", pdfbytes)
- doc.insertPDF(imgpdf) # 将当前页插入文档
- if os.path.exists("allimages.pdf"):
- os.remove("allimages.pdf")
- doc.save("allimages.pdf") # 保存pdf文件
- doc.close()
-
-
- #单张图片转pdf
- def convert_to_pdf1(im_name,pdf_name):
- # pip install reportlab
- from reportlab.pdfgen import canvas
- import io
- from reportlab.lib.pagesizes import A4, landscape,B0
- (w, h) = landscape(B0)
- with open(pdf_name,'wb') as f:
- c = canvas.Canvas(f,pagesize=B0)
- c.drawImage(im_name,0,0)
- c.showPage()
- c.save()
-
-
- if __name__ == '__main__':
- pic2pdf()
- convert_to_pdf1('./pic2pdf/0.jpg','./pic2pdf/0.pdf')
-
wand是包装接口(bindings),而实际进行转换的工具是ImageMagick.
Wind官网:http://docs.wand-py.org/en/0.5.6/
ImageMagick: https://imagemagick.org/script/download.php#windows
- from wand.image import Image
-
- filename="somefile.pdf"
-
- with(Image(filename=filename, resolution=120)) as source:
- images = source.sequence
- pages = len(images)
- for i in range(pages):
- n = i + 1
- newfilename = filename[:-4] + str(n) + '.jpeg'
- Image(images[i]).save(filename=newfilename)
-
- from wand.image import Image
-
- with Image(filename='./P26.pdf') as img:
- with img.convert('jpg') as converted:
- converted.save(filename='./image.jpg')
-
这种方法底层也是调用了Magick库,如果没有安装的话,在import Color时则会抛出异常,异常信息中会给出下载地址,记得选择与Python版本相同的第三方库进行下载安装。
下载地址:http://docs.wand-py.org/en/latest/guide/install.html#install-imagemagick-on-windows
这种方法可以实现转换,但是问题是这种方法所得出的图片都是A4大小的,也就是595*842。如果使用市面上的PDF转换器所得到的图片,是2482*3506大小的,也就是说比我们自己写代码得出的图片要清晰很多,倘若我们将得到的图片再转回成pdf,得到的pdf文件明显模糊不清,干扰阅读。