当前位置: 首页 > 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. 亨特·菲利普斯

    ·

相关文章:

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

一、说明 如何使得图像转化成pdf文件, 想要将一个或多个图像转换为 PDF 文档?看看img2pdf和PyPDF2软件包就是您的最佳选择。 二、需要哪些程序包? 首先,您只需要一个 Python 环境,最好是 3.10 或更高版本。本教程中的代…...

使用python编写脚本测试目标主机的TCP端口连通性

使用Python的Socket模块的connect()函数来尝试连接目标主机的特定端口。如果连接成功,则说明该端口是打开的;否则,该端口是关闭的。 下面是一个示例脚本,可以检测目标IP的22端口是否开启: import socket def check_po…...

华为云云服务器评测|基于华为云云耀云服务器L实例开展性能评测,例如 MySQL、Clickhouse、Elasticsearch等等

在当今云计算时代,越来越多的企业和个人开始选择将应用部署在云服务器上,以便更好地满足高性能、可靠性和可扩展性等需求。而华为云云耀云服务器L实例不仅提供了高性能和可靠性的计算和存储资源,而且具有灵活和高效的成本控制,深受…...

Git分布式版本控制系统与github

第四阶段提升 时 间:2023年8月29日 参加人:全班人员 内 容: Git分布式版本控制系统与github 目录 一、案例概述 二、版本控制系统 (一) 本地版本控制 (二)集中化的版本控制系统 &…...

基于Java+SpringBoot+Vue前后端分离中国陕西民俗网设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...

CSS3D+动画

CSS3D 1.css3D 给父元素设置 perspective:景深:近大远小的效果900-1200px这个范围内 transform-style:是否设置3D环境 flat 2D环境 默认值 perserve-3D环境 3D功能函数 1.位移: translateZ()translate3D(x,y,z) <!DOCTYPE html> <html lang"en"><h…...

list对象中如何根据对象中某个属性去重使用Java8流实现

list对象中如何根据对象中某个属性去重使用Java8流实现? 在 Java 8 的流操作中&#xff0c;可以使用 distinct 方法来对一个对象流进行去重&#xff0c;但是默认情况下它会使用对象的 equals() 方法来判断重复。如果你希望根据对象的某个属性进行去重&#xff0c;则可以使用 …...

2023 在Windows上的安装Faiss-GPU(使用anaconda)

该方法安装完 faiss-gpu 之后&#xff0c;不仅会装这个库&#xff0c;还会装很多依赖库。为了防止自己本地一些同名库的版本被修改&#xff0c;建议新建一个虚拟环境来安装。如果本地库版本修改对自己没影响&#xff0c;也可以忽略。 你好&#xff0c;我是悦创。 登录网站&…...

HTML及CSS入门及精通

前言 HTML&#xff08;超文本标记语言&#xff09;和CSS&#xff08;层叠样式表&#xff09;是构建网页的两个基本技术。HTML用于定义网页的结构和内容&#xff0c;而CSS用于控制网页的样式和布局。本教程将介绍HTML和CSS的入门知识&#xff0c;并逐步引导您掌握更高级的技巧和…...

frp实现二级代理

kali是攻击机 &#xff08;192.168.0.106&#xff09; windows server2012是边界服务器&#xff0c;拥有两个网卡&#xff0c;作为一级代理&#xff0c; &#xff08;192.168.0.108&#xff0c;10.10.10.136&#xff09; ad01是内网机器&#xff0c;不出网 &#xff08;10.10.1…...

Vue组件设置背景色

vh&#xff1a;浏览器视区高度百分值 wh&#xff1a;浏览器视区宽度百分值 min-height&#xff1a;最小高度&#xff0c;其他时候自适应 给组件根标签设置&#xff1a;min-height&#xff1a;100vh&#xff0c;就可以正常添加背景色&#xff0c;而且背景色随内容展开而自适…...

Java+Github+Jenkins部署

