Python 轻松生成PDF文档
PDF(Portable Document Format)是一种常用的文档格式,具有跨平台兼容性、保真性、安全性和交互性等特点。我们日常生活工作中的合同、报告、论文等通常都采用PDF格式,以确保文档在不同的操作系统(例如 Windows、Mac、Linux)和设备上被查看时都能保持外观的一致性。
Python是一种高效简洁的编程语言,使用Python来处理PDF文档是实现办公自动化、提高办公效率的方法之一。本文将介绍PDF最基本操作之: 使用Python创建PDF文档,并插入图片。
安装 Python 库
本文中会用到国产Spire.PDF for Python库. 该第三方Python库完全独立,可兼容大部分国产操作系统。能在 Python中实现创建、读取、编辑、转换和保存 PDF 等操作。
产品安装pip命令:
pip install Spire.PDF
也可以下载 Spire.PDF for Python解压缩后再进行安装。点击了解详细安装教程: 如何在 VS Code 中安装 Spire.PDF for Python
使用Python生成PDF文档、并插入图片
Spire.PDF for Python 支持在 PDF 文档中添加文本、图片、形状、链接和表单字段等各种元素。下面仅举例说明如何创建一个包含文字和图片的简单 PDF 文档。
基本步骤:
- 创建一个 PdfDocument 对象。
- 使用 PdfDocument.Pages.Add() 方法添加指定大小和页边距的页面。
- 创建笔刷、字体并设置文本对齐方式。
- 使用 PdfPageBase.Canvas.DrawString() 方法在页面指定坐标处绘制字符串。
- 读取包含文档段落内容的TXT文件,然后创建一个 PdfTextWidget 对象来保存读取的段落内容。(PdfTextWidget 类代表一个可跨越多个页面的文本区域)
- 使用 PdfTextWidget.Draw() 方法在页面指定位置绘制段落内容。
- 加载图片并指定其大小。然后使用 PdfPageBase.Canvas.DrawImage() 方法在页面指定位置绘制图像。
- 使用 PdfDocument.SaveToFile() 方法保存结果文档。
完整代码:
from spire.pdf.common import *
from spire.pdf import * def ReadFromTxt(fname: str) -> str:
with open(fname, 'r', encoding='utf-8') as f:
text = f.read()
return text # 创建PdfDocument对象
pdf = PdfDocument() # 添加一页
page = pdf.Pages.Add(PdfPageSize.A4(), PdfMargins(20.0, 20.0)) # 指定标题文本
titleText = "信息化的概念" # 创建纯色笔刷
titleBrush = PdfSolidBrush(PdfRGBColor(Color.get_MediumBlue()))
paraBrush = PdfSolidBrush(PdfRGBColor(Color.get_Black())) # 创建 true type 字体
titleFont = PdfTrueTypeFont("微软雅黑", 15.0, PdfFontStyle.Bold, True)
paraFont = PdfTrueTypeFont("宋体", 11.0, PdfFontStyle.Regular, True) # 设置文本对齐方式
textAlignment = PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle) # 在页面中央绘制标题
page.Canvas.DrawString(titleText, titleFont, titleBrush, page.Canvas.ClientSize.Width / 2, 35.0, textAlignment) # 从TXT文件中获取段落内容
paraText = ReadFromTxt("内容.txt") # 创建一个 PdfTextWidget 对象,用于保存段落内容
textWidget = PdfTextWidget(paraText, paraFont, paraBrush) # 指定一个矩形区域来放置段落内容
rect = RectangleF(PointF(0.0, 52.0), page.Canvas.ClientSize) # 将PdfLayoutType设置为Paginate以使内容自动分页
textLayout = PdfTextLayout()
textLayout.Layout = PdfLayoutType.Paginate # 将段落内容绘制到页面上
textWidget.Draw(page, rect, textLayout) # 加载一张图片
image = PdfImage.FromFile("插图.png") # 指定图片尺寸
width = image.Width * 0.75
height = image.Height * 0.75 # 在页面指定位置绘制图像
x = (page.Canvas.ClientSize.Width - width) / 2
y = 220.0
page.Canvas.DrawImage(image, x, y, width, height) # 保存结果文件
pdf.SaveToFile("生成PDF.pdf")
运行结果:

了解Spire.PDF for Python的更多功能:https://www.e-iceblue.cn/pdfforpython/spire-pdf-for-python-program-guide-content.html
水印可申请免费试用授权来移除:https://www.e-iceblue.cn/misc/temporary-license.html
Python 轻松生成PDF文档的更多相关文章
- 使用sphinx快速为你python注释生成API文档
sphinx简介sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发.新版的Python3文档就是由sphinx生成的, ...
- python快速生成注释文档的方法
python快速生成注释文档的方法 今天将告诉大家一个简单平时只要注意的小细节,就可以轻松生成注释文档,也可以检查我们写的类方法引用名称是否重复有问题等.一看别人专业的大牛们写的文档多牛多羡慕,不用担 ...
- 利用Java动态生成 PDF 文档
利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...
- Aspose.Words操作word生成PDF文档
Aspose.Words操作word生成PDF文档 using Aspose.Words; using System; using System.Collections.Generic; using ...
- 如何从Windows Phone 生成PDF文档
我需要从我的Windows Phone应用程序生成PDF. 遗憾的是没有标准的免费的PDF生成库在Windows Phone上运行. 我不得不自己生成PDF,通过直接写入到文件格式. 这竟然是真的很容 ...
- 使用PHP生成PDF文档
原文:使用PHP生成PDF文档 实际工作中,我们要使用PHP动态的创建PDF文档,目前有许多开源的PHP创建PDF的类库,今天我给大家来介绍一款优秀的PDF库,它就是TCPDF,TCPDF是一个用于快 ...
- DocFX生成PDF文档
使用DocFX生成PDF文档,将在线文档转换为PDF离线文档. 关于DocFX的简单介绍使用DocFX生成文档 使用docfx 命令 1.下载 https://github.com/dotnet/do ...
- qt 利用 HTML 生成PDF文档,不能显示jpg图片
利用 QPrinter 和html 生成 pdf文档 其中用html语句有显示图片的语句 但只能显示png格式的图片,不能显示jpg格式图片. 经过排查:语法,文件路径等都正确,最终在stack ov ...
- ireport图形化界面生成pdf文档
一.ireport软件安装 1.下载软件的官网 https://community.jaspersoft.com/project/ireport-designer/releases 2.安装软件 ...
- 自动把动态的jsp页面(或静态html)生成PDF文档,并且上传至服务器
置顶2017年11月06日 14:41:04 阅读数:2311 这几天,任务中有一个难点是把一个打印页面自动给生成PDF文档,并且上传至服务器,然而公司框架只有手动上传文档,打印时可以保存为PDF在本 ...
随机推荐
- SaaS软件工程师成长路径
背景 SaaS软件工程师的成长需要循序渐进,和SaaS业务一样有耐心.SaaS工程师需要在"业务"."技术"."管理"三个维度做好知识储备. ...
- Vue-treeselect 实现下拉树懒加载,末节点不要箭头
项目需要,可选择的下拉树,由于数据过多,显示要有层级感,所以使用了懒加载模式 vue-treeselect官网:https://www.vue-treeselect.cn/ 1.前端代码 1.下载依赖 ...
- 进程相关API
ID与句柄 如果我们成功创建一个进程,CreateProcess函数会给我们返回一个结构体,包括四个数 据:进程编号(ID).进程句柄.线程编号(ID).线程句柄. 进程ID其实我们早见过了,通常我们 ...
- laravel artisan 常用命令
命令 说明 php artisan key:generate 生成 App Key php artisan make:controller 生成控制器 php artisan make:model 生 ...
- 使用$test$plusargs提高RTL验收速度
0 前言 这段时间在整合一个小ip,因为要验证每个feature是否可行,需要用testbench + C语言的方式进行仿真验证,由于每种feature不仅要在C语言中修改寄存器配置,还要再testb ...
- 【腾讯云 Cloud Studio 实战训练营】提升开发效率与协作:探索腾讯云 Cloud Studio 的强大功能与优势
一.前言 前几天发生了一个故事,发生了这样一个情景:一位新加入的同事刚刚入职不久,领取了一台崭新的电脑.随后,他投身于一个新项目,但却遇到了一个困扰:由于这台电脑没有管理员权限,他无法在上面安装所需的 ...
- Fork me on GitHub彩带添加方法
在博客添加GitHub彩带的方法 针对博客园博客追加如图彩带的方法 依次进入 管理 → 设置 → 页首Html代码 将如下代码粘贴在该处 <a target="_blank" ...
- nflsoj 选数1 2 3
5711 取数-1 状态表示:1维 集合:前 \(i\) 个数里面所有的选法和 属性:所有的选法和的最大值 状态计算:选或不选 选:\(f(i-1)+a_i\) 不选:\(f(i-1)\) #incl ...
- vivo 容器集群监控系统优化之道
作者:vivo 互联网容器团队 - Han Rucheng 本文介绍了vivo容器团队基于 Prometheus等云原生监控生态来构建的容器集群监控体系,在业务接入容器监控的过程中遇到的挑战.困难,并 ...
- 记一次weak_up函数绕过
2023 蓝帽杯CTF LovePHP 因为比赛已经结束,所以复现环境是从本地进行复现,这次比赛本来排名挺靠前的,原本总排名是60多名,赛区排名30多名,本来是以为有希望进入半决赛的,但是没想到比赛结 ...