当前位置: 首页 > news >正文

如何在 Python 中将图像转换为 PDF

一、说明

如何使得图像转化成pdf文件, 想要将一个或多个图像转换为 PDF 文档?看看img2pdfPyPDF2软件包就是您的最佳选择。

二、需要哪些程序包?

        首先,您只需要一个 Python 环境,最好是 3.10 或更高版本。本教程中的代码是在使用 Python 3.10.12 的 Google Colab 环境中执行的。

        第一步是确保在 Python 环境中安装以下包:

  • img2pdf
  • PyPDF2
  • Pillow

        Pip 可用于在 Colab 中安装这些软件包:

!pip install img2pdf PyPDF2 Pillow 

        第一个包img2pdf将用于将图像转换为PDF文件。然后,PyPDF2 可用于将多个 PDF 合并为一个 PDF 文件。枕头是一个图像处理库;它提供了转换所需的附加功能。

        现在可以导入这些包以及 和 。osgoogle.colab

# required libraries
import os
import img2pdf
import PyPDF2
from PIL import Image
from google.colab import files

三、img2pdf官方文档

img2pdf是一个开源的Python包,用于将图像转换为pdf格式。它包括另一个模块枕头,也可用于增强图像(亮度,对比度和其他东西) 使用此命令安装软件包

pip install img2pdf

  以下是实现:图像可以使用img2pdf模块提供的img2pdf.convert()函数转换为pdf字节,然后在wb模式下打开pdf文件并用字节写入。

  • python

# Python3 program to convert image to pdf

# using img2pdf library
 
# importing necessary libraries
import img2pdf
from PIL import Image
import os
 
# storing image path
img_path = "C:/Users/Admin/Desktop/GfG_images/do_nawab.png"
 
# storing pdf path
pdf_path = "C:/Users/Admin/Desktop/GfG_images/file.pdf"
 
# opening image
image = Image.open(img_path)
 
# converting into chunks using img2pdf
pdf_bytes = img2pdf.convert(image.filename)
 
# opening or creating pdf file
file = open(pdf_path, "wb")
 
# writing pdf files with chunks
file.write(pdf_bytes)
 
# closing image file
image.close()
 
# closing pdf file
file.close()
 
# output
print("Successfully made pdf file")

输出:

Successfully made pdf file

四、准备映像

        在编写更多代码之前,了解每个图像的文件位置非常重要。为了尽可能简化此操作,可以在 Colab 环境中创建一个新文件夹:

!mkdir images

        所有图像都需要使用 提供的上传程序同时上传到此位置。这些文件将根据其名称进行排序,因此它们应命名为类似 .google.colabpage1.png, page2.png, ..., page9.png

os.chdir("images")
files.upload()

        将图像存储在已知的文件位置后,其名称可以存储在列表中。

imgs = os.listdir()
imgs.sort()

        如果图像超过 9 个,则此方法可能会出现问题,应按文件所需的顺序创建列表。

五、将图像转换为 PDF

        然后可以使用 for 循环遍历每个图像,将其转换为 PDF,并将其写入名为 的新文件夹。pdfs

# create a folder called pdfs
os.mkdir("../pdfs")# loop over each image
for ind, img in enumerate(imgs):# open each imagewith Image.open(img) as image: # convert the image to a PDFpdf = img2pdf.convert(image.filename)# write the PDF to its final destinationwith open(f"../pdfs/pdf{ind+1}.pdf", "wb") as file:file.write(pdf)print(f"Converted {img} to pdf{ind+1}.pdf")

六、合并文档

        将图像转换为 PDF 文件后,可以独立使用并使用 下载它们,也可以将它们合并在一起。要将文件合并在一起,请提取 PDF 文件列表并按页码对其进行排序。files.download('filename.pdf')

os.chdir("../pdfs")
pdfs = os.listdir()

        同样,如果有超过 9 个图像或 PDF,它们应按各自的顺序存储在列表中。

        对象可用于将每个 PDF 连接成单个文件。PdfMerger

pdfMerge = PyPDF2.PdfMerger()# loop through each pdf page
for pdf in pdfs:# open each pdfwith open(pdf, 'rb') as pdfFile:# merge each filepdfMerge.append(PyPDF2.PdfReader(pdfFile))# write the merged pdf 
pdfMerge.write('merged.pdf')# download the final pdf
files.download('merged.pdf')

最终合并的PDF将按其各自名称的顺序包含每个图像。

七、完整程序

        完整的代码可以在下面找到。它是高度可定制的,以满足大多数用例。

!pip install img2pdf PyPDF2 Pillow
!mkdir images
# required libraries
import os
import img2pdf
import PyPDF2
from PIL import Image
from google.colab import filesos.chdir("images")
files.upload()
imgs = os.listdir()# create a folder called pdfs
os.mkdir("../pdfs")# loop over each image
for ind, img in enumerate(imgs):# open each imagewith Image.open(img) as image: # convert the image to a PDFpdf = img2pdf.convert(image.filename)# write the PDF to its final destinationwith open(f"../pdfs/pdf{ind+1}.pdf", "wb") as file:file.write(pdf)print(f"Converted {img} to pdf{ind+1}.pdf")os.chdir("../pdfs")
pdfs = os.listdir()
pdfs.sort()pdfMerge = PyPDF2.PdfMerger()# loop through each pdf page
for pdf in pdfs:# open each pdfwith open(pdf, 'rb') as pdfFile:# merge each filepdfMerge.append(PyPDF2.PdfReader(pdfFile))# write the merged pdf 
pdfMerge.write('merged.pdf')# download the final pdf
files.download('merged.pdf')

八、引用

  1. https://www.geeksforgeeks.org/python-convert-image-to-pdf-using-img2pdf-module/
  2. Merging PDFs with Python | Python-bloggers
  3. 亨特·菲利普斯

    ·
http://www.lryc.cn/news/145575.html

相关文章:

  • 使用python编写脚本测试目标主机的TCP端口连通性
  • 华为云云服务器评测|基于华为云云耀云服务器L实例开展性能评测,例如 MySQL、Clickhouse、Elasticsearch等等
  • Git分布式版本控制系统与github
  • 基于Java+SpringBoot+Vue前后端分离中国陕西民俗网设计和实现
  • CSS3D+动画
  • list对象中如何根据对象中某个属性去重使用Java8流实现
  • 2023 在Windows上的安装Faiss-GPU(使用anaconda)
  • HTML及CSS入门及精通
  • frp实现二级代理
  • Vue组件设置背景色
  • Java+Github+Jenkins部署
  • vue使用命令npm install 报错 cb() never called!
  • 什么是LatexEasy及其在数学排版中的作用
  • axios 和fetch的取舍,以及比较
  • K-Means(K-均值)聚类算法理论和实战
  • Python-pyqt不同窗口数据传输【使用静态函数】
  • 百度垂类离线计算系统发展历程
  • ubuntu 安装 指定版本:nodejs
  • 16.CSS菜单悬停特效
  • 恒运资本:市盈率怎么算?
  • Docker运维中常见错误以及解决方法汇总1
  • Maven - 使用maven-release-plugin规范化版本发布
  • 2023.8.29 关于性能测试
  • 基于MATLAB的径向基函数插值(RBF插值)(一维、二维、三维)
  • flume拦截器
  • vue、elementui控制前一级选择后,后一级才会有数据
  • 亲测influxdb安装为window后台服务
  • 【LeetCode - 每日一题】823. 带因子的二叉树 (2023.08.29)
  • flutter 上传图片并裁剪
  • 一台服务器上部署 Redis 伪集群