在应用程序中通过处理字节串(bytes)和字节数组(bytearray)来操作 pdf 文档是一种高效且灵活的方式。通过直接将 pdf 作为字节流处理,开发者可以在内存中管理文档或通过网络传输,而无需临时文件存储,从而优化空间并提高应用程序的整体性能。这种方法还可以与 web 服务和 api 无缝集成。此外,使用字节数组(bytearray)还允许开发者对 pdf 文档进行精确的字节级修改。
本文将演示如何使用 spire.pdf for python 通过 python 代码将 pdf 文档保存为字节串和字节数组,以及从字节串和字节数组中加载 pdf 文档。
安装 spire.pdf for python
本教程需要用到 spire.pdf for python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 windows 中。
pip install spire.pdf
如果您不确定如何安装,请参考:如何在 windows 中安装 spire.pdf for python
创建 pdf 文档并保存为字节串和字节数组
开发者可以使用 spire.pdf for python 提供的类和方法创建 pdf 文档,保存到 stream 对象,然后将其转换为不可变的字节串对象(bytes)或可变的字节数组对象(bytearray)。stream 对象也可用于执行字节级操作。详细步骤如下:
- 创建 pdfdocument 类的对象以创建 pdf 文档。
- 向文档添加页面,并在页面上绘制文本。
- 使用 pdfdocument.savetostream() 方法将文档保存到 stream 对象。
- 使用 stream.toarray() 方法将 stream 对象转换为字节串对象。
- 使用 bytes 对象初始化一个 bytearray 对象。
- 之后,可以使用字节流进行进一步操作,例如使用 binaryio.write() 方法将其写入文件。
- python
from spire.pdf import *
# 创建pdfdocument类的实例
pdf = pdfdocument()
# 设置文档的页面尺寸和页边距
pagesettings = pdf.pagesettings
pagesettings.size = pdfpagesize.a4()
pagesettings.margins.top = 50
pagesettings.margins.bottom = 50
pagesettings.margins.left = 40
pagesettings.margins.right = 40
# 向文档添加新页面
page = pdf.pages.add()
# 为文档内容创建字体和画刷
titlefont = pdftruetypefont("harmonyos sans sc", 16.0, pdffontstyle.bold, true)
titlebrush = pdfbrushes.get_brown()
contentfont = pdftruetypefont("harmonyos sans sc", 13.0, pdffontstyle.regular, true)
contentbrush = pdfbrushes.get_black()
# 在页面上绘制标题
titletext = "云计算简要介绍"
titlesize = titlefont.measurestring(titletext)
page.canvas.drawstring(titletext, titlefont, titlebrush, pointf(0.0, 30.0))
# 在页面上绘制正文文本
contenttext = ("云计算是一种服务模式,计算资源通过互联网按需提供。"
"它是一种基础设施即服务(iaas)、平台即服务(paas)和软件即服务(saas)模型。"
"云计算通常以订阅制的方式提供,用户按月、按年或其他方式为云资源的使用付费。")
# 设置正文文本的字符串格式
contentformat = pdfstringformat()
contentformat.alignment = pdftextalignment.justify # 文本对齐方式为两端对齐
contentformat.linespacing = 20.0 # 设置行间距
# 创建textwidget对象,并应用字符串格式
textwidget = pdftextwidget(contenttext, contentfont, contentbrush)
textwidget.stringformat = contentformat
# 创建textlayout对象并设置布局选项
textlayout = pdftextlayout()
textlayout.layout = pdflayouttype.paginate # 设置分页布局
textlayout.break = pdflayoutbreaktype.fitpage # 设置适合页面的换页模式
# 在页面上绘制textwidget
rect = rectanglef(pointf(0.0, titlesize.height 50.0), page.canvas.clientsize)
textwidget.draw(page, rect, textlayout)
# 将pdf文档保存到stream对象
pdfstream = stream()
pdf.savetostream(pdfstream)
# 将stream对象转换为字节串(bytes)对象
pdfbytes = pdfstream.toarray()
# 将stream对象转换为字节数组(bytearray)对象
pdfbytearray = bytearray(pdfstream.toarray())
# 将字节串对象和字节数组对象写入文件
with open("output/pdfbytes.pdf", "wb") as f:
f.write(pdfbytes)
with open("output/pdfbytearray.pdf", "wb") as f:
f.write(pdfbytearray)
从字节流中加载 pdf 文档
开发者可以使用 pdf 文件的字节串创建 stream 对象,并通过 pdfdocument.loadfromstream() 方法将其加载为 pdf 文档,从而对文档执行各种操作,如读取、修改和转换等。以下是步骤示例:
- 使用 pdf 文件创建一个字节串对象。
- 使用字节串创建 stream 对象。
- 使用 pdfdocument.loadfromstream() 方法将 stream 对象加载为 pdf 文档。
- 提取文档第一页的文本并打印输出。
- python
from spire.pdf import *
# 从pdf文件创建字节数组
with open("示例.pdf", "rb") as f:
bytedata = f.read()
# 从字节数组创建stream对象
stream = stream(bytedata)
# 将stream对象加载为pdf文档
pdf = pdfdocument(stream)
# 获取第一页的文本
page = pdf.pages.get_item(0)
textextractor = pdftextextractor(page)
extractoptions = pdftextextractoptions()
extractoptions.isextractalltext = true # 设置为提取所有文本
text = textextractor.extracttext(extractoptions)
# 输出提取的文本
print(text)
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。