我在一个文件夹中有许多图像(大约2000个图像(,每个图像大约150KB。它们的dpi为96。我想用这些图像创建一个尽可能小的pdf。我正在使用PyPDF2创建pdf,但产生了一个非常大的文件应用程序800000MB。有更好的方法吗?这是我的代码:
for i in range(0, noImages):
image = Image.open(newimageList[i])
if(i == 0):
image.save(namePath, "PDF" ,quality=100, optimize=True, save_all=True)
else:
namePath2 = rootPDF+pdf_id+"temp.pdf"
image.save(namePath2, "PDF" ,quality=100, optimize=True, save_all=True)
pdfs = [namePath, namePath2]
merger = PdfFileMerger()
for f in pdfs:
merger.append(PdfFileReader(f), 'rb')
with open(namePath, 'wb') as new_file:
merger.write(new_file)
os.remove(namePath2)
我建议将图像转换为中间的多页TIFF文件,然后将其转换为pdf。
您需要的软件是ImageMagick套件中的convert
(对于所有使用位图图形的人来说都是必不可少的工具(和libtiff中的tiff2pdf
。
首先,将所有JPEGS转换为一个中间TIFF文件。本例假定文件名为page001.jpg
、page002.jpg
等。根据需要进行调整:
convert -density 150 -units PixelsPerInch page*.jpg
-adjoin intermediate.tiff
(如果文件不包括分辨率元数据,则只需要使用density
指定分辨率。(
然后使用JPEG压缩将中间文件转换为PDF:
tiff2pdf -r 150 -j -o output.pdf intermediate.tiff
例如,我使用此技术将总共990098字节的四个扫描页面(JPEG格式,sRGB颜色,1216x1704像素(转换为651149字节的PDF文件。
尝试fpdf
from fpdf import FPDF
pdf = FPDF()
# imagelist is the list with all image filenames
for image in imagelist:
pdf.add_page()
pdf.image(image,x,y,w,h)
pdf.output("yourfile.pdf", "F")
你也可以查看他们的教程页面。