Microsoft PowerPoint 中的 SmartArt 是一个非常有用的工具,它允许用户创建视觉吸引人的图表和图形来表达信息和概念。通过将普通文本转化为视觉上引人注目的图像,SmartArt 为观众提供了一种快速简便的方式,使他们更容易理解和记忆所呈现的信息。在本文中,我们将演示如何使用 Spire.Presentation for Python 在 Python 中创建、读取和删除 PowerPoint 中的 SmartArt。
本教程需要用到 Spire.Presentation for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Presentation如果您不确定如何安装,请参考此教程:如何在 Windows 中安装 Spire.Presentation for Python
Spire.Presentation for Python 提供了 ISlide.Shapes.AppendSmartArt() 方法来为 PowerPoint 中的特定幻灯片添加 SmartArt 图形。详细步骤如下:
from spire.presentation.common import *
from spire.presentation import *
# 创建Presentation类的对象
presentation = Presentation()
# 加载PowerPoint演示文稿
presentation.LoadFromFile("Sample.pptx")
# 获取第一张幻灯片
slide = presentation.Slides[0]
# 添加一个SmartArt (组织架构图) 图形到该幻灯片
smartArt = slide.Shapes.AppendSmartArt(200, 60, 500, 430, SmartArtLayoutType.OrganizationChart)
# 设置SmartArt的样式和颜色
smartArt.Style = SmartArtStyleType.ModerateEffect
smartArt.ColorStyle = SmartArtColorType.ColorfulAccentColors5to6
# 删除SmartArt的默认节点
list = []
for node in smartArt.Nodes:
list.append(node)
for subnode in list:
smartArt.Nodes.RemoveNode(subnode)
# 给SmartArt添加一个节点
node = smartArt.Nodes.AddNode()
# 给刚加的节点添加两个子节点
subNode1 = node.ChildNodes.AddNode()
subNode2 = node.ChildNodes.AddNode()
# 给第一个子节点添加两个子节点
subsubNode1 = subNode1.ChildNodes.AddNode()
subsubNode2 = subNode1.ChildNodes.AddNode()
# 给第二个子节点添加两个子节点
subsubNode3 = subNode2.ChildNodes.AddNode()
subsubNode4 = subNode2.ChildNodes.AddNode()
# 为SmartArt中的节点和子节点设置文本内容和文本的字体大小
node.TextFrame.Text = "总经理"
node.TextFrame.TextRange.FontHeight = 14.0
subNode1.TextFrame.Text = "开发部经理"
subNode1.TextFrame.TextRange.FontHeight = 12.0
subNode2.TextFrame.Text = "测试部经理"
subNode2.TextFrame.TextRange.FontHeight = 12.0
subsubNode1.TextFrame.Text = "开发者A"
subsubNode1.TextFrame.TextRange.FontHeight = 12.0
subsubNode2.TextFrame.Text = "开发者B"
subsubNode2.TextFrame.TextRange.FontHeight = 12.0
subsubNode3.TextFrame.Text = "测试者A"
subsubNode3.TextFrame.TextRange.FontHeight = 12.0
subsubNode4.TextFrame.Text = "测试者B"
subsubNode4.TextFrame.TextRange.FontHeight = 12.0
# 保存结果文档
presentation.SaveToFile("创建SmartArt.pptx", FileFormat.Pptx2016)
presentation.Dispose()
要读取 PowerPoint 幻灯片上 SmartArt 图形的内容,你需要找到幻灯片上的所有 SmartArt 形状,然后遍历每个 SmartArt 形状的所有节点,并通过 ISmartArtNode.TextFrame.Text 属性获取每个节点的文本。具体步骤如下:
from spire.presentation.common import *
from spire.presentation import *
# 创建Presentation类的对象
presentation = Presentation()
# 加载PowerPoint演示文稿
presentation.LoadFromFile("创建SmartArt.pptx")
# 获取第一张幻灯片
slide = presentation.Slides[0]
# 创建一个列表来存储提取的文本
str = []
str.append("从 SmartArt 中提取的文本:")
# 遍历幻灯片上的所有形状,找到SmartArt形状
for shape in slide.Shapes:
if isinstance(shape, ISmartArt):
smartArt = shape
# 从SmartArt中获取文本并将文本追加到列表中
for node in smartArt.Nodes:
str.append(node.TextFrame.Text)
# 将列表中的文本写入文本文件
with open("SmartArt文本.txt", "w", encoding = "utf-8") as text_file:
for text in str:
text_file.write(text + "\n")
presentation.Dispose()
要从 PowerPoint 幻灯片中删除 SmartArt 图形,你需要遍历幻灯片上的所有形状,找到 SmartArt 形状,然后使用 ISlide.Shapes.Remove() 方法从幻灯片中删除它们。具体步骤如下:
from spire.presentation.common import *
from spire.presentation import *
# 创建Presentation类的对象
presentation = Presentation()
# 加载PowerPoint演示文稿
presentation.LoadFromFile("创建SmartArt.pptx")
# 获取第一张幻灯片
slide = presentation.Slides[0]
# 创建一个列表来存储SmartArt图形
list = []
# 遍历该幻灯片上的所有形状
for shape in slide.Shapes:
# 找到SmartArt形状并将它们追加到列表
if isinstance (shape, ISmartArt):
list.append(shape)
# 从幻灯片中删除SmartArt形状
for smartArt in list:
slide.Shapes.Remove(smartArt)
# 保存结果文档
presentation.SaveToFile("删除SmartArt.pptx", FileFormat.Pptx2016)
presentation.Dispose()如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。