Java项目—Jenkins部署笔记 一&#xff0c;准备 一台服务器操作系统&#xff0c;示例为ubuntu 22.0.4 可运行lsb_release -a查看 二&#xff0c;安装 docker 更新软件包列表&#xff1a; sudo apt update安装必要的软件包&#xff0c;以便使用HTTPS通过APT下载软件包&#x…...

vue使用命令npm install 报错 cb() never called!

一.错误说明,npm本身下载就慢&#xff0c;有可能是网络的问题。 二.解决方案,把npm设置成淘宝镜像后,再重新npm install npm config set registry https://registry.npm.taobao.org 三.还是不行&#xff0c;还会出现同样的问题&#xff0c;那接下来先清理一下npm缓存 npm cache…...

什么是LatexEasy及其在数学排版中的作用

LatexEasy是一种强大的排版系统&#xff0c;特别擅长处理数学公式和科技文档。它基于 TeX&#xff0c;是由计算机科学家 Donald Knuth 开发的。LaTeX 可以让你专注于内容&#xff0c;而不必过多关心排版细节&#xff0c;特别适用于数学家、工程师和科学研究者。 什么是 LaTeX&…...

axios 和fetch的取舍,以及比较

废话不多说&#xff0c;直接直捣黄龙&#xff1a; 区别 相同点 都是一种基于promise的异步解决方案。都可以解决回调地狱问题 不同点 axios是一个封装好的库&#xff0c;需要npm进行安装&#xff0c;fetch是es6新增的api 语法&#xff1a; fetch(url, { method: GET, // o…...

K-Means(K-均值)聚类算法理论和实战

目录 K-Means 算法 K-Means 术语 K 值如何确定 K-Means 场景 美国总统大选摇争取摆选民 电商平台用户分层 给亚洲球队做聚类 ​编辑 其他场景 K-Means 工作流程 K-Means 开发流程 K-Means的底层代码实现 K-Means 的评价标准 K-Means 算法 对于 n 个样本点来说&am…...

Python-pyqt不同窗口数据传输【使用静态函数】

文章目录 前言程序1&#xff1a;caogao1.py输入数据界面程序2&#xff1a;caogao2.py接收数据界面 程序3 &#xff1a;将输入数据界面和接收数据界面组合成一个总界面讲解 总结 前言 在编写pyqt 页面时有时候需要不同页面进行数据传输。本文讲解静态函数方法。直接看示例。 程…...

百度垂类离线计算系统发展历程

作者 | 弘远君 导读 本文以百度垂类离线计算系统的演进方向为主线&#xff0c;详细描述搜索垂类离线计算系统发展过程中遇到的问题&#xff0c;以及对应的解决方案。架构演进过程中一直奉行“没有最好的架构&#xff0c;只有最合适的架构”的宗旨&#xff0c;面对不同阶段遇到的…...

ubuntu 安装 指定版本:nodejs

通过 PPA 安装指定或最新版本的 nodejs 那么就需要使用 nodesource 来安装指定版本的 nodejs 了。其需要下载一个脚本&#xff0c;运行此脚本会在 ubuntu 里添加一个 nodejs 源&#xff0c;然后用 apt 就可以下载指定的 nodejs 了。 PPA 的全称为 personal package archive 。要…...

16.CSS菜单悬停特效

效果 源码 <!DOCTYPE html> <html> <head> <title>Creative Menu Item Hover Effects</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body><section><…...

SAC算法实战:用PyTorch实现自动驾驶控制(附完整代码)

SAC算法实战&#xff1a;用PyTorch构建自动驾驶控制系统 在自动驾驶技术快速发展的今天&#xff0c;强化学习已成为解决复杂决策问题的有力工具。而Soft Actor-Critic&#xff08;SAC&#xff09;算法凭借其在连续动作空间中的卓越表现&#xff0c;正在成为自动驾驶控制领域的新…...

