Spire.Office 9.11.0 已发布。在该版本中,Spire.XLS 支持传递值对透视表进行分组;Spire.Presentation 支持在转换 PPT 到 SVG 时设置是否将 SlidePicture 形状保存为图形标签;Spire.PDF 支持返回 PdfTextMarkupAnnotationWidget 的区域数组值。此外,该版本还成功修复了大量已知问题。详情请阅读以下内容。
版本信息如下:
https://www.e-iceblue.cn/Downloads/Spire-Office-NET.html
新功能:
Workbook wb = new Workbook();
wb.LoadFromFile(inputFile);
Worksheet pivotSheet = wb.Worksheets[0];
XlsPivotTable pivot = (XlsPivotTable)pivotSheet.PivotTables[0]; PivotField dateBaseField = pivot.PivotFields["number"] as PivotField;
dateBaseField.CreateGroup(3000, 3800, 1);
pivot.CalculateData();
wb.SaveToFile(outputFile);
wb.Dispose();问题修复:
新功能:
ppt.SaveToSvgOption.ConvertPictureUsingGraphicTag = true;问题修复:
新功能:
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile(inputFile);
for (int i = 0; i < pdf.Pages.Count; i++)
{
PdfPageBase page = pdf.Pages[i];
PdfAnnotationCollection ancoll = page.Annotations;
for (int j = 0; j < ancoll.Count; j++)
{
PdfRichMediaAnnotationWidget MediaWidget = ancoll[j] as PdfRichMediaAnnotationWidget;
byte[] data = MediaWidget.RichMediaData;
string embedFileName = MediaWidget.RichMediaName;
File.WriteAllBytes(outputFile + embedFileName,data);
}
}// Create a PdfDocument object
PdfDocument doc = new PdfDocument();
// Load a PDF file
doc.LoadFromFile(inputFile);
// Initialize a StringBuilder to store extracted text
StringWriter highlightedTextWriter = new StringWriter();
// Loop through each page in the document
foreach (PdfPageBase page in doc.Pages)
{
// Get all annotations on the page
PdfAnnotationCollection annotations = page.Annotations;
// Loop through the annotations
foreach (PdfAnnotation annotation in annotations)
{
// Check if the annotation is a highlight annotation
if (annotation is PdfTextMarkupAnnotationWidget highlightAnnotation)
{
if (highlightAnnotation.TextMarkupAnnotationType == PdfTextMarkupAnnotationType.Highlight)
{
PdfBrush brush = PdfBrushes.Red;
PdfPen pen = new PdfPen(brush, 1f);
for (int i = 0;i<highlightAnnotation.QuadPoints.Length;i += 2) {
page.Canvas.DrawLine(pen, highlightAnnotation.QuadPoints[i], highlightAnnotation.QuadPoints[i + 1]);
}
}
}
}
}
doc.SaveToFile(outputFile);问题修复:
Spire.PDF 10.11.7 已发布。本次更新新增支持返回 PdfTextMarkupAnnotationWidget 的区域数组值,同时增强了 XPS 和 SVG 到 PDF 以及 PDF 到图片和 Markdown 的转换功能。此外,许多已知问题也在该版本中成功修复,如验证签名不正确的问题。详情请阅读以下内容。
新功能:
// Create a PdfDocument object
PdfDocument doc = new PdfDocument();
// Load a PDF file
doc.LoadFromFile(inputFile);
// Initialize a StringBuilder to store extracted text
StringWriter highlightedTextWriter = new StringWriter();
// Loop through each page in the document
foreach (PdfPageBase page in doc.Pages)
{
// Get all annotations on the page
PdfAnnotationCollection annotations = page.Annotations;
// Loop through the annotations
foreach (PdfAnnotation annotation in annotations)
{
// Check if the annotation is a highlight annotation
if (annotation is PdfTextMarkupAnnotationWidget highlightAnnotation)
{
if (highlightAnnotation.TextMarkupAnnotationType == PdfTextMarkupAnnotationType.Highlight)
{
PdfBrush brush = PdfBrushes.Red;
PdfPen pen = new PdfPen(brush, 1f);
for (int i = 0;i<highlightAnnotation.QuadPoints.Length;i += 2) {
page.Canvas.DrawLine(pen, highlightAnnotation.QuadPoints[i], highlightAnnotation.QuadPoints[i + 1]);
}
}
}
}
}
doc.SaveToFile(outputFile);问题修复:
Spire.Office for Java 9.11.0 已正式发布。在该版本中,Spire.PDF for Java支持使用 ChromeHTMLConverter 将HTML字符串转换为PDF,还支持在使用 ChromeHTMLConverter 转换 HTML 到 PDF 时开启“背景图形”。除此之外,一些在转换、操作、保存Word、Excel、PDF 和 PPT 文档时出现的问题也已成功被修复。更多新功能及问题修复详情如下。
获取 Spire.Office for Java 9.11.0,请点击:https://www.e-iceblue.cn/Downloads/Spire-Office-JAVA.html
问题修复:
问题修复:
新功能:
ChromeHtmlConverter converter = new ChromeHtmlConverter(TestUtil.ChromiumPath);
URI uri = new URI(converter.getUrl());
IWebSocketService webSocketService = (IWebSocketService) WebSocketServiceImpl.create(uri);
converter.setWebSocketService(webSocketService);
String htmlString = "<html><body><p style=\' color:black \'>E-iceblue</p></body></html>";
converter.convertToPdf(htmlString, OutputPath, null);ChromeHtmlConverter converter = new ChromeHtmlConverter(TestUtil.ChromiumPath);
URI uri = new URI(converter.getUrl());
IWebSocketService webSocketService = (IWebSocketService) WebSocketServiceImpl.create(uri);
converter.setWebSocketService(webSocketService);
ConvertOptions options = new ConvertOptions();
options.setTimeout(10 * 1000);
options.setPageSettings(new PageSettings(PaperFormat.A4));
options.getPageSettings().setMarginTop(0);
options.getPageSettings().setMarginBottom(0);
options.getPageSettings().setMarginLeft(0);
options.getPageSettings().setMarginRight(0);
options.getPageSettings().setPrintBackground(true);
converter.convertToPdf(url, OutputPath, options);问题修复:
问题修复:
Spire PDF for Java 10.11.2 现已正式发布。最新版本支持使用 ChromeHTMLConverter 将 HTML 字符串转换为 PDF。此外,一些已知问题也在本次更新中被成功修复,比如 PDF 转 PDFA2A 时,内容丢失的问题。详情请阅读以下内容。
新功能:
ChromeHtmlConverter converter = new ChromeHtmlConverter(TestUtil.ChromiumPath);
URI uri = new URI(converter.getUrl());
IWebSocketService webSocketService = (IWebSocketService) WebSocketServiceImpl.create(uri);
converter.setWebSocketService(webSocketService);
String htmlString = "<html><body><p style=\' color:black \'>E-iceblue</p></body></html>";
converter.convertToPdf(htmlString, OutputPath, null);ChromeHtmlConverter converter = new ChromeHtmlConverter(TestUtil.ChromiumPath);
URI uri = new URI(converter.getUrl());
IWebSocketService webSocketService = (IWebSocketService) WebSocketServiceImpl.create(uri);
converter.setWebSocketService(webSocketService);
ConvertOptions options = new ConvertOptions();
options.setTimeout(10 * 1000);
options.setPageSettings(new PageSettings(PaperFormat.A4));
options.getPageSettings().setMarginTop(0);
options.getPageSettings().setMarginBottom(0);
options.getPageSettings().setMarginLeft(0);
options.getPageSettings().setMarginRight(0);
options.getPageSettings().setPrintBackground(true);
converter.convertToPdf(url, OutputPath, options);问题修复:
Spire.PDF for Python 10.11.2 已发布。本次更新修复了一些已知问题,如 Spire.XLS 和 Spire.PDF 同时使用抛异常的问题。详情请阅读以下内容。
问题修复:
在 Excel 中,对透视表数据进行分组可以将相似的数据归类为有意义的类别,从而更直观地分析数据。例如,按月或按年对日期分组,可以清晰地了解数据随时间变化的趋势;将数字按价格区间或年龄段分组,有助于直观呈现数据分布特点并便于对比和分析。本文将详细讲解如何使用 Spire.XLS for .NET 在 C# 基于日期和数字对 Excel 透视表数据进行分组。
首先,您需要将 Spire.XLS for .NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从此链接下载,也可以通过 NuGet 安装。
PM> Install-Package Spire.XLS
Spire.XLS for .NET 提供了 IPivotField.CreateGroup(DateTime start, DateTime end, PivotGroupByTypes[] groupByArray) 方法,支持按日期和时间对数据透视表的特定字段的数据进行分组。
以下是该方法的参数说明:
以下是 Spire.XLS for .NET 支持的日期和时间分组类别:
以下是使用 Spire.XLS for .NET 基于日期和时间对数据透视表数据进行分组的具体步骤:
using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;
using System;
namespace GroupDataInPivotTable
{
internal class Program
{
static void Main(string[] args)
{
// 创建 Workbook 实例
Workbook workbook = new Workbook();
// 加载 Excel 文件
workbook.LoadFromFile("示例1.xlsx");
// 获取第一个工作表
Worksheet sheet = workbook.Worksheets[0];
// 获取工作表中的第一个数据透视表
XlsPivotTable pt = sheet.PivotTables[0] as XlsPivotTable;
// 获取 “日期” 字段
PivotField ptField = pt.PivotFields["日期"] as PivotField;
// 指定起始和结束日期时间
DateTime start = new DateTime(2024, 1, 1);
DateTime end = new DateTime(2024, 10, 14);
// 创建分组类别数组,例如按天和按月
PivotGroupByTypes[] groupByTypes = new PivotGroupByTypes[]
{
PivotGroupByTypes.Days,
PivotGroupByTypes.Months
};
// 根据指定的分组类别对数据分组
ptField.CreateGroup(start, end, groupByTypes);
// 刷新数据透视表
pt.Cache.IsRefreshOnLoad = true;
// 保存结果文件
workbook.SaveToFile("日期分组.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}
}

除了按日期和时间分组数据,Spire.XLS for .NET 还支持通过 IPivotField.CreateGroup(double startValue, double endValue, double intervalValue) 方法根据数字范围对数据进行分组。
以下是该方法的参数说明:
以下是使用 Spire.XLS for .NET 基于数字对数据透视表数据进行分组的具体步骤:
using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;
namespace GroupDataInPivotTable
{
internal class Program
{
static void Main(string[] args)
{
// 创建 Workbook 实例
Workbook workbook = new Workbook();
// 加载 Excel 文件
workbook.LoadFromFile("示例2.xlsx");
// 获取第一个工作表
Worksheet pivotSheet = workbook.Worksheets[0];
// 获取工作表中的第一个数据透视表
XlsPivotTable pt = pivotSheet.PivotTables[0] as XlsPivotTable;
// 对 “销售额” 字段按数字范围分组
PivotField ptField = pt.PivotFields["销售额"] as PivotField;
ptField.CreateGroup(1500, 4500, 200);
// 计算数据透视表数据
pt.CalculateData();
// 刷新数据透视表
pt.Cache.IsRefreshOnLoad = true;
// 保存结果文件
workbook.SaveToFile("数字分组.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}
}

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
在 Word 文档中合并表格可以将多个表格中的数据整合为一个更大的表格,从而更全面地展示信息。而相反,拆分表格则可以将一个大型表格分割为更小、更易于管理的部分,方便专注于特定的数据集。本文将演示如何使用 Spire.Doc for Python 在 Python 中合并和拆分 Word 表格。
本教程需要用到 Spire.Doc for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 VS Code 中。
pip install Spire.Doc
使用 Spire.Doc for Python,您可以通过将其他表格中的所有行复制到目标表格中,然后删除这些表格,来实现多个表格的合并。以下是具体的操作步骤。
from spire.doc import *
from spire.doc.common import *
# 创建一个 Document 类的实例
doc = Document()
# 加载 Word 文档
doc.LoadFromFile("/Word表格.docx")
# 获取第一节
section = doc.Sections[0]
# 获取该节中的第一个和第二个表格
table1 = section.Tables[0] if isinstance(section.Tables[0], Table) else None
table2 = section.Tables[1] if isinstance(section.Tables[1], Table) else None
# 将第二个表格中的行添加到第一个表格中
for i in range(table2.Rows.Count):
table1.Rows.Add(table2.Rows[i].Clone())
# 删除第二个表格
section.Tables.Remove(table2)
# 保存结果文件
section.Document.SaveToFile("/合并表格.docx", FileFormat.Docx2013)
doc.Close()

要将一个表格拆分为两个或多个表格,您需要先创建一个新表格,然后将原表格中指定的行复制到新表格中,最后从原表格中删除这些行。以下是具体的操作步骤。
from spire.doc import *
from spire.doc.common import *
# 创建一个 Document 实例
doc = Document()
# 加载一个 Word 文档
doc.LoadFromFile("/合并表格.docx")
# 获取第一节
section = doc.Sections.get_Item(0)
# 获取节中的第一个表格
table = section.Tables[0] if isinstance(section.Tables[0], Table) else None
# 指定从第五行开始拆分
splitIndex = 4
# 新建一个 Table 对象
newTable = Table(section.Document, True)
# 将这些行(第五行到最后一行)添加到新表中
for i in range(splitIndex, table.Rows.Count):
newTable.Rows.Add(table.Rows[i].Clone())
# 从原表格删除这些行
for i in range(table.Rows.Count - 1, splitIndex - 1, -1):
table.Rows.RemoveAt(i)
# 将新的表格添加到该节中
section.Tables.Add(newTable)
# 保存结果文档
section.Document.SaveToFile("/拆分表格.docx", FileFormat.Docx2013)
doc.Close()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
向 PDF 文档添加交互元素,如导航按钮、弹窗提示以及文件打开按钮,可以显著增强用户的参与度和文档的功能性,同时使得文档更加专业。借助 Spire.PDF for Java 库,开发者能够轻松地将这些互动功能整合到 PDF 文档中,从而创造出既多样化又用户友好的文档内容。本文将介绍如何使用 Spire.PDF for Java 通过 Java 代码在 PDF 文档中添加各种动作。
首先,您需要在 Java 程序中添加 Spire.Pdf.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.pdf</artifactId>
<version>12.9.0</version>
</dependency>
</dependencies>
Spire.PDF for Java 为开发者提供了向 PDF 文档添加各种动作的能力,例如文档内跳转动作、文件打开动作、音频播放动作和 JavaScript 执行动作。以下是常用动作对应的类及其描述的表格:
| 类名 | 描述 |
| PdfGoToAction | 表示跳转到当前文档中的特定位置的动作 |
| PdfLaunchAction | 表示打开文件的动作 |
| PdfJavaScriptAction | 表示执行 JavaScript 代码的动作 |
| PdfSoundAction | 表示播放音频的动作 |
有关更多动作类及其描述,请参考 Spire.PDF for Java 动作相关 API 文档。
向 PDF 文档添加动作主要通过以下两种方式:
1、使用注释添加动作
此方法通过创建一个动作并将其链接到页面上的注释来实现。当用户点击注释时,动作将被触发。
步骤:
2、将动作分配到文档事件
动作还可以分配到文档级别的事件(例如打开、关闭或打印文档)。当指定的事件发生时,与其绑定的动作会自动触发。
步骤:
开发者可以使用 PdfGoToAction 类在 PDF 文档中创建导航动作,让用户跳转到文档中的特定位置。以下是一个 Java 代码示例,演示如何在 PDF 文档中创建导航动作。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.actions.PdfGoToAction;
import com.spire.pdf.annotations.PdfActionAnnotation;
import com.spire.pdf.general.PdfDestination;
import com.spire.pdf.graphics.PdfBrushes;
import com.spire.pdf.graphics.PdfStringFormat;
import com.spire.pdf.graphics.PdfTextAlignment;
import com.spire.pdf.graphics.PdfTrueTypeFont;
import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
public class AddNavigationActionPDF {
public static void main(String[] args) {
// 创建一个 PdfDocument 实例
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文件
pdf.loadFromFile("示例.pdf");
// 创建一个 PdfDestination 对象
PdfDestination destination = new PdfDestination(2, new Point2D.Float(0, 0), 0.8f);
// 使用 PdfDestination 对象创建一个 PdfGoToAction 对象
PdfGoToAction goToAction = new PdfGoToAction(destination);
// 在第一页上绘制一个矩形和提示文本
Rectangle2D rect = new Rectangle2D.Float(20, 35, 100, 15);
pdf.getPages().get(0).getCanvas().drawRectangle(PdfBrushes.getLightGray(), rect);
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("HarmonyOS Sans SC", Font.BOLD, 12), true);
PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Center);
pdf.getPages().get(0).getCanvas().drawString("点击跳转到第2页", font, PdfBrushes.getBlack(), rect, format);
// 使用 PdfGoToAction 对象创建一个 PdfActionAnnotation 对象
PdfActionAnnotation actionAnnotation = new PdfActionAnnotation(rect, goToAction);
// 将注释添加到第一页
pdf.getPages().get(0).getAnnotations().add(actionAnnotation);
// 保存文档
pdf.saveToFile("output/PDF文档内跳转动作.pdf");
pdf.close();
}
}

开发者可以使用 PdfLaunchAction 类在 PDF 文档中创建文件打开动作。以下是一个 Java 代码示例,展示如何向 PDF 文档添加文件打开动作。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.actions.PdfFilePathType;
import com.spire.pdf.actions.PdfLaunchAction;
import com.spire.pdf.annotations.PdfActionAnnotation;
import com.spire.pdf.graphics.PdfBrushes;
import com.spire.pdf.graphics.PdfStringFormat;
import com.spire.pdf.graphics.PdfTextAlignment;
import com.spire.pdf.graphics.PdfTrueTypeFont;
import java.awt.*;
import java.awt.geom.Rectangle2D;
public class AddFileOpenActionPDF {
public static void main(String[] args) {
// 创建一个 PdfDocument 实例
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文件
pdf.loadFromFile("示例.pdf");
// 创建一个 PdfLaunchAction 对象并设置文件路径
PdfLaunchAction launchAction = new PdfLaunchAction("C:/示例.pdf", PdfFilePathType.Absolute);
// 在第一页上绘制一个矩形和提示文本
Rectangle2D rect = new Rectangle2D.Float(20, 35, 100, 15);
pdf.getPages().get(0).getCanvas().drawRectangle(PdfBrushes.getLightGray(), rect);
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("HarmonyOS Sans SC", Font.BOLD, 12), true);
PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Center);
pdf.getPages().get(0).getCanvas().drawString("点击打开文件", font, PdfBrushes.getBlack(), rect, format);
// 使用 PdfLaunchAction 对象创建一个 PdfActionAnnotation 对象
PdfActionAnnotation actionAnnotation = new PdfActionAnnotation(rect, launchAction);
// 将注释添加到第一页
pdf.getPages().get(0).getAnnotations().add(actionAnnotation);
// 保存文档
pdf.saveToFile("output/PDF文件打开动作.pdf");
pdf.close();
}
}

PdfSoundAction 类可用于在 PDF 文档中处理音频播放,从而实现背景音乐、语音提醒等功能。以下是一个 Java 代码示例,演示如何在 PDF 文档中创建音频动作。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.actions.PdfSoundAction;
import com.spire.pdf.annotations.PdfActionAnnotation;
import com.spire.pdf.general.PdfSoundChannels;
import com.spire.pdf.general.PdfSoundEncoding;
import com.spire.pdf.graphics.PdfImage;
import java.awt.geom.Rectangle2D;
public class AddSoundActionPDF {
public static void main(String[] args) {
// 创建一个 PdfDocument 实例
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文件
pdf.loadFromFile("示例.pdf");
// 创建一个 PdfSoundAction 对象并设置音频属性
PdfSoundAction soundAction = new PdfSoundAction("Wave.wav");
soundAction.setRepeat(false); // 禁用循环播放
soundAction.getSound().setBits(16); // 设置音频位数
soundAction.getSound().setChannels(PdfSoundChannels.Stereo); // 设置立体声通道
soundAction.getSound().setEncoding(PdfSoundEncoding.Signed); // 设置音频编码
soundAction.getSound().setRate(44100); // 设置采样率
// 在第一页上绘制声音图标
PdfImage image = PdfImage.fromFile("Sound.jpg");
pdf.getPages().get(0).getCanvas().drawImage(image, new Rectangle2D.Float(40, 40, image.getWidth(), image.getHeight()));
// 使用 PdfSoundAction 对象在声音图标的位置创建一个 PdfActionAnnotation 对象
Rectangle2D rect = new Rectangle2D.Float(40, 40, image.getWidth(), image.getHeight());
PdfActionAnnotation actionAnnotation = new PdfActionAnnotation(rect, soundAction);
// 将注释添加到第一页
pdf.getPages().get(0).getAnnotations().add(actionAnnotation);
// 保存文档
pdf.saveToFile("output/PDF音频播放动作.pdf");
pdf.close();
}
}

PdfJavaScriptAction 类允许开发者在 PDF 文档中创建 JavaScript 动作,从而实现动态表单的创建、用户输入的验证以及任务的自动化等功能。以下是一个 Java 代码示例,展示如何向 PDF 文档添加 JavaScript 动作。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.actions.PdfJavaScriptAction;
public class AddJavaScriptActionPDF {
public static void main(String[] args) {
// 创建一个 PdfDocument 实例
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文件
pdf.loadFromFile("示例.pdf");
// 定义 JavaScript 代码,并使用它创建一个 PdfJavaScriptAction 实例
String jsCode = """
app.alert({
cMsg: '欢迎阅读销售数据分析报告!\\n\\n这份报告包含了公司在过去一年内的销售数据,包括销售额、产品类别、销售地区和销售人员等信息。希望这份报告能帮助您了解公司的销售情况,识别销售趋势并制定相应的决策。',
nIcon: 3,
cTitle: '文档介绍'
});
""";
PdfJavaScriptAction javaScriptAction = new PdfJavaScriptAction(jsCode);
// 设置 JavaScript 动作为 PDF 文件打开后执行的动作
pdf.setAfterOpenAction(javaScriptAction);
// 保存文档
pdf.saveToFile("output/PDF JavaScript动作.pdf");
pdf.close();
}
}

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Doc for Java 12.11.9 现已正式发布。该版本优化了 Word 到 PDF 的转换,同时还还修复了一些在加载、比较 Word 文档时出现的问题。详情请查阅以下内容。
问题修复:
Spire.PDF for C++ 10.7.3 现已正式发布。最新版本修复了在转换 OFD 为 PDF 时,高亮文本效果不正确的问题。更多详情请查阅以下内容。
问题修复: