Spire.Email 6.7 现已发布。该版本新增了适配 .NET 9.0 Framework 的 DLL,并移除了适配 .NET 7.0 Framework 的 DLL。此外,它还升级了 HarfBuzzSharp 和 SkiaSharp 版本。详情参见下文。
调整:
HarfBuzzSharp->8.3.0.1、SkiaSharp->3.116.1Spire.Doc for JavaScript 13.3.3 已发布。本次更新新增对 MHTML 格式文件的写出支持。详情请阅读以下内容。
新功能:
doc.SaveToFile(outputFile, FileFormat.Mhtml)https://www.e-iceblue.cn/Downloads/Spire-DOC-Javascript.html
Spire.Doc for Python 13.3.8 现已正式发布。最新版本支持 arm64/aarch64 平台,支持写出为 MHTML 格式文件。此外,本次更新还成功修复了一些已知问题,比如转换 HTML 到 PDF 时,内容丢失的问题。更多详情请查阅下面的内容。
新功能:
doc.SaveToFile(outputFile, FileFormat.Mhtml)升级:
问题修复:
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
尽管 Adobe Acrobat 提供了一键提取批注的功能,但在处理特定批注时缺乏灵活性。如果您只需提取某一条或几条批注,必须手动查找并复制,操作起来既繁琐又低效,尤其是在处理包含大量批注的 PDF 时。而 Spire.PDF 提供了 PdfAnnotationCollection.get_item() 方法,可精准提取指定批注,使 PDF 批注管理更加高效和灵活。
从 PDF 文档中提取指定注释的具体步骤:
下面的代码展示了怎样获取 PDF 文档第二页的第一个注释:
from spire.pdf.common import *
from spire.pdf import *
# 创建一个 PdfDocument 类的对象
pdf = PdfDocument()
# 加载 PDF 文件
pdf.LoadFromFile( "/示例文档.pdf")
# 创建一个列表来保存批注信息
sb = []
# 获取 PDF 文档的第二页
page = pdf.Pages.get_Item(1)
# 访问该页上的批注集合
annotations = pdf.Pages.get_Item(1).AnnotationsWidget
# 获取该页面上的第一个批注
annotation = annotations.get_Item(0)
# 将批注的详细信息保存到列表中
sb.append("批注信息:")
sb.append("内容:" + annotation.Text)
modifiedDate = annotation.ModifiedDate.ToString()
sb.append("修改时间:" + modifiedDate)
# 将批注信息保存为文本文件
with open("/获取指定批注.txt", "w", encoding="utf-8") as file:
file.write("\n".join(sb))
pdf.Close()

要从指定的 PDF 页面导出所有批注,可以使用 PdfPageBase.AnnotationsWidget 属性结合 PdfAnnotationCollection.get_Item() 方法。不过,为了确保不遗漏任何批注,需要遍历页面上的所有批注。下面将介绍具体的操作步骤,并提供代码示例供参考。
使用 Python 提取 PDF 页面上所有批注的步骤:
下方代码展示了如何提取 PDF 文档中第二页的所有批注:
from spire.pdf.common import *
from spire.pdf import *
# 创建一个 PdfDocument 类的对象
pdf = PdfDocument()
# 加载 PDF 文件
pdf.LoadFromFile( "/示例文档.pdf")
# 创建一个列表来保存批注信息
sb = []
# 获取第二页的批注集合
annotations = pdf.Pages.get_Item(1).AnnotationsWidget
# 遍历第二页的批注集合
if annotations.Count > 0:
for i in range(annotations.Count):
# 获取当前的批注
annotation = annotations.get_Item(i)
# 获取批注的详细信息
if isinstance(annotation, PdfPopupAnnotationWidget):
continue
sb.append("批注信息:")
sb.append("内容:" + annotation.Text)
modifiedDate = annotation.ModifiedDate.ToString()
sb.append("修改时间:" + modifiedDate)
# 将批注信息保存为文本文件
with open("/获取页面上的所有批注.txt", "w", encoding="utf-8") as file:
file.write("\n".join(sb))
pdf.Close()