在 Python 中将 HTML 文件转换为 Word 文档,是开发者在构建文档管理系统、生成报表工具或将网页内容转换为可离线编辑格式时的常见需求。虽然 HTML 更适合用于网页展示,但 Word 文档在脱机访问、内容协作、格式排版以及专业文档呈现方面具有更强的灵活性和兼容性。
本文将详细介绍如何在 Python 中使用 Spire.Doc for Python 库将 HTML 文件或 HTML 字符串转换为 Word(.doc/.docx)文档。该库支持保留 HTML 的原始结构和样式,确保转换后的 Word 文档在格式和排版上与源内容高度一致,适用于多种文档处理场景。
虽然 HTML 非常适合用于网页内容的展示,但在需要格式排版、内容审阅、文档打印或脱机访问等场景中,将 HTML 转换为 Word 文档更具优势,具体体现在以下几个方面:
Spire.Doc for Python 是一款功能强大且易于集成的文档处理库,专为帮助开发者在 Python 应用中直接创建、读取、转换和操作 Word 文档而设计。它支持将 HTML 内容高保真地转换为 Word 文件,并在转换过程中完整保留 HTML 的结构、CSS 样式和页面布局。
您可以使用以下命令轻松通过PyPI安装该库:
pip install spire.doc
如需详细安装指导,请参考教程:如何在Windows上安装Spire.Doc for Python。
如果您已经有一个 HTML 文件(如网页保存的文件或自动生成的 HTML 报告)时,只需几行简单的代码即可快速将其转换为 Word 文档。
from spire.doc import *
from spire.doc.common import *
# 创建Document类的对象
document = Document()
# 加载一个HTML文件
document.LoadFromFile("sample.html", FileFormat.Html, XHTMLValidationType.none)
# 将HTML文件保存为.docx格式
document.SaveToFile("Html转Word.docx", FileFormat.Docx2016)
document.Close()
代码说明:
以上示例展示了如何将 .html 文件内容转换为 Word 文档。以下是主要用到的方法和属性说明:
如果需要将HTML保存为 .doc 格式,可将 FileFormat.Docx2016 替换为 FileFormat.Doc。
输出效果:
下图展示了 HTML 文件转换后的 Word 文档效果:

在某些场景中,HTML 内容可能并非来自本地文件,而是以字符串的形式存在,例如网页爬虫抓取的内容,或程序在运行时动态生成的 HTML 片段。使用 Spire.Doc,您可以直接将 HTML 字符串插入到 Word 文档中,无需将其事先保存为 HTML 文件。
from spire.doc import *
from spire.doc.common import *
# 创建Document类的对象
document = Document()
# 在文档中添加一节
sec = document.AddSection()
# 在该节中添加一个段落
paragraph = sec.AddParagraph()
# 指定HTML字符串
htmlString = """
<html>
<head>
<title>HTML转Word示例</title>
<style>
body {
font-family: 微软雅黑, sans-serif;
}
h1 {
color: #FF5733;
font-size: 24px;
margin-bottom: 20px;
}
p {
color: #333333;
font-size: 16px;
margin-bottom: 10px;
}
ul {
list-style-type: disc;
margin-left: 20px;
margin-bottom: 15px;
}
li {
font-size: 14px;
margin-bottom: 5px;
}
table {
border-collapse: collapse;
width: 100%;
margin-bottom: 20px;
}
th, td {
border: 1px solid #CCCCCC;
padding: 8px;
text-align: left;
}
th {
background-color: #F2F2F2;
font-weight: bold;
}
td {
color: #0000FF;
}
</style>
</head>
<body>
<h1>这是标题示例</h1>
<p>将 HTML 转换为 Word 文档的段落示例。</p>
<p>下面是一个无序列表的示例:</p>
<ul>
<li>项目 1</li>
<li>项目 2</li>
<li>项目 3</li>
</ul>
<p>表格示例:</p>
<table>
<tr>
<th>产品</th>
<th>数量</th>
<th>价格</th>
</tr>
<tr>
<td>长裤</td>
<td>30</td>
<td>¥150</td>
</tr>
<tr>
<td>毛衣</td>
<td>2</td>
<td>¥99</td>
</tr>
</table>
</body>
</html>
"""
# 将 HTML 字符串添加到段落中
paragraph.AppendHTML(htmlString)
# 保存结果文件
document.SaveToFile("HtmlStringToWord.docx", FileFormat.Docx2016)
document.Close()
代码说明:
该代码示例展示了如何将 HTML 字符串直接插入到 Word 文档中。以下是主要用到的方法说明:
该方法适用于将邮件正文、CMS 内容管理系统中的内容,或运行时生成的 HTML 片段转换为 Word 文档的场景。
输出效果:
下图展示了将上述 HTML 字符串插入 Word 后的实际效果:

使用 Spire.Doc for Python,不仅可以将 HTML 转换为 Word 文档,还能导出为多种其他格式,例如:
Spire.Doc for Python 为开发者提供了强大而高效的 HTML 转 Word 解决方案。无论是完整的 HTML 文件,还是动态生成的 HTML 字符串,它都能轻松完成转换,并精准保留原始文档的结构、样式和布局。其独立运行的特性无需依赖 Microsoft Word,极大地简化了部署和使用流程。凭借高保真的转换效果和丰富的功能支持,Spire.Doc for Python 成为构建自动化文档生成、报表制作及内容管理系统的理想选择。
Q1:是否可以在不安装 Microsoft Word 的情况下完成转换?
A1:可以。Spire.Doc 是一个独立组件,无需依赖 Microsoft Word 或 Office 环境。
Q2:CSS 样式和表格能否完整保留?
A2:可以。该库能够保留 CSS 样式、表格、图像、列表、字体及布局格式,确保文档效果一致。
Q3:是否支持批量转换多个 HTML 文件?
A3:支持。您可以遍历文件夹,对每个 HTML 文件应用相同的转换逻辑,实现批量处理。
Q4:除了 Word 格式,HTML 还能导出为哪些格式?
A4:支持导出为 .doc、.docx、.pdf、图片格式、.rtf、.xml 等多种常见格式。
Q5:是否提供免费试用许可证?
A5:提供。您可以申请 30 天的试用许可证,充分体验产品功能。
Spire.XLS for Python 13.11.1 已发布。本次更新新增 IPivotTableOptions.ReportLayout get/set 方法和 ConverterSetting.ToImageWithoutMargins get/set 方法。此外,大量已知问题在该版本中得到修复,如页眉图片显示为全黑色的问题。详情请阅读以下内容。
新功能:
问题修复:
在 PDF 文档中,通过使用鲜明的颜色来突出显示重要文本是一种常用内容导航和强调方法。特别是在较长的 PDF 文档中,强调关键信息有助于读者快速理解文档内容,从而提高阅读效率。而利用 Python 程序可以轻松快捷地执行突出显示文本的操作,提升 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
利用 Spire.PDF for Python,用户可以使用 PdfTextFinder 类来定位页面内的特定文本。并通过使用 PdfTextFinder.Options.Parameter 属性设置搜索选项,如 WholeWord(全词匹配)。一旦匹配到文本,便可以应用高亮效果以在视觉上区分文本。以下是在 PD F中查找并高亮显示文本的步骤:
from spire.pdf import *
from spire.pdf.common import*
# 创建PdfDocument类对象并加载PDF文档
pdf = PdfDocument()
pdf.LoadFromFile("示例.pdf")
# 循环遍历PDF文档中的页面
for i in range(pdf.Pages.Count):
page = pdf.Pages.get_Item(i)
# 为当前页面创建一个PdfTextFinder对象
pdfTextFinder = PdfTextFinder(page)
# 设置查找选项
pdfTextFinder.Options.Parameter = TextFindParameter.WholeWord
# 查找页面上特定文本的所有出现位置
result = pdfTextFinder.Find("云服务器")
# 突出显示所有查找到的文本
for find in result:
find.HighLight(Color.get_Cyan())
# 保存文档
pdf.SaveToFile("output/查找并突出显示.pdf")
# 对象释放
pdf.Close()
为了在文档中突出显示特定部分的关键信息,可以在 PDF 文档页面的矩形区域内查找并高亮指定的文本。该矩形区域可以通过 PdfTextFinder.Options.Area 来定义。具体操作步骤如下:
from spire.pdf import *
from spire.pdf.common import*
# 创建PdfDocument类对象并加载PDF文档
pdf = PdfDocument()
pdf.LoadFromFile("示例.pdf")
# 获取第一页
page = pdf.Pages.get_Item(0)
# 定义一个矩形区域
rctg = RectangleF(0.0, 0.0, page.ActualSize.Width, 300.0)
# 为当前页面创建一个PdfTextFinder对象
pdfTextFinder = PdfTextFinder(page)
# 设置查找选项并应用指定区域
pdfTextFinder.Options.Parameter = TextFindParameter.WholeWord
pdfTextFinder.Options.Area = rctg
# 查找文本
result = pdfTextFinder.Find("云服务器")
# 突出显示所有查找到的文本
for find in result:
find.HighLight(Color.get_Green())
# 保存文档
pdf.SaveToFile("output/查找并突出显示.pdf")
# 对象释放
pdf.Close()
在实际应用中,需要使用正则表达式在文档中灵活地匹配相应文本。Spire.PDF for Python 同样也支持使用正则表达式来匹配,只需要将 TextFindParameter 设置为 Regex 类型。以下是使用正则表达式在 PDF 中匹配查找并高亮文本的步骤。具体步骤如下:
from spire.pdf import *
from spire.pdf.common import*
# 创建PdfDocument类对象并加载PDF文档
pdf = PdfDocument()
pdf.LoadFromFile("示例.pdf")
# 获取第一页
page = pdf.Pages.get_Item(0)
# 为当前页面创建一个PdfTextFinder对象
pdfTextFinder = PdfTextFinder(page)
# 设置查找选项
pdfTextFinder.Options.Parameter = TextFindParameter.Regex
# 指定匹配数字以及百分数的正则表达式
pattern = r'\d+(?:\.\d+)?%?'
# 使用指定的正则表达式在页面上查找匹配的文本
result = pdfTextFinder.Find(pattern)
# 突出显示所有查找到的文本
for find in result:
find.HighLight(Color.get_DeepPink())
# 保存文档
pdf.SaveToFile("output/查找并突出显示.pdf")
# 对象释放
pdf.Close()
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
超链接是一种通常嵌入在文本或图像中的可点击元素。它可以将用户从当前位置引导到另一个网页或文档的特定位置。通过在 PPT 幻灯片中添加超链接,用户可以在演示过程中快速访问其他相关页面或幻灯片。本文将介绍如何使用 Spire.Presentation for 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 提供的 TextRange.ClickAction.Address 属性允许用户将文本超链接轻松添加到 PPT 幻灯片中。具体步骤如下:
from spire.presentation.common import *
from spire.presentation import *
# 创建一个PowerPoint演示文稿
presentation = Presentation()
# 为第一张幻灯片设置背景图
ImageFile = "背景.png"
rect = RectangleF.FromLTRB (0, 0, presentation.SlideSize.Size.Width, presentation.SlideSize.Size.Height)
presentation.Slides[0].Shapes.AppendEmbedImageByPath (ShapeType.Rectangle, ImageFile, rect)
# 在第一张幻灯片上添加新形状
shape = presentation.Slides[0].Shapes.AppendShape(ShapeType.Rectangle, RectangleF.FromLTRB (80, 200, 650, 400))
shape.Fill.FillType = FillFormatType.none
shape.ShapeStyle.LineColor.Color = Color.get_White()
# 在形状中添加一些段落
para1 = TextParagraph()
tr = TextRange("Spire.Presentation for Python")
tr.Fill.FillType = FillFormatType.Solid
tr.Fill.SolidColor.Color = Color.get_Black()
para1.TextRanges.Append(tr)
para1.Alignment = TextAlignmentType.Left
shape.TextFrame.Paragraphs.Append(para1)
shape.TextFrame.Paragraphs.Append(TextParagraph())
para2 = TextParagraph()
tr1 = TextRange("这是一个专业的演示文稿处理 API,与 PowerPoint 高度兼容。作为一个完全独立的 Python 开发组件,"
+"开发人员可以使用它来高效地创建、编辑、转换和保存 PPT 演示文稿,而无需安装 Microsoft PowerPoint。")
tr1.Fill.FillType = FillFormatType.Solid
tr1.Fill.SolidColor.Color = Color.get_Black()
para2.TextRanges.Append(tr1)
shape.TextFrame.Paragraphs.Append(para2)
shape.TextFrame.Paragraphs.Append(TextParagraph())
# 添加带有超链接的文本
para3 = TextParagraph()
tr2 = TextRange("了解更多关于 Spire.Presentation for Python 的信息。")
tr2.ClickAction.Address = "https://www.e-iceblue.cn/Introduce/Spire-Presentation-Python.html"
para3.TextRanges.Append(tr2)
shape.TextFrame.Paragraphs.Append(para3)
shape.TextFrame.Paragraphs.Append(TextParagraph())
# 设置段落文本的字体
for para in shape.TextFrame.Paragraphs:
if len(para.Text) != 0:
para.TextRanges[0].LatinFont = TextFont("宋体")
para.TextRanges[0].FontHeight = 16
# 保存结果文件
presentation.SaveToFile("添加文本超链接.pptx", FileFormat.Pptx2013)
presentation.Dispose()
Spire.Presentation for Python 还支持给图片添加超链接。您可以使用 ClickHyperlink 类创建超链接,然后使用 IEmbedImage.Click 属性将其添加到图片中。具体步骤如下:
from spire.presentation.common import *
from spire.presentation import *
# 创建Presentation对象
presentation = Presentation()
# 加载一个PPT文档
presentation.LoadFromFile("添加文本超链接.pptx")
# 获取第一张幻灯片
slide = presentation.Slides[0]
# 添加一张图片到此幻灯片
rect = RectangleF.FromLTRB (250, 70, 400, 210)
image = slide.Shapes.AppendEmbedImageByPath (ShapeType.Rectangle, "产品.jpg", rect)
# 为图片添加超链接
hyperlink = ClickHyperlink("https://www.e-iceblue.cn/Introduce/Spire-Presentation-Python.html")
image.Click = hyperlink
# 保存结果文件
presentation.SaveToFile("添加图片超链接.pptx", FileFormat.Pptx2013)
presentation.Dispose()
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Excel 电子表格被广泛用于组织和分析数据,而 CSV 文件则是一种更简单、更通用的数据交换格式。通过在这两个格式之间进行互相转换,可以更灵活地在不同平台和应用程序之间处理数据。本文将介绍如何使用 Spire.XLS for Python 在 Python 中将 Excel 转换为 CSV,或将 CSV 转换为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 提供了 Worksheet.SaveToFile() 方法,允许用户将 Excel 工作簿中的某个工作表导出为单独的 CSV 文件。将 Excel 工作表转换为 CSV 的具体步骤如下:
from spire.xls import *
from spire.xls.common import *
# 创建Workbook对象
workbook = Workbook()
# 加载Excel文档
workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\示例.xlsx")
# 获取第一张工作表
sheet = workbook.Worksheets[0]
# 将工作表转为CSV格式
sheet.SaveToFile("Output/Excel转CSV.csv", ",", Encoding.get_UTF8())
workbook.Dispose()
Spire.XLS for Python 提供的 Workbook.LoadFromFile() 方法不仅能加载 Excel 文件,还能加载 CSV 文件。加载 CSV 文件后,可以使用 Workbook.SaveToFile() 方法将其保存为 Excel 文档。将 CSV 文件转换为 Excel 的具体步骤如下:
from spire.xls import *
from spire.xls.common import *
# 创建Workbook对象
workbook = Workbook()
# 加载CSV文件
workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\CSV.csv", ",", 1, 1)
# 获取第一张工作表
sheet = workbook.Worksheets[0]
# 将数字显示为文本
sheet.AllocatedRange.IgnoreErrorOptions = IgnoreErrorType.NumberAsText
# 自动调整列宽
sheet.AllocatedRange.AutoFitColumns()
# 将CSV文件保存为Excel
workbook.SaveToFile("Output/CSV转Excel.xlsx", ExcelVersion.Version2016)如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Presentation for Java 8.11.1已发布。该版本增强了从幻灯片到SVG的转换功能。此外,一些已知问题也在该版本中被成功修复,如插入的HTML文本的下划线丢失的问题。详情请阅读以下内容。
问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-JAVA.html
在我们的学生时代,我们经常需要完成各种考试题目。对于卷子这种形式,我们并不陌生,因为它伴随着我们从小学到大学的学习生涯。通常情况下,卷子采用 A3 格式的横向布局,以 Word 文档的形式呈现。一页卷子被分成两栏,每栏下方通常都有一个包含页码的页脚。
本篇帮助文档将介绍如何使用 Spire.Doc for Java 将 A4 格式的纵向的 Word 文档变成横向的分栏 A3 文档,并为每栏设置页码页脚。实现效果图如下:

由于本篇是一篇综合性的帮助文档,本文主要还是介绍如何给每栏插入包含页码的页脚,对于插入页码和分栏可以点击下面链接访问相关文档做一个简单了解。
首先,您需要在 Java 程序中添加 Spire.Doc.jar 文件作为依赖项。您可以从此链接下载 JAR 文件;如果您使用 Maven,则可以通过在 pom.xml 文件中添加以下代码导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.doc</artifactId>
<version>14.9.5</version>
</dependency>
</dependencies>
由于页脚设置页码和总页数用到了两个域,Page 和 Num_Pages。但分栏的两部分内容始终在同一页上,获取到的页码也都是相同的,必须要进行一些计算处理才能达到预期的效果。
如果把所有分栏从开始到结束排列起来,那么可以很轻易得出,奇数栏实际的页码应该是 “2*当前 Word 页码-1“,偶数栏实际的页码应该是 “2*当前 Word 页码”,总页码应该是 “2*Word 总页数”。因此,现在存在两个主要问题:
好,我们带着这两个问题,继续往下吧!
解决问题1:利用嵌套域的方式完成
在一个表达式域中嵌套页码域,并让页码域获取的值参与表达式的计算。即达到 “{=2*{page}-1 }” 或者 “{=2*{page} }” 的效果。
那么如何实现表达式域嵌套页码域呢?首先需要了解的是一个完整的 Field 的构成应该是 Field+FieldMark(分隔符)+FieldMark(结束符)。并且,分隔符和结束符应该相邻;Field 和分隔符之间,可以嵌套其他的域。因此在表达式域中嵌套页码域完整表达如下:
Field(表达式域)
+Field(页码域)+FieldMark(页码域的分隔符)+FieldMark(页码域的结束符)
+FieldMark(表达式域的分隔符)+FieldMark(表达式域的结束符)
解决问题2:利用 Table 来达到需要的效果
在页脚中添加一个一行两列的不带边框的 Table,把两个分栏的页码部分分别放置于两个单元格中,再分别居中对齐。这样便可达到需要的效果。
关于表格的帮助文档,可以从下面链接中查看更多:表格帮助文档
Spire.Doc for Java 提供了 Field 类用于处理域。
| 方法 | 方法解释 |
| new Field(Document) | 实例化一个 Field,构造方法中要传入 Document 对象 |
| Field.setType(FieldType) | 设置 Field 类型,这里我们需要用到3种域的类型,分别是:FieldType.Field_Expression(表达式域)、FieldType.Field_Page(页码域)、FieldType.Field_Num_Pages(总页数域) |
| Field.setEnd(FieldMark) | 设置 Field 的结束符,将结束符实例作为参数 |
Spire.Doc for Java 提供了 FieldMark 类用于处理域的分隔符和结束符。
| 方法 | 方法解释 |
| new FieldMark(Document,FieldMarkType) | 实例化一个 FieldMark,构造方法中要传入 Document 和 FieldMarkType 对象,这里需要用到2个种类型,分别是:FieldMarkType.Field_Separator(分隔符)、FieldMarkType.Field_End(结束符) |
最后将,将添加的页码域或者总页数域 Field 和 FieldMark 按照上面提到的嵌套顺序插入到段落中即可。
| 方法 | 方法解释 |
| Paragraph.getItem().add() | 方法参数传入 Field 和 FieldMark 实例 |
下面介绍如何将 A4 格式的 Word 文档变成横向的分栏 A3 文档,并为每栏设置页码页脚。本 Demo 代码除主方法(Main)外,另写了 addPage() 方法来处理页码这一块的逻辑,因为需要多次插入分隔符和结束符,所以写 insertFieldMark() 方法来简化代码。另本次操作的 Word 文档只有一个 Section。
下面代码实现 “第y页 共x页” 的效果
Field field = new Field(document);
field. setType(FieldType.Field_Expression);Field field = new Field(document);
field. setType(FieldType.Field_Page);footerParagraph.appendText("-1");到此已经完成了对 “第y页” 效果的实现,后面 “共x页” 实现步骤类似,就不重复了。
FieldMark fieldMark = new FieldMark(document,FieldMarkType.Field_Separator);FieldMark FieldMark = new FieldMark(document,FieldMarkType.Field_End);import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
//加载源文档
Document doc = new Document();
doc.loadFromFile("data/考试题.docx");
//获取第一个Section
Section section = doc.getSections().get(0);
//设置页面大小A3并将页面设置为横向
section.getPageSetup().setPageSize(PageSize.A3);
section.getPageSetup().setOrientation(PageOrientation.Landscape);
//分栏
section.addColumn(0,0);
//获取页脚并清空页脚内容
HeaderFooter footer = section.getHeadersFooters().getFooter();
footer.getChildObjects().clear();
//页脚中插入一行二列的表格
Table table=footer.addTable(false);
table.resetCells(1,2);
//左分栏页码
addPage(table.get(0,0).addParagraph(),doc,"Left");
//右分栏页码
addPage(table.get(0,1).addParagraph(),doc,"Right");
//保存结果文档
doc.saveToFile("output/分栏word加页码.docx",FileFormat.Docx);
}
public static void addPage(Paragraph footerParagraph, Document document,String direction) {
//添加文本、节域、页码域到段落 第1页,共7页
footerParagraph.appendText("第 ");
//自定义域代码。表达式域嵌套页码域 完成页码计算
//创建表达式域
Field currentPage_Field =new Field(document);
currentPage_Field.setType(FieldType.Field_Expression);
//设置前半部分域代码
currentPage_Field.setCode("=2*");
//添加到段落中
footerParagraph.getItems().add(currentPage_Field);
//创建嵌入表达式域中的页码域(获取当前页码)
Field fieldPage=new Field(document);
fieldPage.setType(FieldType.Field_Page);
//添加到段落中
footerParagraph.getItems().add(fieldPage);
//给页码域设置“域分隔符标志”和“域结束标志”
insertFieldMark(document,footerParagraph,fieldPage);
//判断是左侧分栏页码还是右侧,如果是左侧,则追加域代码"减一"即"-1"
//左侧分栏页码对应计算表达式应该是 2*page-1
//右侧分栏页码对应计算表达式应该是 2*page
//page表示当前页码
if(direction.equals("Left")){
footerParagraph.appendText("-1");
}
//给页码域设置“域分隔符标志”和“域结束标志”
insertFieldMark(document,footerParagraph,currentPage_Field);
footerParagraph.appendText(" 页,共 ");
//添加嵌套“总页数”的表达式域
Field totalPage_Field = new Field(document);
totalPage_Field.setType(FieldType.Field_Expression);
totalPage_Field.setCode("=2*");
footerParagraph.getItems().add(totalPage_Field);
// 添加总页数域
Field pageNums=new Field(document);
pageNums.setType(FieldType.Field_Num_Pages);
footerParagraph.getItems().add(pageNums);
// 给总页数域设置“域分隔符标志”和“域结束标志”
insertFieldMark(document,footerParagraph,pageNums);
//给表达式域设置“域分隔符标志”和“域结束标志”
insertFieldMark(document,footerParagraph,totalPage_Field);
footerParagraph.appendText(" 页");
//设置段落样式
footerParagraph.getStyle().getCharacterFormat().setFontSize(9f);
footerParagraph.getStyle().getCharacterFormat().setFontName("宋体");
footerParagraph.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
}
// 给field插入分隔符(Field_Separator)和结束(Field_End)
public static void insertFieldMark(Document document,Paragraph paragraph, Field field) {
// 插入Field的分隔符
FieldMark separatorFieldMark = new FieldMark(document,FieldMarkType.Field_Separator);
paragraph.getItems().add(separatorFieldMark);
// 插入Field的结束符
FieldMark endFieldMark = new FieldMark(document,FieldMarkType.Field_End);
paragraph.getItems().add(endFieldMark);
field.setEnd(endFieldMark);
}
}
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
PDF 文档的属性是指嵌入在文档中的信息,这些信息包括作者、创建日期、最后修改日期等与文档有关的详细信息。通过 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
Spire.PDF for Python 提供了 PdfDocumentInformation 类来处理 PDF 文档的属性。在该类下存在多个属性,用于设置文档的默认属性,包括作者、主题、关键词等。此外,它还提供了 PdfDocumentInformation.SetCustomProperty() 方法来设置 PDF 文档的自定义属性。以下是设置 PDF 属性的详细步骤:
from spire.pdf import *
from spire.pdf.common import *
# 创建PdfDocument类的对象并加载PDF文档
pdf = PdfDocument()
pdf.LoadFromFile("示例.pdf")
# 获取文档的属性
properties = pdf.DocumentInformation
# 设置内置属性
properties.Author = "泰德"
properties.Creator = "Spire.PDF"
properties.Keywords = "云服务;数字化业务"
properties.Subject = "云服务的介绍及其优势"
properties.Title = "云服务的力量:赋能数字企业"
properties.Producer = "Spire.PDF for Python"
# 设置自定义属性
properties.SetCustomProperty("公司", "E-iceblue")
properties.SetCustomProperty("标签", "云;数字业务;服务器")
# 保存文档
pdf.SaveToFile("output/设置PDF属性.pdf")
pdf.Close()
默认 PDF 属性中的信息可通过 PdfDocumentInformation 类下的属性获取,而自定义的 PDF 属性中的信息则需要通过 PdfDocumentInformation.GetCustomProperty() 方法获取。获取 PDF 属性的具体步骤如下:
from spire.pdf import *
from spire.pdf.common import *
# 创建PdfDocument类的对象并加载PDF文档
pdf = PdfDocument()
pdf.LoadFromFile("output\设置PDF属性.pdf")
# 获取文档的属性
properties = pdf.DocumentInformation
# 创建字符串对象
information = ""
# 获取内置属性
information += "作者: " + properties.Author
information += "\n标题: " + properties.Title
information += "\n主题: " + properties.Subject
information += "\n关键字: " + properties.Keywords
information += "\n应用程序: " + properties.Creator
information += "\nPDF制作程序: " + properties.Producer
# 获取自定义属性
information += "\n公司: " + properties.GetCustomProperty("公司")
information += "\n标签: " + properties.GetCustomProperty("标签")
# 打印文档属性
print(information)
pdf.Close()
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.PDF 9.11.4 已发布。本次更新新增 PdfImageHelper 接口来支持提取、删除、替换以及压缩图片。该版本还增强了 PDF 到 XPS 和 XPS 到 PDF 的转换功能。此外,一些已知问题也在该版本中得到修复,如提取出的 PDF 表格有两列合并在一起的问题。详情请阅读以下内容。
新功能:
// Delete image:
imageHelper.DeleteImage(imageInfos[0]);
// Extract images:
int index = 0;
foreach (PdfImageInfo info in imageInfos)
{
info.Image.Save(outputFile_I + string.Format("Image-{0}.png", index));
index++;
}
// Replace image:
PdfImage image = PdfImage.FromFile(TestUtil.DataPath + "ImgFiles/E-iceblue logo.png");
imageHelper.ReplaceImage(imageInfos[0], image);
// Compress images:
foreach (PdfPageBase page in doc.Pages)
{
foreach (PdfImageInfo info in imageHelper.GetImagesInfo(page))
{
bool success = info.TryCompressImage();
}
}问题修复: