Spire.Doc 12.5.5 已发布。本次更新新增支持在转换 Word 到 PDF 时保留 FormField 和 SDT 数据以及设置三种批注展示模式。该版本还增强了 Word 到 HTML 和 HTML 到 Word 的转换功能。此外,一些已知问题也在该版本中成功修复,如添加水印到 Word 文档并保存到 PDF 后页眉丢失的问题。详情请阅读以下内容。
新功能:
ToPdfParameterList.PreserveFormFields = true;Document.LayoutOptions.CommentDisplayMode = CommentDisplayMode.ShowInAnnotations;问题修复:
在 PowerPoint 中,适当调整幻灯片大小有助于使文档看起来更专业。在不同的场合进行演示时,根据投影仪或屏幕的宽高比调整幻灯片尺寸能确保所有观众都能获得最佳的观看体验,从而提高参与度。在本文中,您将学习如何使用 Spire.Presentation for Python 在 Python 中更改 PowerPoint 演示文稿的幻灯片大小。
本教程需要 Spire.Presentation for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Presentation
如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.Presentation for Python
Spire.Presentation for Python 提供了 Presentation.SlideSize.Type 属性以将幻灯片大小设置或更改为预设大小。以下是详细步骤:
from spire.presentation import *
# 创建一个Presentation对象
presentation = Presentation()
# 加载PowerPoint演示文档
presentation.LoadFromFile("示例.pptx")
# 设置或更改幻灯片尺寸
presentation.SlideSize.Type = SlideSizeType.Screen4x3
# 保存文档
presentation.SaveToFile("修改尺寸.pptx", FileFormat.Pptx2016)
# 释放资源
presentation.Dispose()

自定义幻灯片大小需要先将幻灯片大小类型更改为“自定义”,然后才能通过 Presentation.SlideSize.Size 属性给演示文稿设置所需的大小。以下是详细的步骤。
from spire.presentation import *
# 创建一个Presentation对象
presentation = Presentation()
# 加载PowerPoint演示文档
presentation.LoadFromFile("示例.pptx")
# 将幻灯片大小类型更改为自定义
presentation.SlideSize.Type = SlideSizeType.Custom
# 设置幻灯片大小
presentation.SlideSize.Size = SizeF(900.0,600.0)
# 保存文档
presentation.SaveToFile("自定义尺寸.pptx", FileFormat.Pptx2016)
# 释放资源
presentation.Dispose()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
簇状柱形图和堆积柱形图是柱形图的两种变体。簇状柱形图可以更轻松地比较不同类别的值,而堆积柱形图则显示不同类别的总值以及每个组成部分的比例。在本文中,你将学习如何使用 Spire.Doc for .NET 和 C# 在 Word 文档中创建簇状柱形图和堆积柱形图。
首先,您需要将 Spire.Doc for.NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从此链接下载,也可以通过 NuGet 安装。
PM> Install-Package Spire.Doc
要将图表添加到 Word 文档,请使用 Paragraph.AppendChart(ChartType chartType, float width, float height) 方法。ChartType 枚举包含 MS Word 中预定义的各种图表类型。以下是使用 Spire.Doc for .NET 在 Word 中添加簇状柱形图的步骤:
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields.Shapes.Charts;
using Spire.Doc.Fields;
namespace ColumnChart
{
internal class Program
{
static void Main(string[] args)
{
//创建 Document 对象
Document document = new Document();
//添加一个 Section
Section section = document.AddSection();
//添加一个 Paragraph
Paragraph paragraph = section.AddParagraph();
//添加一个柱状图
ShapeObject shape = paragraph.AppendChart(ChartType.Column, 450, 250);
//获取图表
Chart chart = shape.Chart;
//清除默认数据
chart.Series.Clear();
//向图表添加一个数据系列,包括系列名称、类别名称和系列值
chart.Series.Add("6月",
new[] { "古巴", "墨西哥", "法国", "德国" },
new double[] { 5000, 8000, 9000, 8500 });
//添加另一个数据系列
chart.Series.Add("7月",
new[] { "古巴", "墨西哥", "法国", "德国" },
new double[] { 3000, 5000, 7000, 6000 });
//设置图表标题
chart.Title.Text = "销售额";
//设置 Y 轴数字格式
chart.AxisY.NumberFormat.FormatCode = "#,##0";
//设置图例位置
chart.Legend.Position = LegendPosition.Bottom;
//保存到文件
document.SaveToFile("簇状柱形图.docx", FileFormat.Docx2019);
}
}
}