本指南的最后一部分将演示如何使用 Python 提取 PDF 文档中的所有批注。这个过程与从单个页面导出批注类似,但需要额外遍历每一页,以确保获取所有批注并访问其详细信息。最后,提取的批注信息将被保存到文本文件中,以便进一步使用。
提取 PDF 文档所有批注的步骤:
以下是导出 PDF 文件所有批注的示例代码:
from spire.pdf.common import *
from spire.pdf import *
# 创建一个 PdfDocument 类的对象
pdf = PdfDocument()
# 加载 PDF 文件
pdf.LoadFromFile( "/示例文档.pdf")
# 创建一个列表来保存批注信息
sb = []
# 遍历 PDF 文档中的所有页面
for pageIndex in range(pdf.Pages.Count):
sb.append(f"第 {pageIndex + 1} 页:")
# 访问当前页面的批注集合
annotations = pdf.Pages.get_Item(pageIndex).AnnotationsWidget
# 遍历批注集合中的所有批注
if annotations.Count > 0:
for i in range(annotations.Count):
# 获取当前页面的批注
annotation = annotations.get_Item(i)
# 跳过无效的批注(空文本和默认日期)
if not annotation.Text.strip() and annotation.ModifiedDate.ToString() == "0001/1/1 0:00:00":
continue
# 提取批注信息
sb.append("批注信息:")
sb.append("内容:" + (annotation.Text.strip() or "N/A"))
modifiedDate = annotation.ModifiedDate.ToString()
sb.append("修改时间:" + modifiedDate)
else:
sb.append("本页没有批注。")
# 在每页之后添加一个空白行
sb.append("")
# 将所有批注保存到文件中
with open("/获取所有批注信息1.txt", "w", encoding="utf-8") as file:
file.write("\n".join(sb))
pdf.Close()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Cloud 10.3.4 已发布。该版本优化了 Word 文档加载保存效果,并修复了预览 PDF 文档效果不正确的问题。详情请查看以下内容
问题修复:
在处理 Word 文档时,批量提取超链接功能具有广泛的应用价值。当需要从技术文档或产品手册中批量获取 URL 资源时,手动逐条提取不仅效率低下,还容易产生遗漏和错误。为此,本文提出基于 Python 的自动化解决方案,通过解析文档结构精准提取超链接锚文本、对应 URL 以及屏幕提示,为数据分析、SEO 优化等场景提供结构化数据支持。本文将介绍如何使用 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 文档中的超链接是域(Field)的一种。在提取超链接时,我们需要先判断文档中的各个文档对象是否为 Field 实例来找出所有域对象,然后通过判断域对象的 Type 属性是否为 FieldType.FieldHyperlink 来找出所有的超链接域。找到所有超链接后,我们可以使用 Field.FieldText 属性获取超链接的锚文本,并使用 Field.Code 属性获取超链接的完整域代码,形式如下:
| 超链接类型 | 域代码 |
| 普通超链接 | HYPERLINK "https://www.example.com/example" |
| 设置屏幕提示的超链接 | HYPERLINK "https://www.example.com/example" \o "屏幕提示" |
我们可以通过解析域代码来获取超链接的地址以及屏幕提示文本,从而实现超链接信息的完整提取。
以下是从 Word 文档中提取所有超链接的操作步骤:
完整代码示例:
from spire.doc import Document, DocumentObjectType, Paragraph, Field, FieldType
# 创建Document对象
doc = Document()
# 加载Word文件
doc.LoadFromFile("Sample.docx")
# 创建列表用于储存超链接对象
hyperlinks = []
# 遍历文档中的节
for i in range(doc.Sections.Count):
section = doc.Sections.get_Item(i)
# 遍历节中的文档对象
for j in range(section.Body.ChildObjects.Count):
sectionObject = section.Body.ChildObjects.get_Item(j)
# 判断当前文档对象是否为Paragraph实例
if sectionObject.DocumentObjectType == DocumentObjectType.Paragraph:
# 遍历段落中的文档对象
for k in range((sectionObject if isinstance(sectionObject, Paragraph) else None).ChildObjects.Count):
para = (sectionObject if isinstance(sectionObject, Paragraph) else None).ChildObjects.get_Item(k)
# 判断当前文档对象是否为Field实例
if para.DocumentObjectType == DocumentObjectType.Field:
field = para if isinstance(para, Field) else None
# 判断对象类型是否为超链接,将超链接对象添加到列表中
if field.Type == FieldType.FieldHyperlink:
hyperlinks.append(field)
# 将所有超链接的锚文本和URL保存到文本文件
with open("output/提取Word文档超链接.txt", "w", encoding="utf-8") as file:
for i, hyperlink in enumerate(hyperlinks):
# 获取超链接的锚文本
anchorText = hyperlink.FieldText
# 获取超链接域代码
hyperlinkCode = hyperlink.Code
# 获取超链接的URL
url = hyperlinkCode.split('"')[1]
# 判断是否存在屏幕提示
if "\\o" in hyperlink.Code:
# 获取屏幕提示
hyperlinkTip = hyperlinkCode.split('\”')[3].strip()
# 将锚文本、URL和屏幕提示写入文本文件
file.write(f"锚文本:{anchorText}\nURL:{url}\n屏幕提示:{hyperlinkTip}\n\n")
else:
# 将锚文本和URL写入文本文件
file.write(f"锚文本:{anchorText}\nURL:{url}\n\n")
# 关闭文档
doc.Close()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Presentation for Java 10.3.7 已发布。本次更新新增 setThreadsCount(int count) 方法用于设置转换 PPT 到 PDF 所使用的线程数。详情请阅读以下内容。
新功能:
presentation.getSaveToPdfOption().setThreadsCount(1); https://www.e-iceblue.cn/Downloads/Spire-Presentation-JAVA.html
Spire.Barcode 7.4 现已正式发布。此次更新升级了 .NET(net4.6、4.8)、netcore、netstandard 平台上 HarfBuzzSharp 和 SkiaSharp 的版本。更多详情请查阅以下内容。
升级:
HarfBuzzSharp->8.3.0.1、SkiaSharp->3.116.1其中 netstandard 引用调整如下:
<PackageReference Include="HarfBuzzSharp" Version="8.3.0.1" />
<PackageReference Include="SkiaSharp" Version="3.116.1" />
<PackageReference Include="System.Buffers" Version="4.5.1" />
<PackageReference Include="System.Memory" Version="4.5.5" />
<PackageReference Include="Microsoft.Win32.Registry" Version="4.5.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.7.0" />
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="4.7.0" />
<PackageReference Include="System.Security.Cryptography.Xml" Version="4.7.1" />
<PackageReference Include="System.Security.Permissions" Version="4.7.0" />
https://www.e-iceblue.com/Download/download-barcode-for-net.html
Spire.PDFViewer 7.13 现已发布。该版本修复了 PDF 内容预览不正确和水平垂直滚动条效果不正确的问题。详情请查阅以下内容。
问题修复:
应用样式是提升 Excel 电子表格专业性和可读性的简单有效的方法之一。Excel 提供了多种内置样式,使用户能够快速格式化单元格或整个工作表。此外,用户还可以创建自定义样式,以满足特定的需求或个人偏好。无论是设计专业报告、销售报表还是项目管理计划,了解如何有效应用样式都能使数据更加美观且易于理解。这篇文章将介绍如何使用 Python 和 Spire.XLS for Python 库 给 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 提供了 CellRange.BuiltInStyle 属性,使开发者能够将内置样式(如标题、标题 1 和标题 2 等)应用于 Excel 中的单个单元格或单元格区域。具体步骤如下:
from spire.xls import *
from spire.xls.common import *
# 创建 Workbook 类的对象
workbook = Workbook()
# 加载 Excel 文件
workbook.LoadFromFile("示例.xlsx")
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 获取特定的单元格区域
range = sheet.Range["A1:H1"]
# 将内置样式应用于单元格区域
range.BuiltInStyle = BuiltInStyles.Heading2
# 保存生成的文件
workbook.SaveToFile("应用内置样式.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

开发者还可以使用 Workbook.Styles.Add() 方法创建自定义样式,然后使用 CellRange.Style 属性将其应用于单个单元格或单元格区域。具体步骤如下:
from spire.xls import *
from spire.xls.common import *
# 创建 Workbook 类的对象
workbook = Workbook()
# 加载 Excel 文件
workbook.LoadFromFile("示例.xlsx")
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 获取特定的单元格区域
range = sheet.Range["A1:H1"]
# 将自定义样式添加到工作簿
style = workbook.Styles.Add("CustomCellStyle")
# 设置字体大小
style.Font.Size = 13
# 设置字体颜色
style.Font.Color = Color.get_White()
# 加粗文本
style.Font.IsBold = True
# 设置垂直文本对齐方式
style.VerticalAlignment = VerticalAlignType.Bottom
# 设置水平文本对齐方式
style.HorizontalAlignment = HorizontalAlignType.Left
# 设置底部边框颜色
style.Borders[BordersLineType.EdgeBottom].Color = Color.get_GreenYellow()
# 设置底部边框类型
style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Medium
# 设置单元格背景颜色
style.Color = Color.get_CornflowerBlue()
# 将自定义样式应用于单元格区域
range.Style = style
# 保存生成的文件
workbook.SaveToFile("应用自定义样式.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

在某些情况下,开发者可能需要将自定义样式应用于整个工作表,而不是特定的单元格或单元格区域。这可以通过使用 Worksheet.ApplyStyle() 方法来实现。具体步骤如下:
from spire.xls import *
from spire.xls.common import *
# 创建 Workbook 类的对象
workbook = Workbook()
# 加载 Excel 文件
workbook.LoadFromFile("示例.xlsx")
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 将自定义样式添加到工作簿
style = workbook.Styles.Add("CustomSheetStyle")
# 设置字体大小
style.Font.Size = 12
# 设置字体颜色
style.Font.Color = Color.FromRgb(91, 155, 213)
# 设置单元格背景颜色
style.Color = Color.FromRgb(242, 242, 242)
# 将自定义样式应用于工作表
sheet.ApplyStyle(style)
# 保存生成的文件
workbook.SaveToFile("应用自定义样式到工作表.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

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