从JPG创建一个小pdf以进行网络优化



我在一个文件夹中有许多图像(大约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.jpgpage002.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")

你也可以查看他们的教程页面。

最新更新