创建堆积柱形图的方式与创建簇状柱形图非常相似。唯一的区别是你需要将图表类型从 Column 更改为 ColumnStacked。
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields.Shapes.Charts;
using Spire.Doc.Fields;
namespace StackedColumnChart
{
internal class Program
{
static void Main(string[] args)
{
//创建 Document 对象
Document document = new Document();
//添加一个 Section
Section section = document.AddSection();
//添加一个 Paragraph
Paragraph paragraph = section.AddParagraph();
//添加一个堆积柱状图
ShapeObject shape = paragraph.AppendChart(ChartType.ColumnStacked, 450, 250);
//获取图表
Chart chart = shape.Chart;
//清除默认数据
chart.Series.Clear();
//向图表添加一个数据系列,包括系列名称、类别名称和系列值
chart.Series.Add("A店",
new[] { "可口可乐", "百事可乐", "七喜", "劲仔" },
new double[] { 2500, 4600, 2800, 5100 });
//添加另一个数据系列
chart.Series.Add("B店",
new[] { "可口可乐", "百事可乐", "七喜", "劲仔" },
new double[] { 4100, 3200, 3800, 4000 });
//设置图表标题
chart.Title.Text = "碳酸饮料销售额";
//设置 Y 轴数字格式
chart.AxisY.NumberFormat.FormatCode = "#,##0";
//设置图例位置
chart.Legend.Position = LegendPosition.Bottom;
//保存到文件
document.SaveToFile("堆积柱形图.docx", FileFormat.Docx2019);
}
}
}

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
在创建 PowerPoint 演示文稿时,我们经常需要在幻灯片中高亮显示某些关键的文本内容。这样可以帮助观众更好地集中注意力,更好地理解演示的重点。在本文中,我们将演示如何使用 Spire.Presentation for Python 和 Python 在 PowerPoint 中查找并高亮显示特定文本。
本教程需要 Spire.Presentation for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Presentation
如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.Presentation for Python
Spire.Presentation for Python 提供了 IAutoShape.TextFrame.HighLightText(text: str, color: Color, options: TextHighLightingOptions) 方法,用于查找并高亮显示 PowerPoint 幻灯片形状中的特定文本。详细步骤如下:
from spire.presentation.common import *
from spire.presentation import *
# 指定输入和输出文件路径
input_file = "示例.pptx"
output_file = "高亮文本.pptx"
# 创建Presentation 类的实例
ppt = Presentation()
# 加载PowerPoint 演示文稿
ppt.LoadFromFile(input_file)
# 指定要高亮显示的文本
text_to_highlight = "Spire.Presentation"
# 指定高亮颜色
highlight_color = Color.get_Yellow()
# 创建TextHighLightingOptions 类的实例
options = TextHighLightingOptions()
# 设置高亮选项
# 全词匹配
options.WholeWordsOnly = True
# 区分大小写
options.CaseSensitive = True
# 遍历演示文稿中的幻灯片
for slide in ppt.Slides:
# 遍历每张幻灯片上的形状
for shape in slide.Shapes:
# 检查形状是否为 IAutoShape 类型
if isinstance (shape, IAutoShape):
# 将形状转换为 IAutoShape 对象
auto_shape = IAutoShape(shape)
# 在形状内查找并高亮显示指定的文本
auto_shape.TextFrame.HighLightText(text_to_highlight, highlight_color, options)
# 将结果演示文稿保存为一个新的 PPTX 文件
ppt.SaveToFile(output_file, FileFormat.Pptx2013)
ppt.Dispose()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.XLS 14.5.3 现已发布。该版本支持添加图片到首页页眉页脚,获取当前活动选区的范围,以及根据正则表达式查找单元格。此外,一些在转换 Excel 到PDF或图片、将数据导入 Excel 以及自适应列宽时出现的问题也已成功被修复。新功能及问题修复详情如下。
新功能:
//载入图片
System.Drawing.Image bufferedImage = System.Drawing.Image.FromFile(inputFile_Img);
//设置页眉页脚图片
wb.Worksheets[0].PageSetup.FirstLeftHeaderImage = bufferedImage;
wb.Worksheets[0].PageSetup.FirstLeftFooterImage = bufferedImage;
wb.Worksheets[1].PageSetup.FirstCenterHeaderImage = bufferedImage;
wb.Worksheets[1].PageSetup.FirstCenterFooterImage = bufferedImage;
wb.Worksheets[2].PageSetup.FirstRightHeaderImage = bufferedImage;
wb.Worksheets[2].PageSetup.FirstRightFooterImage = bufferedImage;Worksheet worksheet = workbook.Worksheets[0];
string Information = null;
foreach (CellRange range in worksheet.ActiveSelectionRange)
{
Information += "RangeAddressLocal:"+ range.RangeAddressLocal+"\r\n";
Information += "ColumnCount:" + range.ColumnCount + "\r\n";
Information += "ColumnWidth:" + range.ColumnWidth + "\r\n";
Information += "Column:" + range.Column + "\r\n";
Information += "RowCount:" + range.RowCount+ "\r\n";
Information += "RowHeight:" + range.RowHeight + "\r\n";
Information += "Row:" + range.Row + "\r\n";
}
File.WriteAllText(outputFile_TXT,Information);CellRange[] ranges = sheet.FindAllString(".*test.", false, false, true);//正则表达式查找问题修复:
Word 文档利用内容控件技术,为文档内容赋予了动态生命力,让用户在编辑与管理文档时享有更高的灵活性与便捷性。这些控件作为交互式元素,赋能用户在保持文档框架完整无损的前提下,自由地增添、移除或是调整指定内容区块,从而实现文档内容的敏捷迭代与个性化定制。本文将介绍如何使用 Spire.Doc for Python 在 Python 项目中修改 Word 文档中的内容控件。
本教程需要用到 Spire.Doc for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Doc
如果您不确定如何安装,请参考:如何在 Windows 中安装 Spire.Doc for Python
在 Spire.Doc 中,正文内容控件的对象类型是 StructureDocumentTag。需要进入 Section.Body.ChildObjects 对象集合,遍历查找到类型为 StructureDocumentTag 的对象,然后对其进行修改。以下是详细的步骤:
from spire.doc import *
from spire.doc.common import *
# 创建一个新的文档对象
doc = Document()
# 从文件加载文档内容
doc.LoadFromFile("示例1.docx")
# 获取文档正文部分
body = doc.Sections.get_Item(0).Body
# 创建段落列表和表格列表
paragraphs = []
tables = []
for i in range(body.ChildObjects.Count):
obj = body.ChildObjects.get_Item(i)
# 如果是StructureDocumentTag对象
if obj.DocumentObjectType == DocumentObjectType.StructureDocumentTag:
sdt = (StructureDocumentTag)(obj)
# 如果标签为"c1"或者别名为"c1"
if sdt.SDTProperties.Tag == "c1" or sdt.SDTProperties.Alias == "c1":
for j in range(sdt.ChildObjects.Count):
child_obj = sdt.ChildObjects.get_Item(j)
# 如果是段落对象
if child_obj.DocumentObjectType == DocumentObjectType.Paragraph:
paragraphs.append(child_obj)
# 如果是表格对象
elif child_obj.DocumentObjectType == DocumentObjectType.Table:
tables.append(child_obj)
# 修改第一个段落的文本内容
if paragraphs:
(Paragraph)(paragraphs[0]).Text = "成都冰蓝科技有限公司的 Spire 系列文档处理组件均由中国本土团队研发,不依赖第三方软件。"
if tables:
# 重置第一个表格的单元格为5行4列
(Table)(tables[0]).ResetCells(5, 4)
# 将修改后的文档保存到文件
doc.SaveToFile("修改Word文档正文中的内容控件.docx", FileFormat.Docx2016)
# 释放文档资源
doc.Close()
doc.Dispose()

