Spire.PDF 10.1已发布。该版本增强了.NET Standard平台上从PDF到图片的转换功能。此外,还修复了一系列其他已知问题,例如打印PDF时内容显示不清晰的问题。详情请阅读以下内容。
问题修复:
Spire.XLS 14.1 已发布。本次更新在 FileFormat 枚举中增加了 XLT 、XLTX、 XLTM 文档格式,同时改善了转换工作表到图片时占用的内存量。此外,本次更新还增强了 Excel 到 PDF 和 CSV 的转换。一些已知问题也在该版本中得到修复,如了获取单元格失败的问题。详情请阅读以下内容。
新功能:
问题修复:
PDF 书签是一种导航辅助工具,它允许用户快速定位并跳转到 PDF 文档中的特定章节或页面。通过简单地点击书签,用户可以直达目标位置,无需手动滚动或搜索冗长文档中的内容。本文将介绍如何使用 Spire.PDF for Python 以编程方式添加、修改和删除 PDF 中的书签。
本教程需要 Spire.PDF for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.PDF如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.PDF for Python
Spire.PDF for Python 提供了向 PDF 文档添加书签的方法: PdfDocument.Bookmarks.Add()。您可以使用此方法为 PDF 文档创建主要书签,并使用 PdfBookmarkCollection.Add() 方法为主要书签添加子书签。此外,PdfBookmark 类还提供了其他方法来设置书签的属性,如目标位置、文本颜色和文本样式。以下是向 PDF 文档添加书签的详细步骤。
from spire.pdf.common import *
from spire.pdf import *
from spire.pdf.common import *
from spire.pdf import *
# 创建 PdfDocument 对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile("示例.pdf")
# 遍历 PDF 文件中的页面
for i in range(doc.Pages.Count):
page = doc.Pages.get_Item(i)
# 设置书签的标题和目标位置
bookmarkTitle = "书签-{0}".format(i+1)
bookmarkDest = PdfDestination(page, PointF(0.0, 0.0))
# 创建并配置书签
bookmark = doc.Bookmarks.Add(bookmarkTitle)
bookmark.Color = PdfRGBColor(Color.get_SaddleBrown())
bookmark.DisplayStyle = PdfTextStyle.Bold
bookmark.Action = PdfGoToAction(bookmarkDest)
# 创建集合以容纳子书签
bookmarkColletion = PdfBookmarkCollection(bookmark)
# 设置子书签的标题和目标位置
childBookmarkTitle = "子书签-{0}".format(i+1)
childBookmarkDest = PdfDestination(page, PointF(0.0, 100.0))
# 创建并配置子书签
childBookmark = bookmarkColletion.Add(childBookmarkTitle)
childBookmark.Color = PdfRGBColor(Color.get_Coral())
childBookmark.DisplayStyle = PdfTextStyle.Italic
childBookmark.Action = PdfGoToAction(childBookmarkDest)
# 保存 PDF 文件
outputFile = "书签.pdf"
doc.SaveToFile(outputFile)
# 关闭文档
doc.Close()
如果您需要更新现有的书签,可以使用 PdfBookmark 类的方法来重命名书签并更改其文本颜色、文本样式。以下是详细的步骤:
from spire.pdf.common import *
from spire.pdf import *
# 创建一个 PdfDocument 对象
doc = PdfDocument()
# 加载一个 PDF 文件
doc.LoadFromFile("书签.pdf")
# 获取第一个书签
bookmark = doc.Bookmarks.get_Item(0)
# 修改书签的标题
bookmark.Title = "被修改的书签"
# 设置书签的颜色
bookmark.Color = PdfRGBColor(Color.get_Black())
# 设置书签的文本样式
bookmark.DisplayStyle = PdfTextStyle.Bold
# 编辑父书签下的子书签
pBookmark = PdfBookmarkCollection(bookmark)
for i in range(bookmark.Count):
childBookmark = pBookmark.get_Item(i)
childBookmark.Color = PdfRGBColor(Color.get_Blue())
childBookmark.DisplayStyle = PdfTextStyle.Regular
# 保存 PDF 文档
outputFile = "修改书签.pdf"
# 关闭文档
doc.SaveToFile(outputFile)
Spire.PDF for Python 还提供了删除 PDF 文档中任何书签的方法。PdfDocument.Bookmarks.RemoveAt() 方法用于删除特定的主要书签,PdfDocument.Bookmarks.Clear() 方法用于删除所有书签,而 PdfBookmarkCollection.RemoveAt() 方法用于删除主要书签的特定子书签。从 PDF 文档中删除书签的详细步骤如下:
from spire.pdf.common import *
from spire.pdf import *
# 创建一个 PdfDocument 对象
doc = PdfDocument()
# 加载一个 PDF 文件
doc.LoadFromFile("书签.pdf")
# # 删除第一个书签
# doc.Bookmarks.RemoveAt(0)
# # 获取第一个书签
# bookmark = doc.Bookmarks[0]
# # 从第一个书签中删除第一个子书签
# pBookmark = PdfBookmarkCollection(bookmark)
# pBookmark.RemoveAt(0)
# 删除所有书签
doc.Bookmarks.Clear()
# 保存 PDF 文档
output = "删除所有书签.pdf"
doc.SaveToFile(output)
# 关闭文档
doc.Close()
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Doc for Java 12.1.0已发布。本次更新移除了对Spire.Pdf.jar的依赖,且将应用授权的方法更改为com.spire.doc.license.LicenseProvider.setLicenseKey(key)。此外,还新增了一系列新功能,如新增添加图片水印的方法。详情请阅读以下内容。
调整:
新功能:
Document构造中设置newEngine不再起作用,内部默认采用新引擎
HeaderType枚举
GroupedShapeCollection类
ShapeObjectTextCollection类
MailMergeData接口
EnumInterface接口
public PictureWaterMark(InputStream inputeStream,boolean washout)
public PictureWaterMark(String filename,boolean washout)
Field类中downloadImage方法
IDocOleObject接口
PointsConverter类com.spire.license.LicenseProvider -> com.spire.doc.License.LicenseProvider// 设置自定义字体
Document.setCustomFontsFolders(string filePath);
// 处理自定义字体
Document.clearCustomFontsFolders();
// 清除缓存中占用内存的系统字体缓存
Document.clearSystemFontCache();
Example code:
Document doc = new Document();
doc.loadFromFile("https://cdn.e-iceblue.cn/inputFile.docx");
doc.setCustomFontsFolders(@"d:\Fonts");
doc.saveToFile("output.pdf", FileFormat.PDF);
doc.close();
doc.dispose();com.spire.doc.FileFormat.WPS -> com.spire.doc.FileFormat.Wps
com.spire.doc.FileFormat.WPT -> com.spire.doc.FileFormat.Wpt
ComparisonLevel -> TextDiffModeComparisonLevel getLevel() -> getTextCompareLevel()
setLevel(ComparisonLevel value) -> setTextCompareLevel(TextDiffMode)
IsPasswordProtect() -> isEncrypted()
getFillEfects() -> getFillEffects()File imageFile = new File("data/E-iceblue.png");
BufferedImage bufferedImage = ImageIO.read(imageFile);
// 通过输入 BufferedImage 创建 PictureWatermark 类的新实例,并设置水印图像的缩放因子
PictureWatermark picture = new PictureWatermark(bufferedImage,false);
// 或者使用另一种创建 PictureWatermark 的方法
// PictureWatermark picture = new PictureWatermark();
// picture.setPicture(bufferedImage);
// picture.isWashout(false);
// 设置水印图片的缩放比例
picture.setScaling(250);
// 设置要应用于文档的水印
document.setWatermark(picture);// 创建一个新的 Document 实例
Document document = new Document();
// 向文档添加一个节
Section section = document.addSection();
// 将段落添加到该节并向其附加文本
section.addParagraph().appendText("Line chart.");
// 添加一个新段落到该节
Paragraph newPara = section.addParagraph();
// 将折线图形状附加到指定宽度和高度的段落
ShapeObject shape = newPara.appendChart(ChartType.Line, 500, 300);
// 从形状中获取图表对象
Chart chart = shape.getChart();
// 获取图表的标题
ChartTitle title = chart.getTitle();
// 设置图表标题的文本
title.setText("My Chart");
// 清除图表中任何现有的系列
ChartSeriesCollection seriesColl = chart.getSeries();
seriesColl.clear();
// 定义类别(X 轴值)
String[] categories = { "C1", "C2", "C3", "C4", "C5", "C6" };
// 将两个具有指定类别和 Y 轴值的系列添加到图表中
seriesColl.add("AW Series 1", categories, new double[] { 1, 2, 2.5, 4, 5, 6 });
seriesColl.add("AW Series 2", categories, new double[] { 2, 3, 3.5, 6, 6.5, 7 });
// 将文档保存为Docx格式的文件
document.saveToFile("AppendLineChart.docx", FileFormat.Docx_2016);
// 释放文档资源
document.dispose();// 创建一个新的 Document 实例
Document doc = new Document();
// 从指定文件加载文档
doc.loadFromFile(inputFile);
// 使用加载的文档创建一个FixedLayoutDocument对象
FixedLayoutDocument layoutDoc = new FixedLayoutDocument(doc);
// 创建一个StringBuilder来存储提取的文本
StringBuilder stringBuilder = new StringBuilder();
// 获取第一页的第一行并将其附加到 StringBuilder
FixedLayoutLine line = layoutDoc.getPages().get(0).getColumns().get(0).getLines().get(0);
stringBuilder.append("Line: " + line.getText() + "\r\n");
// 检索与该行关联的原始段落并将其文本附加到 StringBuilder
Paragraph para = line.getParagraph();
stringBuilder.append("Paragraph text: " + para.getText() + "\r\n");
// 检索第一页上的所有文本,包括页眉和页脚,并将其附加到 StringBuilder
String pageText = layoutDoc.getPages().get(0).getText();
stringBuilder.append(pageText + "\r\n");
// 遍历文档中的每一页并打印每页的行数
for (Object obj : layoutDoc.getPages()) {
FixedLayoutPage page = (FixedLayoutPage) obj;
LayoutCollection<LayoutElement> lines = page.getChildEntities(LayoutElementType.Line, true);
stringBuilder.append("Page " + page.getPageIndex() + " has " + lines.getCount() + " lines." + "\r\n");
}
// 对第一段的布局实体执行反向查找并将它们附加到 StringBuilder
stringBuilder.append("\r\n");
stringBuilder.append("The lines of the first paragraph:" + "\r\n");
for (Object object : layoutDoc.getLayoutEntitiesOfNode(((Section) doc.getFirstChild()).getBody().getParagraphs().get(0))) {
FixedLayoutLine paragraphLine = (FixedLayoutLine) object;
stringBuilder.append(paragraphLine.getText().trim() + "\r\n");
stringBuilder.append(paragraphLine.getRectangle().toString() + "\r\n");
stringBuilder.append("");
}
// 将提取的文本写入文件
FileWriter fileWriter = new FileWriter(new File(outputFile));
fileWriter.write(stringBuilder.toString());
fileWriter.flush();
fileWriter.close();
// 释放文档资源
doc.close();
doc.dispose();// 创建一个新的文档对象
Document document = new Document();
// 在文档中添加一个新的节
Section section = document.addSection();
// 添加一个新的段落到该节
Paragraph paragraph = section.addParagraph();
// 将图片 (SVG) 附加到段落中
paragraph.appendPicture(inputSvg);
// 将文档保存到指定的输出文件
document.saveToFile(outputFile, FileFormat.Docx_2013);
// 关闭文档
document.dispose();页面尺寸是指文档页面的大小,它决定了可打印区域的宽度和高度,对文档的整体布局和设计至关重要。不同类型的文档通常需要使用特定的页面尺寸。例如,报告和论文常使用 A4 作为页面尺寸,而报纸则需要更大的页面尺寸,如 Tabloid。调整页面尺寸可以确保文档在不同的输出或展示媒介上呈现出理想的效果。通过选择适当的页面尺寸,文档可以在打印、屏幕显示或其他形式的展示中保持合适的比例与布局,避免内容被裁剪或缩放过大而出现截断和失真的情况。在本文中,我们将演示如何使用 Python 和 Spire.Doc for Python 库调整 Word 文档的页面尺寸。
本教程需要用到 Spire.Doc for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Doc如果您不确定如何安装,请参考此教程:如何在 Windows 中安装 Spire.Doc for Python
使用 Spire.Doc for Python,你可以轻松地将 Word 文档的页面尺寸调整为各种标准页面尺寸,包括 A3、A4、A5、A6、B4、B5、B6 等。以下是使用 Spire.Doc for Python 将 Word 文档的页面尺寸调整为 A4 的步骤:
from spire.doc import *
from spire.doc.common import *
# 创建Document类的实例
doc = Document()
# 加载Word文档
doc.LoadFromFile("示例.docx")
# 遍历文档中的各个节
for i in range(doc.Sections.Count):
section = doc.Sections.get_Item(i)
# 将每个节的页面尺寸更改为A4纸张尺寸
section.PageSetup.PageSize = PageSize.A4()
# 保存结果文档
doc.SaveToFile("标准尺寸.docx", FileFormat.Docx2016)
doc.Close()
如果你想将文档打印在非标准尺寸的纸张上,你可以自定义文档的页面尺寸,使其与纸张的尺寸相匹配。以下是使用 Spire.Doc for Python 将 Word 文档页面尺寸调整为自定义页面尺寸的步骤:
from spire.doc import *
from spire.doc.common import *
# 创建Document类的实例
doc = Document()
# 加载Word文档
doc.LoadFromFile("示例.docx")
# 创建一个SizeF类的实例,并设置自定义尺寸
customSize = SizeF(600.0, 800.0)
# 遍历文档中的各个节
for i in range(doc.Sections.Count):
section = doc.Sections.get_Item(i)
# 将每个节的页面尺寸更改为自定义页面尺寸
section.PageSetup.PageSize = customSize
# 保存结果文档
doc.SaveToFile("自定义尺寸.docx", FileFormat.Docx2016)
doc.Close()
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
PDF 文档页眉页脚可以包含诸多信息,例如公司标识、徽标、日期、页码、联系信息、文章标题、作者姓名、案件编号、版权声明等等,PDF 文档中添加含有此类信息的页眉和页脚可使其更具可读性和专业性,同时当读者阅读长篇文档时,也可以提供导航和定位功能,简化阅读体验。总的来说,添加页眉和页脚是一种优化 PDF 文档的方法,有助于满足特定需求并增强文档的可用性。本文将介绍如何使用 Spire.PDF for Python 在现成 PDF 中添加页眉页脚。
本教程需要 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 提供 PdfCanvas.DrawString(),PdfCanvas.DrawImage(),PdfCanvas.DrawLine() 等方法在页面的指定区域添加图片、文字或横线等内容,同时也支持创建 PdfCompositeField,PdfCreationDateField,PdfPageNumberField,PdfSectionNumberField 等字段域,添加页码,创建时间,章节等动态数据至 PDF 的页面。
以下步骤是使用 Spire.PDF for Python 在现成 PDF 文档中添加文本、图片和创建日期内容的页眉:
from spire.pdf.common import *
from spire.pdf import *
# 创建 PdfDocument 对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile("输入文档.pdf")
# 加载页眉图片
headerImage = PdfImage.FromFile("header.png")
# 获取图片point宽度值
width = headerImage.Width
unitCvtr = PdfUnitConvertor()
pointWidth = unitCvtr.ConvertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point)
# 设置字体,画刷和画笔
font = PdfTrueTypeFont("宋体", 12.0, PdfFontStyle.Bold, True)
brush = PdfBrushes.get_Purple()
pen = PdfPen(brush, 1.0)
# 设置页眉文本
headerText = "成都冰蓝科技有限公司\nwww.e-iceblue.cn"
# 设置创建时间字段格式
creationDateField = PdfCreationDateField(font, brush)
creationDateField.DateFormatString = "yyyy-MM-dd"
# 创建组合字段
compositeField = PdfCompositeField(font, brush, "创建时间: {0}", [creationDateField])
compositeField.Location=PointF(55.0,48.0)
graphicsWidget = PdfGraphicsWidget(compositeField)
# 循环遍历文档中的每一页
for i in range(doc.Pages.Count):
# 获取指定页面
page = doc.Pages.get_Item(i)
# 在指定位置绘制页眉图片
page.Canvas.DrawImage(headerImage, page.ActualSize.Width - pointWidth - 55.0, 20.0)
# 在指定位置绘制页眉文本
page.Canvas.DrawString(headerText, font, brush, 55.0, 20.0)
# 绘制页眉线条
page.Canvas.DrawLine(pen, 55.0, 70.0, page.ActualSize.Width - 55.0, 70.0)
# 绘制组合字段
graphicsWidget.Draw(page.Canvas)
# 保存文件
doc.SaveToFile("结果.pdf")
# 释放文档对象
doc.Dispose()
以下步骤是使用 Spire.PDF for Python 在现成 PDF 文档中添加图片和页码字段内容的页脚:
from spire.pdf.common import *
from spire.pdf import *
# 创建 PdfDocument 对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile("输入文档.pdf")
# 加载页脚图片
footerImage = PdfImage.FromFile("Footer.png")
# 设置字体,画刷
font = PdfTrueTypeFont("宋体", 12.0, PdfFontStyle.Bold, True)
brush = PdfBrushes.get_Purple()
# 创建页码,总页数字段域
pageNumberField = PdfPageNumberField()
pageCountField = PdfPageCountField()
# 创建组合字段域用于将页码和总页数合成一个字符串绘制
compositeField = PdfCompositeField(font, brush, "第 {0} 页,共 {1} 页", [pageNumberField, pageCountField])
# 设置组合字段域要绘制的位置
pageSize = doc.Pages.get_Item(0).Size
fontSize = font.MeasureString(compositeField.Text)
compositeField.Location = PointF((pageSize.Width - fontSize.Width) / 2, pageSize.Height - 45.0)
graphicsWidget = PdfGraphicsWidget(compositeField)
# 循环遍历文档中的每一页
for i in range(doc.Pages.Count):
# 获取指定页面
page = doc.Pages[i]
# 在指定位置绘制页脚图片
page.Canvas.DrawImage(footerImage, 55.0, pageSize.Height - 65.0, pageSize.Width - 110.0, 50.0)
# 在指定位置绘制页码组合字段
graphicsWidget.Draw(page.Canvas)
# 保存文件
doc.SaveToFile("结果.pdf")
# 释放文档对象
doc.Dispose()
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
在 MS Excel 中,Open XML 是 Excel 使用的基础文件格式,用于存储电子表格数据、格式、公式和其他相关信息。通过将 Excel 转换为 Open XML,开发人员能够在编程中实现对 Excel 文件的灵活控制和操作。反过来,您也可以从 Open XML 生成 Excel 文件,利用 Excel 的内置功能来执行高级数据操作。本文将介绍如何使用 Spire.XLS for Python 在 Python 中将 Excel 转换为 Open XML 或将 Open XML 转换为 Excel。
此教程需要 Spire.XLS for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.XLS如果您不确定如何安装,请参考:如何在 Windows 中安装 Spire.XLS for Python
Spire.XLS for Python 提供的 Workbook.SaveAsXml() 方法,可将 Excel 文件保存为 Open XML 格式。具体步骤如下:
from spire.xls import *
from spire.xls.common import *
# 创建Workbook对象
workbook = Workbook()
# 加载Excel文件
workbook.LoadFromFile("示例3.xlsx")
# 将 Excel 文件保存为 Open XML 文件格式
workbook.SaveAsXml("Excel转XML.xml")
workbook.Dispose()
要将 Open XML 文件转换为 Excel,需要通过 Workbook.LoadFromXml() 方法加载 Open XML 文件,然后调用 Workbook.SaveToFile() 方法将其保存为 Excel 文件。具体步骤如下:
from spire.xls import *
from spire.xls.common import *
# 创建Workbook对象
workbook = Workbook()
# 加载一个Open XML文件
workbook.LoadFromXml("Excel转XML.xml")
# 将 Open XML 文件保存为 Excel XLSX 格式
workbook.SaveToFile("XML转Excel.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
如果您收到或下载的 PDF 文件中的某些页面显示方向错误(例如侧放或倒置),通过旋转 PDF 文件可以更正页面方向,使其更易于阅读和查看。本文将介绍如何使用 Spire.PDF for Python 在 Python 中以编程方式旋转 PDF 页面。
本教程需要用到 Spire.PDF for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.PDF如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.PDF for Python
旋转是基于 90 度的增量。您可以将 PDF 页面旋转 0/90/180/270 度。以下是旋转 PDF 中特定页面的步骤:
from spire.pdf.common import *
from spire.pdf import *
# 创建一个 PdfDocument 对象用于处理 PDF 文件
pdf = PdfDocument()
# 从指定文件路径加载 PDF 文档
pdf.LoadFromFile("示例文档.pdf")
# 获取第一页的页面对象
page = pdf.Pages.get_Item(0)
# 获取当前页面的旋转角度并转换为对应的整数值
rotation = int(page.Rotation.value)
# 将旋转角度增加 180 度
rotation += int(PdfPageRotateAngle.RotateAngle180.value)
# 如果旋转角度达到 360 度(4个值),则重置为 0 度
if rotation == 4:
rotation = 0
# 设置页面的旋转角度为新的值
page.Rotation = PdfPageRotateAngle(rotation)
# 将修改后的 PDF 文档保存到文件
pdf.SaveToFile("旋转特定页面.pdf")
pdf.Close()
Spire.PDF for Python 还允许您遍历 PDF 文件中的每个页面并对它们进行旋转。以下是详细步骤:
from spire.pdf.common import *
from spire.pdf import *
# 创建一个 PdfDocument 对象用于处理 PDF 文件
pdf = PdfDocument()
# 从指定文件路径加载 PDF 文档
pdf.LoadFromFile("输入文档.pdf")
# 遍历所有页面
for i in range(pdf.Pages.Count):
# 获取当前页的页面对象
page = pdf.Pages.get_Item(i)
# 获取当前页面的旋转角度并转换为对应的整数
rotation = int(page.Rotation.value)
# 将旋转角度增加 180 度
rotation += int(PdfPageRotateAngle.RotateAngle180.value)
# 如果旋转角度达到 360 度(4个值),则重置为 0 度
if rotation == 4:
rotation = 0
# 设置页面的旋转角度为新的值
page.Rotation = PdfPageRotateAngle(rotation)
# 将修改后的 PDF 文档保存到文件
pdf.SaveToFile("旋转全部页面.pdf")
pdf.Close()如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
创建 PDF 表单不仅可以确保专业的外观,还可以让用户以电子方式填写和提交数据,简化数据录入流程。无论您是收集调查反馈、收集客户信息还是创建就业申请表,生成交互式PDF表单的能力都提供了一种无缝、有组织的方式来捕获、存储和管理宝贵的数据。本文将介绍如何使用 Spire.PDF for Python 在 Python 中创建可填写的 PDF 表单,以及如何填写 PDF 表单。
本教程需要用到 Spire.PDF for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.PDF如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.PDF for Python
Spire.PDF for Python 提供了一系列有用的类,使程序员能够在 PDF 文件中生成和修改不同类型的表单字段。包括文本框、复选框、组合框、列表框和单选按钮等。下表列出了本教程中涉及的一些类。
| 类 | 说明 |
| PdfForm | 代表 PDF 文档中的交互型表单 |
| PdfField | 代表 PDF 交互型表单的域 |
| PdfTextBoxField | 代表 PDF 表单中的文本框域 |
| PdfCheckBoxField | 代表 PDF 表单中的复选框域 |
| PdfComboBoxField | 代表 PDF 表单中的组合框域 |
| PdfListBoxField | 代表 PDF 表单中的列表框域 |
| PdfListFieldItem | 代表列表框域中的一个项目 |
| PdfRadioButtonListField | 代表 PDF 表单中的单选按钮域 |
| PdfRadioButtonListItem | 代表单选按钮的一个选项 |
| PdfButtonField | 代表 PDF 表单中的按钮域 |
要生成一个 PDF 表单,请首先创建相应字段类的实例。使用 Bounds 属性设置字段在文档中的大小和位置,最后使用 PdfFormFieldCollection.Add() 方法将其添加到 PDF 中。以下是使用 Spire.PDF for Python 在 PDF 文档中创建各种类型表单字段的主要步骤:
from spire.pdf.common import *
from spire.pdf import *
# 创建一个PdfDocument对象
doc = PdfDocument()
# 在文档中添加一个页面
page = doc.Pages.Add()
# 设置基准坐标
baseX = 100.0
baseY = 30.0
# 创建两个画刷对象,用于绘制文本和图形
brush1 = PdfSolidBrush(PdfRGBColor(Color.get_Blue()))
brush2 = PdfSolidBrush(PdfRGBColor(Color.get_Black()))
# 创建字体对象
font = PdfTrueTypeFont("宋体", 12.0, PdfFontStyle.Regular,True)
# 在页面的指定位置绘制"文本框:"文本
page.Canvas.DrawString("文本框:", font, brush1, PointF(10.0, baseY))
# 创建一个文本框域,并设置其边界和字体属性
tbxBounds = RectangleF(baseX, baseY, 150.0, 15.0)
textBox = PdfTextBoxField(page, "文本框")
textBox.Bounds = tbxBounds
textBox.Font = font
# 将文本框域添加到文档的表单域集合中
doc.Form.Fields.Add(textBox)
# 更新基准坐标
baseY += 30.0
# 绘制"复选框:"文本
page.Canvas.DrawString("复选框:", font, brush1, PointF(10.0, baseY))
# 创建第一个复选框域,并设置其边界和状态
checkboxBound1 = RectangleF(baseX, baseY, 15.0, 15.0)
checkBoxField1 = PdfCheckBoxField(page, "复选框一")
checkBoxField1.Bounds = checkboxBound1
checkBoxField1.Checked = False
# 绘制"选项一"文本
page.Canvas.DrawString("选项一", font, brush2, PointF(baseX + 20.0, baseY))
# 创建第二个复选框域,并设置其边界和状态
checkboxBound2 = RectangleF(baseX + 70.0, baseY, 15.0, 15.0)
checkBoxField2 = PdfCheckBoxField(page, "复选框二")
checkBoxField2.Bounds = checkboxBound2
checkBoxField2.Checked = False
# 绘制"选项二"文本
page.Canvas.DrawString("选项二", font, brush2, PointF(baseX + 90.0, baseY))
# 将两个复选框域添加到文档的表单域集合中
doc.Form.Fields.Add(checkBoxField1)
doc.Form.Fields.Add(checkBoxField2)
# 更新基准坐标
baseY += 30.0
# 在页面上绘制"列表框:"文本
page.Canvas.DrawString("列表框:", font, brush1, PointF(10.0, baseY))
# 创建一个列表框域,并设置其边界和字体属性
listboxBound = RectangleF(baseX, baseY, 150.0, 50.0)
listBoxField = PdfListBoxField(page, "列表框")
# 添加列表框的选项
listBoxField.Items.Add(PdfListFieldItem("列表选项一", "列表选项一"))
listBoxField.Items.Add(PdfListFieldItem("列表选项二", "列表选项二"))
listBoxField.Items.Add(PdfListFieldItem("列表选项三", "列表选项三"))
listBoxField.Bounds = listboxBound
listBoxField.Font = font
# 将列表框域添加到文档的表单域集合中
doc.Form.Fields.Add(listBoxField)
# 更新基准坐标
baseY += 60.0
# 在页面上绘制"单选按钮:"文本
page.Canvas.DrawString("单选按钮:", font, brush1, PointF(10.0, baseY))
# 创建一个单选按钮组域
radioButtonListField = PdfRadioButtonListField(page, "单选按钮")
# 创建第一个单选按钮项,并设置其边界和文本内容
radioItem1 = PdfRadioButtonListItem("按钮选项一")
radioBound1 = RectangleF(baseX, baseY, 15.0, 15.0)
radioItem1.Bounds = radioBound1
# 在页面上绘制"按钮选项一"文本
page.Canvas.DrawString("按钮选项一", font, brush2, PointF(baseX + 20.0, baseY))
# 创建第二个单选按钮项,并设置其边界和文本内容
radioItem2 = PdfRadioButtonListItem("按钮选项二")
radioBound2 = RectangleF(baseX + 100.0, baseY, 15.0, 15.0)
radioItem2.Bounds = radioBound2
# 在页面上绘制"按钮选项二"文本
page.Canvas.DrawString("按钮选项二", font, brush2, PointF(baseX + 120.0, baseY))
# 将单选按钮项添加到单选按钮组域中
radioButtonListField.Items.Add(radioItem1)
radioButtonListField.Items.Add(radioItem2)
# 将单选按钮组域添加到文档的表单域集合中
doc.Form.Fields.Add(radioButtonListField)
# 更新基准坐标
baseY += 30.0
# 在页面上绘制"组合框:"文本
page.Canvas.DrawString("组合框:", font, brush1, PointF(10.0, baseY))
# 创建一个下拉框域,并设置其边界
cmbBounds = RectangleF(baseX, baseY, 150.0, 15.0)
comboBoxField = PdfComboBoxField(page, "组合框")
comboBoxField.Bounds = cmbBounds
# 添加下拉框的选项
comboBoxField.Items.Add(PdfListFieldItem("组合框选项一", "组合框选项一"))
comboBoxField.Items.Add(PdfListFieldItem("组合框选项二", "组合框选项二"))
comboBoxField.Items.Add(PdfListFieldItem("组合框选项三", "组合框选项三"))
comboBoxField.Font = font
# 将下拉框域添加到文档的表单域集合中
doc.Form.Fields.Add(comboBoxField)
# 更新基准坐标
baseY += 30.0
# 在页面上绘制"按钮:"文本
page.Canvas.DrawString("按钮:", font, brush1, PointF(10.0, baseY))
# 创建一个按钮域,并设置其边界和文本内容
btnBounds = RectangleF(baseX, baseY, 50.0, 15.0)
buttonField = PdfButtonField(page, "按钮")
buttonField.Bounds = btnBounds
buttonField.Text = "提交"
buttonField.Font = font
# 创建一个提交动作对象,并设置提交的URL地址
submitAction = PdfSubmitAction("https://www.e-iceblue.com/getformvalues.php")
# 将提交动作关联到按钮的鼠标按下事件
buttonField.Actions.MouseDown = submitAction
# 将按钮域添加到文档的表单域集合中
doc.Form.Fields.Add(buttonField)
# 将文档保存为PDF文件
doc.SaveToFile("表单域.pdf", FileFormat.PDF)
doc.Close()
为了填写表单,需要执行以下步骤:获取 PDF 文档中的所有表单字段、根据字段的类型和名称定位特定字段,然后输入或从预定义列表中选择一个值。以下是详细的步骤:
from spire.pdf.common import *
from spire.pdf import *
# 创建 PdfDocument 对象
doc = PdfDocument()
# 从文件加载 PDF 文档
doc.LoadFromFile("表单域.pdf")
# 获取表单对象
form = doc.Form
# 创建表单部件对象
formWidget = PdfFormWidget(form)
# 获取表单部件集合对象
formWidgetCollection = formWidget.FieldsWidget
# 检查表单部件数量是否大于 0
if formWidgetCollection.Count > 0:
# 遍历表单部件集合
for i in range(formWidgetCollection.Count):
# 获取当前表单部件
field = formWidgetCollection.get_Item(i)
# 判断当前表单部件是否为文本框部件
if isinstance(field, PdfTextBoxFieldWidget):
# 将表单部件转换为文本框部件对象,并进行操作
textBoxField = field if isinstance(field, PdfTextBoxFieldWidget) else None
# 根据表单部件名称进行判断和操作
if textBoxField.Name == "姓名":
textBoxField.Text = "张三"
# 判断当前表单部件是否为列表框部件
if isinstance(field, PdfListBoxWidgetFieldWidget):
# 将表单部件转换为列表框部件对象,并进行操作
listBoxField = field if isinstance(field, PdfListBoxWidgetFieldWidget) else None
# 根据表单部件名称进行判断和操作
if listBoxField.Name == "所在专业":
index = [0]
listBoxField.SelectedIndex = index
# 判断当前表单部件是否为组合框部件
if isinstance(field, PdfComboBoxWidgetFieldWidget):
# 将表单部件转换为组合框部件对象,并进行操作
comboBoxField = field if isinstance(field, PdfComboBoxWidgetFieldWidget) else None
# 根据表单部件名称进行判断和操作
if comboBoxField.Name == "国籍":
items = [0]
comboBoxField.SelectedIndex = items
# 判断当前表单部件是否为单选按钮组部件
if isinstance(field, PdfRadioButtonListFieldWidget):
# 将表单部件转换为单选按钮组部件对象,并进行操作
radioButtonField = field if isinstance(field, PdfRadioButtonListFieldWidget) else None
# 根据表单部件名称进行判断和操作
if radioButtonField.Name == "性别":
radioButtonField.SelectedIndex = 1
# 判断当前表单部件是否为复选框部件
if isinstance(field, PdfCheckBoxWidgetFieldWidget):
# 将表单部件转换为复选框部件对象,并进行操作
checkBoxField = field if isinstance(field, PdfCheckBoxWidgetFieldWidget) else None
# 根据表单部件名称进行判断和操作
if checkBoxField.Name == "绘画":
checkBoxField.Checked = True
# 将填充后的表单保存到文件
doc.SaveToFile("填充表单域.pdf")
doc.Close()
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
设置 Word 文档中段落和文本的背景颜色可以增强文档内容的可读性。自定义背景颜色是强调关键信息、对内容进行分类和添加个性化显示的有效方法,便于用户轻松创建更精美和专业的文档。通过仔细选择和应用背景颜色,可以将文档转化为具有视觉吸引力的作品,从而有效地传达信息并吸引读者。本文将介绍如何使用 Spire.Doc for Python 设置 Word 段落或文本的背景颜色。
本教程需要使用 Spire.Doc for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Doc如果您不确定如何安装,请参考此教程:如何在 Windows 中安装 Spire.Doc for Python
通过使用 Spire.Doc for Python 用户可以获取文档中任一部分中的任一段落。获取段落后,可以将 Color 对象分配给 Paragraph.Format.BackColor 属性来为其应用背景色。下面是详细的步骤:
from spire.doc import *
from spire.doc.common import *
# 创建一个文档对象
doc = Document()
# 从文件中加载文档内容
doc.LoadFromFile("https://cdn.e-iceblue.cn/data/test.docx")
# 获取文档的第一个节(section)
section = doc.Sections.get_Item(0)
# 获取节中的第五段(paragraph)
paragraph = section.Paragraphs.get_Item(4)
# 设置段落的背景颜色为深绿色
paragraph.Format.BackColor = Color.get_DarkGreen()
# 将修改后的文档保存到指定路径
doc.SaveToFile("output/ParagraphBackground.docx")
# 关闭文档对象
doc.Close()
Spire.Doc for Python 提供 Document.FindAllString() 方法查找 Word 文档中所有出现的特定文本。获得查找结果后,用户可以通过 TextRange.CharacterFormat.TextBackgroundColor 属性为其设置背景。下面是详细的步骤:
from spire.doc import *
from spire.doc.common import *
# 创建一个文档对象
doc = Document()
# 从文件中加载文档内容
doc.LoadFromFile("https://cdn.e-iceblue.cn/output/input1.docx")
# 查找所有包含"Spire.Doc for Python"的字符串
findResults = doc.FindAllString("Spire.Doc for Python", False, False)
# 遍历查找结果
for text in findResults:
# 获取文本范围
textRange = text.GetAsOneRange(True)
# 设置文本背景颜色为浅珊瑚色
textRange.CharacterFormat.TextBackgroundColor = Color.get_LightCoral()
# 将修改后的文档保存到指定路径
doc.SaveToFile("output/TextBackground1.docx")
# 关闭文档对象
doc.Close()
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。