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

复制代码
相关推荐
云和数据.ChenGuang41 分钟前
光哥说Python 循环导入(Circular Import)深度解析:成因、排查与解决方案
开发语言·前端·人工智能·python·langchain
TomEval1 小时前
【测AI】第16篇:模型公平性与可解释性测试 — AI 的偏见与黑箱
人工智能·python·功能测试·ai·测试用例
田里的水稻1 小时前
FA_CNN卷积神经网络四---线性层及其拉平PyTorch
人工智能·pytorch·python·深度学习·神经网络·cnn
钱栈up1 小时前
GitHub热榜上手|Claude插件:4.3万星官方目录
python·开源·github
青春不朽5121 小时前
Python 的 list append 为什么是均摊 O(1)?拆开过度分配那张表,看容量翻倍背后的暗账
java·python·list
小羊没烦恼!2 小时前
.NET 11 Runtime Async 详解
java·运维·开发语言·javascript·python
染指11102 小时前
152.Agent-LangGraph-Command的参数
人工智能·python·langchain·agents
第404号工位3 小时前
“已彻底删除”的照片与文件到底去哪了?我用底层扇区扫描,扒出手机和电脑的幽灵数据
linux·python·架构
智购科技自动售卖机厂家3 小时前
双摄像头方案F1-score只有0.85,排查发现是上下视角的融合逻辑写反了~YH
python·单片机·嵌入式硬件·算法·eclipse
田里的水稻3 小时前
FA_CNN卷积神经网络二---PyTorch
人工智能·pytorch·python·深度学习·cnn