在 Spire.Doc 中,段落中的内容控件对象类型是 StructureDocumentTagInline。通过遍历 Paragraph.ChildObjects 的对象集合,查找到类型为 StructureDocumentTagInline 的对象,然后对其进行修改。以下是详细的步骤:
from spire.doc import *
from spire.doc.common import *
# 创建一个新的Document对象
doc = Document()
# 从文件加载文档内容
doc.LoadFromFile("示例2.docx")
# 获取文档的主体部分
body = doc.Sections.get_Item(0).Body
# 获取主体部分的第一个段落
paragraph = body.Paragraphs.get_Item(0)
# 遍历段落中的子对象
for i in range(paragraph.ChildObjects.Count):
obj = paragraph.ChildObjects.get_Item(i)
# 检查子对象是否为StructureDocumentTagInline类型
if obj.DocumentObjectType == DocumentObjectType.StructureDocumentTagInline:
# 将子对象转换为StructureDocumentTagInline类型
structure_document_tag_inline = (StructureDocumentTagInline)(obj)
# 检查文档标记的Tag或Alias属性是否为"text1"
if structure_document_tag_inline.SDTProperties.Tag == "text1":
# 遍历StructureDocumentTagInline对象里的子对象
for j in range(structure_document_tag_inline.ChildObjects.Count):
obj2 = structure_document_tag_inline.ChildObjects.get_Item(j)
# 检查子对象是否为TextRange对象
if obj2.DocumentObjectType == DocumentObjectType.TextRange:
# 将子对象转换为TextRange类型
range = (TextRange)(obj2)
# 设置文本内容为指定内容
range.Text = "Word97-2003、Word2007、Word2010、Word2013、Word2016以及Word2019"
# 检查文档标记的Tag或Alias属性是否为"logo1"
if structure_document_tag_inline.SDTProperties.Tag == "logo1":
# 遍历StructureDocumentTagInline对象里的子对象
for j in range(structure_document_tag_inline.ChildObjects.Count):
obj2 = structure_document_tag_inline.ChildObjects.get_Item(j)
# 检查子对象是否为图片
if obj2.DocumentObjectType == DocumentObjectType.Picture:
# 将子对象转换为DocPicture类型
doc_picture = (DocPicture)(obj2)
# 加载指定图片
doc_picture.LoadImage("https://cdn.e-iceblue.cn/DOC-Python.png")
# 设置图片宽度和高度
doc_picture.Width = 100
doc_picture.Height = 100
# 将修改后的文档保存为新的文件
doc.SaveToFile("修改Word文档的段落中的内容控件.docx", FileFormat.Docx2016)
# 释放Document对象的资源
doc.Close()
doc.Dispose()

在 Spire.Doc 中,表格行内容控件对象类型是 StructureDocumentTagRow。需要遍历 Table.ChildObjects 的子对象集合,查找到类型为 StructureDocumentTagRow 的对象,然后对其进行修改。以下是详细的步骤:
from spire.doc import *
from spire.doc.common import *
# 创建一个新的文档对象
doc = Document()
# 从文件加载文档
doc.LoadFromFile("示例3.docx")
# 获取文档正文部分
body = doc.Sections.get_Item(0).Body
# 获取第一个表格
table = body.Tables.get_Item(0)
# 遍历表格中的子对象
for i in range(table.ChildObjects.Count):
obj = table.ChildObjects.get_Item(i)
# 判断子对象是否为StructureDocumentTagRow类型
if obj.DocumentObjectType == DocumentObjectType.StructureDocumentTagRow:
# 将子对象转换为StructureDocumentTagRow对象
structureDocumentTagRow = (StructureDocumentTagRow)(obj)
# 检查StructureDocumentTagRow的Tag或Alias属性是否为"row1"
if structureDocumentTagRow.SDTProperties.Tag == "row1":
# 清空单元格中的段落
structureDocumentTagRow.Cells.get_Item(0).Paragraphs.Clear()
# 在单元格中添加一个段落,并设置文本
textRange = structureDocumentTagRow.Cells.get_Item(0).AddParagraph().AppendText("艺术")
textRange.CharacterFormat.TextColor = Color.get_Blue()
# 将修改后的文档保存到文件
doc.SaveToFile("修改表格行内容控件.docx", FileFormat.Docx2016)
# 释放文档资源
doc.Close()
doc.Dispose()