RWKV7-1.5B-G1A快速原型:使用VMware虚拟机搭建隔离的模型测试环境

RWKV7-1.5B-G1A快速原型&#xff1a;使用VMware虚拟机搭建隔离的模型测试环境 1. 为什么需要虚拟机测试环境 在测试新的大语言模型时&#xff0c;最头疼的问题就是环境配置冲突。你可能遇到过这种情况&#xff1a;好不容易装好CUDA驱动&#xff0c;结果发现和现有项目的PyTor…...

LiuJuan20260223Zimage镜像解析:ComfyUI可视化工作流搭建指南

LiuJuan20260223Zimage镜像解析&#xff1a;ComfyUI可视化工作流搭建指南 你是不是也对那些炫酷的AI图片生成感到好奇&#xff0c;但一看到复杂的代码和命令行就头疼&#xff1f;或者&#xff0c;你已经尝试过一些基础的AI工具&#xff0c;但总觉得它们的功能太单一&#xff0…...

GLM-4.7-Flash功能体验:MoE架构+流式输出,感受30B大模型的丝滑对话

GLM-4.7-Flash功能体验&#xff1a;MoE架构流式输出&#xff0c;感受30B大模型的丝滑对话 1. 开篇&#xff1a;初识GLM-4.7-Flash 当我第一次在CSDN星图镜像广场看到GLM-4.7-Flash这个30B参数的大模型时&#xff0c;内心既期待又忐忑。期待的是它能带来怎样的智能体验&#x…...

经典游戏现代化:让魔兽争霸III重获新生的适配工具

经典游戏现代化&#xff1a;让魔兽争霸III重获新生的适配工具 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 当你在4K显示器上启动魔兽争霸III时&…...

SEO_新手必看的SEO优化入门教程与基础操作指南

<h2>SEO优化入门&#xff1a;为新手量身打造的指南</h2> <p>SEO优化&#xff0c;也就是搜索引擎优化&#xff0c;是一个让你的网站在搜索引擎结果中获得更高排名的过程。对于新手来说&#xff0c;SEO可能看起来有点复杂&#xff0c;但只要掌握了一些基础的操…...

OpenClaw多模型对比:Qwen3.5-4B-Claude与基础版任务实测

OpenClaw多模型对比&#xff1a;Qwen3.5-4B-Claude与基础版任务实测 1. 测试背景与模型选择 最近在搭建个人自动化工作流时&#xff0c;我发现OpenClaw的任务执行质量高度依赖底层大模型的推理能力。为了找到最适合复杂任务的模型&#xff0c;我决定对两个版本进行系统测试&a…...

操作系统面试必考:银行家算法10问10答(含真题解析)

操作系统面试必考&#xff1a;银行家算法10问10答&#xff08;含真题解析&#xff09; 银行家算法作为操作系统中经典的死锁避免算法&#xff0c;几乎成为所有技术面试的必考题。无论是校招还是社招&#xff0c;面试官总喜欢用它来考察候选人对资源分配与系统安全的理解深度。本…...

AgentScope-Java:以 Agentic 为核心设计,构建可推理、可记忆、可扩展的生产级智能体系统

AgentScope-Java:以 Agentic 为核心设计,构建可推理、可记忆、可扩展的生产级智能体系统 副标题:从 ReActAgent、ReMe 记忆管理到高并发工程化落地,系统讲透 AgentScope-Java 的架构原理与企业级实践 一、为什么企业需要的不是“接个大模型”,而是 Agentic 系统 过去两年…...

OpenClaw配置备份:Qwen3.5-4B-Claude环境迁移指南

OpenClaw配置备份&#xff1a;Qwen3.5-4B-Claude环境迁移指南 1. 为什么需要环境迁移 上周我的主力开发机突然主板故障&#xff0c;不得不临时切换到备用笔记本工作。当我准备继续用OpenClaw处理自动化任务时&#xff0c;突然意识到一个严重问题——所有精心调试的模型参数、…...