pdf转图片,图片转pdf,图片压缩
-
执行pdf转图片,再把图片转成pdf的脚本
#!/bin/bash
#参数为文件名,不含扩展.pdf
for i in "$@";
do
python3 app.py $i
rm $i.pdf
python3 makepdf.py $i
rm -fr $i
done
-
把图片转成pdf
把指定目录中的图片根据名称排序,生成一个pdf文件,如果文件比较大 时间比较长,对内存要求也比较高 --dirname --makepdf.py --convert_dirname.pdf 在当前目录下生成 convert_name.pdf
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import io
import time
import os
import sys
from wand.image import Image
from wand.color import Color
from PyPDF2 import PdfFileReader, PdfFileWriter
from fpdf import FPDF
#把指定目录中的图片根据名称排序,生成一个pdf文件,如果文件比较大
#时间比较长,对内存要求也比较高
#--<name> dir
#--makepdf.py
#--convert_name.pdf
#在当前目录下生成 convert_name.pdf
dir=sys.argv[1]
filelist=os.listdir(dir)
fl=[]
for f in filelist:
if f.endswith(".jpg"):
fl.append(f)
fl.sort()
#pdf = FPDF('P','pt')
#==========
#参数说明:
#'P'是竖向 'L'是横向
#'pt'是以像素为单位
#(1655,2580)是指定pdf的页面大小,根据实际图片大小调整
pdf = FPDF('P','pt',(1665,2580))
count=1
# imagelist is the list with all image filenames
for image in fl:
pdf.add_page()
fn=dir+'/'+image
with Image(filename=fn) as img:
w=img.width
h=img.height
print('make pdf',w,h)
#pdf.image(image)
pdf.image(fn,0,0,w,h)
print(image)
count=count+1
if count >1000:
break
pdf.output("convert_"+dir+".pdf", "F")
-
pdf转成图片
参数为文件名,不含扩展名.pdf 参考了网上的代码,加以修改,如有冒犯请见谅
功能:在当前目录下建立以 《文件名》为名的目录 批量生成 文件名_001.jpg 序列图片 说明 _run_convert(filename,dir, page, res=79) res这个参数和导出的图片大小相关,我这里输出 分辨率是 1660x2500的样子 可以根据需要自行调整 调整之后,makepdf中的
:
# -*- coding: utf-8 -*-
import io
import time
import sys
import os
from wand.image import Image
fro` 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,dir, page, res=79):
#idx = page + 1
temp_time = time.time() * 1000
# 由于每次转换的时候都需要重新将整个PDF载入内存,所以这里使用内存缓存
pdfile = getPdfReader(filename)
pages=pdfile.getNumPages()
print(pages)
output_pdf=PdfFileWriter()
output_pdf_name='convert_'+filename
for idx in range(0,pages):
#for idx in range(0,10):
pageObj = pdfile.getPage(idx)
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 = 'jpg'
img.compression_quality = 80
img.background_color = Color("white")
w=img.width
h=img.height
#ratio=1650/w
#print('ratio=',ratio)
#img.resize(int(img.width*ratio), int(img.height*ratio))
print('exract picture',w,'x',h, ' ',img.width,img.height)
# 保存图片
img_path = '%s/%s-%03d.jpg' % (dir,filename[:filename.rindex('.')], idx+1)
print(img_path)
#img.resize
img.save(filename=img_path)
img.destroy()
` img = None
with Image(filename=img_path) as img:
jpeg_bin = img.make_blob('jpeg')
pdf_bytes = None
dst_pdf = None
print('convert page %d cost time %d' % (idx, (time.time() * 1000 - temp_time)))
if __name__ == '__main__':
#print(sys.argv[1])
filename=sys.argv[1]+'.pdf'
os.system('mkdir '+sys.argv[1])
_run_convert(filename,sys.argv[1], 1)