在 Spire.Doc 中,表格单元格内容控件对象类型是 StructureDocumentTagCell。需要遍历 TableRow.ChildObjects 的子对象集合,查找到类型为 StructureDocumentTagCell 的对象,然后对其进行操作。以下是详细的步骤:
from spire.doc import *
from spire.doc.common import *
# 创建一个新的文档对象
doc = Document()
# 从文件加载文档
doc.LoadFromFile("示例4.docx")
# 获取文档的正文部分
body = doc.Sections.get_Item(0).Body
# 获取文档中的第一个表格
table = body.Tables.get_Item(0)
# 遍历表格的行
for i in range(table.Rows.Count):
row = table.Rows.get_Item(i)
# 遍历每行中的子对象
for j in range(row.ChildObjects.Count):
obj = row.ChildObjects.get_Item(j)
# 检查该子对象是否为StructureDocumentTagCell
if obj.DocumentObjectType == DocumentObjectType.StructureDocumentTagCell:
# 将子对象转换为StructureDocumentTagCell类型
structureDocumentTagCell = (StructureDocumentTagCell)(obj)
# 检查structureDocumentTagCell的Tag或Alias属性是否为"cell1"
if structureDocumentTagCell.SDTProperties.Tag == "cell1":
# 清空单元格中的段落
structureDocumentTagCell.Paragraphs.Clear()
# 添加一个新段落,并在其中添加文本
textRange = structureDocumentTagCell.AddParagraph().AppendText("92")
textRange.CharacterFormat.TextColor = Color.get_Blue()
# 将修改后的文档保存为新的文件
doc.SaveToFile("修改表格单元格内容控件.docx", FileFormat.Docx2016)
# 释放文档对象
doc.Close()
doc.Dispose()

这个案例展示的是修改在表格单元格的段落中的内容控件。需要先进入单元格中的段落集合 TableCell.Pagragraphs,然后遍历每一个段落对象的子对象集合 Paragraph.ChildObjects,查找到类型为 StructureDocumentTagInline 的对象,然后对其进行修改。以下是详细的步骤:
from spire.doc import *
from spire.doc.common import *
# 创建一个新的Document对象
doc = Document()
# 从文件加载文档内容
doc.LoadFromFile("示例5.docx")
# 获取文档的主体部分
body = doc.Sections.get_Item(0).Body
# 获取第一个表格
table = body.Tables.get_Item(0)
# 遍历表格的行
for r in range(table.Rows.Count):
row = table.Rows.get_Item(r)
for c in range(row.Cells.Count):
cell = row.Cells.get_Item(c)
for p in range(cell.Paragraphs.Count):
paragraph = cell.Paragraphs.get_Item(p)
for i in range(paragraph.ChildObjects.Count):
obj = paragraph.ChildObjects.get_Item(i)
# 检查子对象是否为StructureDocumentTagInline类型
if obj.DocumentObjectType == DocumentObjectType.StructureDocumentTagInline:
# 将子对象转换为StructureDocumentTagInline类型
structure_document_tag_inline = (StructureDocumentTagInline)(obj)
# 检查文档标记的Tag或Alias属性是否为"test1"
if structure_document_tag_inline.SDTProperties.Tag == "test1":
# 遍历StructureDocumentTagInline对象里的子对象
for j in range(structure_document_tag_inline.ChildObjects.Count):
obj2 = structure_document_tag_inline.ChildObjects.get_Item(j)
# 检查子对象是否为TextRange对象
if obj2.DocumentObjectType == DocumentObjectType.TextRange:
# 将子对象转换为TextRange类型
textRange = (TextRange)(obj2)
# 设置文本内容
textRange.Text = "89"
# 设置文本颜色
textRange.CharacterFormat.TextColor = Color.get_Blue()
# 将修改后的文档保存为新文件
doc.SaveToFile("修改表格单元格的段落中的文本内容控件.docx", FileFormat.Docx2016)
#释放Document对象资源
doc.Close()
doc.Dispose()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
创建 Word 文档的目录有助于提升文档的可导航性和易读性。它如同文档的导航指南,使得读者能迅速概览文档结构,把握内容框架。帮助用户可以轻松跳转至文档内的任意章节,尤其对于长篇报告、论文或手册极为有用。这不仅节省了读者定位信息的时间,也增强了文档的专业性和读者的使用体验。此外,目录便于维护更新,文档结构调整后可快速更新目录以反映最新内容布局,保证文档的连贯性和准确性。本文将介绍如何使用 Spire.Doc for Python 在 Python 项目中给新建的 Word 文档创建目录。
本教程需要用到 Spire.Doc for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Doc
如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.Doc for Python
利用标题样式创建目录是一种在 Word 文档中默认自动生成目录的方法,通过使用不同级别的标题样式来标识文档中的章节和子章节,然后利用 Word 的目录功能自动生成目录内容。以下是详细的步骤:
from spire.doc import *
from spire.doc.common import *
# 创建一个新的文档对象
doc = Document()
# 在文档中添加一个节
section = doc.AddSection()
# 添加目录段落
TOCparagraph = section.AddParagraph()
TOCparagraph.AppendTOC(1, 3)
# 创建字符格式对象并设置字体
characterFormat1 = CharacterFormat(doc)
characterFormat1.FontName = "微软雅黑"
# 创建另一个字符格式对象并设置字体、字体大小
characterFormat2 = CharacterFormat(doc)
characterFormat2.FontName = "微软雅黑"
characterFormat2.FontSize = 12
# 添加标题1样式的段落
paragraph = section.Body.AddParagraph()
paragraph.ApplyStyle(BuiltinStyle.Heading1)
# 添加文本并应用字符格式
textRange1 = paragraph.AppendText("概述")
textRange1.ApplyCharacterFormat(characterFormat1)
# 添加普通内容
paragraph = section.Body.AddParagraph()
textRange2 = paragraph.AppendText("Spire.Doc for Python 是一款专业的 Python Word 开发组件,开发人员可以使用它轻松将 Word 文档的创建、读取、编辑和转换等功能集成到自己的 Python 应用程序中。作为一款完全独立的组件,Spire.Doc for Python 的运行环境无需安装 Microsoft Word。同时兼容大部分国产操作系统,能够在中标麒麟和中科方德等国产操作系统中正常运行。")
textRange2.ApplyCharacterFormat(characterFormat2)
# 添加标题1样式的段落
paragraph = section.Body.AddParagraph()
paragraph.ApplyStyle(BuiltinStyle.Heading1)
textRange1 = paragraph.AppendText("主要功能")
textRange1.ApplyCharacterFormat(characterFormat1)
# 添加标题2样式的段落
paragraph = section.Body.AddParagraph()
paragraph.ApplyStyle(BuiltinStyle.Heading2)
textRange1 = paragraph.AppendText("仅需 Spire.Doc,无需 Microsoft Office Automation")
textRange1.ApplyCharacterFormat(characterFormat1)
# 添加普通内容
paragraph = section.Body.AddParagraph()
textRange2 = paragraph.AppendText("Spire.Doc for Python 是一个完全独立的 .NET Word 类库,它所运行的系统无需安装 Microsoft Office。Spire.Doc for Python 和 Microsoft Word Automation 相比,优点在于稳定性高,运行速度快和可扩展性强。")
textRange2.ApplyCharacterFormat(characterFormat2)
# 添加标题3样式的段落
paragraph = section.Body.AddParagraph()
paragraph.ApplyStyle(BuiltinStyle.Heading3)
textRange1 = paragraph.AppendText("Word 版本")
textRange1.ApplyCharacterFormat(characterFormat1)
paragraph = section.Body.AddParagraph()
textRange2 = paragraph.AppendText("Word97-03 Word2007 Word2010 Word2013 Word2016 Word2019")
textRange2.ApplyCharacterFormat(characterFormat2)
# 添加标题2样式的段落
paragraph = section.Body.AddParagraph()
paragraph.ApplyStyle(BuiltinStyle.Heading2)
textRange1 = paragraph.AppendText("高质量的文档转换")
textRange1.ApplyCharacterFormat(characterFormat1)
# 添加普通内容
paragraph = section.Body.AddParagraph()
textRange2 = paragraph.AppendText("Spire.Doc for Python 能帮助用户将 Word 文件保存在流中,还支持将 Word 文件与 XML、RTF、EMF、TXT、XPS、EPUB、HTML、SVG 和 ODT 等格式文件之间的双向转换。同时,它还支持将 Word 文件转换为 PDF 文件和 OFD,HTML 文件转换为图像文件。")
textRange2.ApplyCharacterFormat(characterFormat2)
# 添加标题2样式的段落
paragraph = section.Body.AddParagraph()
paragraph.ApplyStyle(BuiltinStyle.Heading2)
extRange1 = paragraph.AppendText("多样化的 Word 文档功能")
textRange1.ApplyCharacterFormat(characterFormat1)
# 添加普通内容
paragraph = section.Body.AddParagraph()
textRange2 = paragraph.AppendText("Spire.Doc for Python 的一个常用功能就是动态创建一个全新的 Word 文档。并支持几乎所有的 Word 文档元素,它们主要包括页面、节、页眉、页脚、数字签名、脚注、尾注、段落、项目符号和编号、表格、文本、域、超链接、书签、注释、图片、样式、背景设置、打印功能、文档设置和文档保护。同时,也支持形状、文本框、图片、OLE 对象、公式和内容控件。")
textRange2.ApplyCharacterFormat(characterFormat2)
# 更新目录
doc.UpdateTableOfContents()
# 保存文档
doc.SaveToFile("利用标题样式创建目录.docx", FileFormat.Docx2016)
# 释放资源
doc.Dispose()

在 Word 文档中,利用大纲层级样式也可以创建目录。可以使用 ParagraphFormat.OutlineLevel 属性来为段落指定在大纲中的层级样式。然后,通过 TableOfContent.SetTOCLevelStyle() 方法将这些大纲层级样式应用到创建目录的规则中。以下是详细的步骤:
from spire.doc import *
from spire.doc.common import *
# 创建一个新的文档对象
doc = Document()
# 在文档中添加一个节
section = doc.AddSection()
# 定义大纲级别1
titleStyle1 = ParagraphStyle(doc)
titleStyle1.Name = "T1S"
titleStyle1.ParagraphFormat.OutlineLevel = OutlineLevel.Level1
titleStyle1.CharacterFormat.Bold = True
titleStyle1.CharacterFormat.FontName = "微软雅黑"
titleStyle1.CharacterFormat.FontSize = 18
titleStyle1.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left
doc.Styles.Add(titleStyle1)
# 定义大纲级别2
titleStyle2 = ParagraphStyle(doc)
titleStyle2.Name = "T2S"
titleStyle2.ParagraphFormat.OutlineLevel = OutlineLevel.Level2
titleStyle2.CharacterFormat.Bold = True
titleStyle2.CharacterFormat.FontName = "微软雅黑"
titleStyle2.CharacterFormat.FontSize = 16
titleStyle2.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left
doc.Styles.Add(titleStyle2)
# 定义大纲级别3
titleStyle3 = ParagraphStyle(doc)
titleStyle3.Name = "T3S"
titleStyle3.ParagraphFormat.OutlineLevel = OutlineLevel.Level3
titleStyle3.CharacterFormat.Bold = True
titleStyle3.CharacterFormat.FontName = "微软雅黑"
titleStyle3.CharacterFormat.FontSize = 14
titleStyle3.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left
doc.Styles.Add(titleStyle3)
# 添加目录段落
TOCparagraph = section.AddParagraph()
toc = TOCparagraph.AppendTOC(1, 3)
toc.UseHeadingStyles = False
toc.UseHyperlinks = True
toc.UseTableEntryFields = False
toc.RightAlignPageNumbers = True
toc.SetTOCLevelStyle(1, titleStyle1.Name)
toc.SetTOCLevelStyle(2, titleStyle2.Name)
toc.SetTOCLevelStyle(3, titleStyle3.Name)
# 定义字符格式
characterFormat = CharacterFormat(doc)
characterFormat.FontName = "微软雅黑"
characterFormat.FontSize = 12
# 添加段落并应用大纲级别样式1
paragraph = section.Body.AddParagraph()
paragraph.ApplyStyle(titleStyle1.Name)
paragraph.AppendText("概述")
# 添加段落并设置文本内容
paragraph = section.Body.AddParagraph()
textRange = paragraph.AppendText("Spire.Doc for Python 是一款专业的 Python Word 开发组件,开发人员可以使用它轻松将 Word 文档的创建、读取、编辑和转换等功能集成到自己的 Python 应用程序中。作为一款完全独立的组件,Spire.Doc for Python 的运行环境无需安装 Microsoft Word。同时兼容大部分国产操作系统,能够在中标麒麟和中科方德等国产操作系统中正常运行。")
textRange.ApplyCharacterFormat(characterFormat)
# 添加段落并应用大纲级别样式1
paragraph = section.Body.AddParagraph()
paragraph.ApplyStyle(titleStyle1.Name)
paragraph.AppendText("主要功能")
# 添加段落并应用大纲级别样式2
paragraph = section.Body.AddParagraph()
paragraph.ApplyStyle(titleStyle2.Name)
paragraph.AppendText("仅需 Spire.Doc,无需 Microsoft Office Automation")
# 添加段落并设置文本内容
paragraph = section.Body.AddParagraph()
textRange = paragraph.AppendText("Spire.Doc for Python 是一个完全独立的 .NET Word 类库,它所运行的系统无需安装 Microsoft Office。Spire.Doc for Python 和 Microsoft Word Automation 相比,优点在于稳定性高,运行速度快和可扩展性强。")
textRange.ApplyCharacterFormat(characterFormat)
# 添加段落并应用大纲级别样式3
paragraph = section.Body.AddParagraph()
paragraph.ApplyStyle(titleStyle3.Name)
paragraph.AppendText("Word 版本");
# 添加段落并设置文本内容
paragraph = section.Body.AddParagraph()
textRange = paragraph.AppendText("Word97-03 Word2007 Word2010 Word2013 Word2016 Word2019")
textRange.ApplyCharacterFormat(characterFormat)
# 添加段落并应用大纲级别样式2
paragraph = section.Body.AddParagraph()
paragraph.ApplyStyle(titleStyle2.Name)
paragraph.AppendText("高质量的文档转换")
# 添加段落并设置文本内容
paragraph = section.Body.AddParagraph()
textRange = paragraph.AppendText("Spire.Doc for Python 能帮助用户将 Word 文件保存在流中,还支持将 Word 文件与 XML、RTF、EMF、TXT、XPS、EPUB、HTML、SVG 和 ODT 等格式文件之间的双向转换。同时,它还支持将 Word 文件转换为 PDF 文件和 OFD,HTML 文件转换为图像文件。")
textRange.ApplyCharacterFormat(characterFormat)
# 添加段落并应用大纲级别样式2
paragraph = section.Body.AddParagraph()
paragraph.ApplyStyle(titleStyle2.Name)
paragraph.AppendText("多样化的 Word 文档功能")
# 添加段落并设置文本内容
paragraph = section.Body.AddParagraph()
textRange = paragraph.AppendText("Spire.Doc for Python 的一个常用功能就是动态创建一个全新的 Word 文档。并支持几乎所有的 Word 文档元素,它们主要包括页面、节、页眉、页脚、数字签名、脚注、尾注、段落、项目符号和编号、表格、文本、域、超链接、书签、注释、图片、样式、背景设置、打印功能、文档设置和文档保护。同时,也支持形状、文本框、图片、OLE 对象、公式和内容控件。")
textRange.ApplyCharacterFormat(characterFormat)
# 更新目录内容
doc.UpdateTableOfContents()
# 保存文档
doc.SaveToFile("利用大纲级别样式创建目录.docx", FileFormat.Docx2016)
# 释放资源
doc.Dispose()

使用 Spire.Doc 库,您可以利用 TableOfContent(Document, " \\h \\z \\c \"图片\"") 方法通过图片标题来创建目录。以下是详细的步骤:
from spire.doc import *
from spire.doc.common import *
# 创建一个新文档对象
doc = Document()
# 在文档中添加一个节
section = doc.AddSection()
# 创建一个图片目录对象
tocForImage = TableOfContent(doc, " \\h \\z \\c \"图片\"")
# 在节中添加一个段落
tocParagraph = section.Body.AddParagraph()
# 将图片目录对象添加到段落中
tocParagraph.Items.Add(tocForImage)
# 添加字段分隔符
tocParagraph.AppendFieldMark(FieldMarkType.FieldSeparator)
# 添加文本内容
tocParagraph.AppendText("TOC")
# 添加字段结束标记
tocParagraph.AppendFieldMark(FieldMarkType.FieldEnd)
# 在节中添加一个空白段落
section.Body.AddParagraph()
# 在节中添加一个段落
paragraph = section.Body.AddParagraph()
# 添加一个图片
docPicture = paragraph.AppendPicture("images/DOC-Python.png")
docPicture.Width = 100
docPicture.Height = 100
# 添加图片标题段落
obj = docPicture.AddCaption("图片",CaptionNumberingFormat.Number,CaptionPosition.BelowItem)
paragraph = (Paragraph)(obj)
paragraph.AppendText(" Spire.Doc for Python 产品")
paragraph.Format.AfterSpacing = 20
# 继续在节中添加段落
paragraph = section.Body.AddParagraph()
docPicture = paragraph.AppendPicture("images/PDF-Python.png")
docPicture.Width = 100
docPicture.Height = 100
obj = docPicture.AddCaption("图片",CaptionNumberingFormat.Number,CaptionPosition.BelowItem)
paragraph = (Paragraph)(obj)
paragraph.AppendText(" Spire.PDF for Python 产品")
paragraph.Format.AfterSpacing = 20
paragraph = section.Body.AddParagraph()
docPicture = paragraph.AppendPicture("images/XLS-Python.png")
docPicture.Width = 100
docPicture.Height = 100
obj = docPicture.AddCaption("图片",CaptionNumberingFormat.Number,CaptionPosition.BelowItem)
paragraph = (Paragraph)(obj)
paragraph.AppendText(" Spire.XLS for Python 产品")
paragraph.Format.AfterSpacing = 20
paragraph = section.Body.AddParagraph()
docPicture = paragraph.AppendPicture("images/PPT-Python.png")
docPicture.Width = 100
docPicture.Height = 100
obj = docPicture.AddCaption("图片",CaptionNumberingFormat.Number,CaptionPosition.BelowItem)
paragraph = (Paragraph)(obj)
paragraph.AppendText(" Spire.Presentation for Python 产品")
paragraph.Format.AfterSpacing = 20
# 更新目录
doc.UpdateTableOfContents(tocForImage)
# 将文档保存为文件
doc.SaveToFile("利用图片题注创建目录.docx", FileFormat.Docx2016)
# 释放文档对象
doc.Dispose()

同样也可以通过 TableOfContent(Document, " \\h \\z \\c \"表格\"") 方法利用表格标题来创建目录。以下是详细的步骤:
from spire.doc import *
from spire.doc.common import *
# 创建一个新文档
doc = Document()
# 在文档中添加一个节
section = doc.AddSection()
# 创建一个表格目录对象
tocForTable = TableOfContent(doc, " \\h \\z \\c \"表格\"")
# 在节中添加一个段落用于放置表格目录
tocParagraph = section.Body.AddParagraph()
tocParagraph.Items.Add(tocForTable)
tocParagraph.AppendFieldMark(FieldMarkType.FieldSeparator)
tocParagraph.AppendText("TOC")
tocParagraph.AppendFieldMark(FieldMarkType.FieldEnd)
# 在节中添加两个空白段落
section.Body.AddParagraph()
section.Body.AddParagraph()
# 在节中添加一个表格
table = section.Body.AddTable(True)
table.ResetCells(1, 3)
# 添加一个表格的标题
obj = table.AddCaption("表格", CaptionNumberingFormat.Number, CaptionPosition.BelowItem)
paragraph = (Paragraph)(obj)
paragraph.AppendText(" 一行三列")
paragraph.Format.AfterSpacing = 20
# 在节中添加一个新的表格
table = section.Body.AddTable(True)
table.ResetCells(3, 3)
# 添加第二个表格的标题
obj = table.AddCaption("表格", CaptionNumberingFormat.Number, CaptionPosition.BelowItem)
paragraph = (Paragraph)(obj)
paragraph.AppendText(" 三行三列")
paragraph.Format.AfterSpacing = 20
# 在节中添加另一个新的表格
table = section.Body.AddTable(True)
table.ResetCells(5, 3)
# 添加第三个表格的标题
obj = table.AddCaption("表格", CaptionNumberingFormat.Number, CaptionPosition.BelowItem)
paragraph = (Paragraph)(obj)
paragraph.AppendText(" 五行三列")
paragraph.Format.AfterSpacing = 20
# 更新表格目录
doc.UpdateTableOfContents(tocForTable)
# 将文档保存为指定文件
doc.SaveToFile("利用表格标题创建目录.docx", FileFormat.Docx2016)
# 释放资源
doc.Dispose()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
许多财务和会计文件,如财务报表、预算报告和交易清单等,广泛以 PDF 格式存储。这些 文件通常包含大量有价值的表格数据。通过提取这些表格数据,我们能够便捷地对其进行统计分析,并生成详尽的报告。这篇文章将介绍如何使用 Spire.PDF for Python 和 Spire.XLS for Python 提取 PDF 文档中的表格数据。
本教程需要用到 Spire.PDF for Python 和 Spire.XLS for Python。Spire.PDF for Python 用于从 PDF 表格中提取数据,Spire.XLS for Python 用于将提取的表格数据写入到 Excel 表格。
您可以通过以下 pip 命令将它轻松安装到 Windows 中:
pip install Spire.PDF
pip install Spire.XLS
如果您不清楚如何安装,请参考:
Spire.PDF for Python 提供了 PdfTableExtractor.ExtractTable(pageIndex) 方法,支持从 PDF 文档页面中获取表格。获取后,遍历表格中的行和列并使用 PdfTable.GetText(rowIndex, columnIndex) 方法即可获取每个表格单元格中的文本。具体步骤如下:
from spire.pdf.common import *
from spire.pdf import *
# 创建PdfDocument对象
doc = PdfDocument()
# 加载PDF文件
doc.LoadFromFile("示例.pdf")
# 创建用于存储表格数据的列表
builder = []
# 创建PdfTableExtractor对象
extractor = PdfTableExtractor(doc)
# 遍历PDF文件中的页面
for pageIndex in range(doc.Pages.Count):
# 从当前页面中提取表格
tableList = extractor.ExtractTable(pageIndex)
# 遍历表格
if tableList is not None and len(tableList) > 0:
for table in tableList:
# 获取当前表格的行数和列数
row = table.GetRowCount()
column = table.GetColumnCount()
# 遍历表格的行和列
for i in range(row):
for j in range(column):
# 获取当前单元格中的文本
text = table.GetText(i, j)
# 将文本添加到列表
builder.append(text + " ")
builder.append("\n")
builder.append("\n")
# 将列表的内容保存到文本文件中
with open("表格.txt", "w", encoding="utf-8") as file:
file.write("".join(builder))

获取表格单元格的文本后,你可以使用 Spire.XLS for Python 提供的 Worksheet.Range[rowIndex, columnIndex].Value 属性将其写入 Excel 工作表。具体步骤如下:
from spire.pdf import *
from spire.xls import *
# 创建PdfDocument对象
doc = PdfDocument()
# 加载PDF文件
doc.LoadFromFile("示例.pdf")
# 创建Workbook对象
workbook = Workbook()
# 清除默认工作表
workbook.Worksheets.Clear()
# 创建PdfTableExtractor对象
extractor = PdfTableExtractor(doc)
sheetNumber = 1
# 遍历PDF文件中的页面
for pageIndex in range(doc.Pages.Count):
# 从当前页面提取表格
tableList = extractor.ExtractTable(pageIndex)
# 遍历表格
if tableList is not None and len(tableList) > 0:
for table in tableList:
# 为当前表格添加一个工作表
sheet = workbook.Worksheets.Add(f"Sheet{sheetNumber}")
# 获取表格的行数和列数
row = table.GetRowCount()
column = table.GetColumnCount()
# 遍历表格的行和列
for i in range(row):
for j in range(column):
# 获取当前单元格中的文本
text = table.GetText(i, j)
# 将文本写入工作表的指定单元格
sheet.Range[i + 1, j + 1].Value = text
sheetNumber += 1
# 将工作簿保存为Excel文件
workbook.SaveToFile("表格.xlsx", FileFormat.Version2016)

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.XLS for Java 14.5.1 已发布。本次更新增强了 Excel 到 PDF 和图片的转换功能,同时修复了一些已知问题,如 XLOOKUP 公式计算不正确的问题。详情请阅读以下内容。
问题修复:
启用 Word 文档的安全选项对于保护敏感信息的安全至关重要。您可以使用密码对文档进行加密,这样未经授权的用户就无法打开文档;如果 Word 中部分内容被要求不可修改,那么你可以锁定这一部分内容并保留对其他内容的编辑权限。在本文中,您将学习如何使用 Spire.Doc for Python 在 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 提供 Document.TrackChanges 属性,用于启用 Word 文档的跟踪更改模式。具体步骤如下:
from spire.doc import *
from spire.doc.common import *
# 创建一个Document对象
doc = Document()
# 加载输入文档
doc.LoadFromFile("输入文档.docx")
# 启用文档的修订跟踪功能
doc.TrackChanges = True
# 将修改后的文档保存为"启用修订功能.docx"
doc.SaveToFile("启用修订功能.docx", FileFormat.Docx2016)
doc.Close()

接受跟踪的更改可让您将建议的修改永久纳入文档。通过使用 Spire.Doc for Python 提供的 Document.AcceptChanges() 方法,您可以轻松接受 Word 文档中的所有跟踪修改。具体步骤如下:
from spire.doc import *
from spire.doc.common import *
# 创建一个Document对象
doc = Document()
# 加载示例文档
doc.LoadFromFile("示例文档.docx")
# 检查文档是否有未接受的修订
if(doc.HasChanges):
# 接受所有修订
doc.AcceptChanges()
# 将文档保存为"接受修订.docx",使用Word 2016的DOCX格式
doc.SaveToFile("接受修订.docx", FileFormat.Docx2016)
doc.Close()

有时,建议的修改可能与您对文档的设想或要求不一致。在这种情况下,拒绝这些修改对于确保文档准确反映您的预期内容和格式选择至关重要。
Spire.Doc for Python 提供了 Document.RejectChanges() 方法,用于拒绝 Word 文档中跟踪到的更改。具体步骤如下:
from spire.doc import *
from spire.doc.common import *
# 创建一个Document对象
doc = Document()
# 加载示例文档
doc.LoadFromFile("示例文档.docx")
# 检查文档是否有未处理的修订
if(doc.HasChanges):
# 拒绝所有修订,即保持原文不变,不应用任何更改
doc.RejectChanges()
# 将处理后的文档保存为"拒绝修订.docx",并使用Word 2016的DOCX格式
doc.SaveToFile("拒绝修订.docx", FileFormat.Docx2016)
doc.Close()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。