数字签名作为一层重要的安全保护,能够确保 Excel 文件在签署后未被修改,并且能够验证文件的来源。然而,在某些情况下,文档管理人员可能需要检测并移除这些数字签名,例如需要对文档进行合并、更新等操作,或需要在不支持数字签名的系统中操作文件。本文将演示如何使用 Spire.XLS for Python 通过 Python 代码检测 Excel 文件是否包含数字签名,以及移除 Excel 文件中的数字签名,为批量处理包含数字签名的 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 类来处理 Excel 文件,并可以通过 Workbook.IsDigitallySigned 属性检查文件是否包含数字签名。开发者可以通过该属性返回的布尔值来判断 Excel 文件是否已签名。
检测 Excel 文件是否包含数字签名的具体步骤如下:
Python
from spire.xls import *
# 创建Workbook的实例
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("示例.xlsx")
# 检查工作簿是否被数字签名
if not workbook.IsDigitallySigned:
print("该工作簿没有数字签名。")
else:
print("该工作簿已被数字签名。")

开发者可以使用 Workbook.RemoveAllDigitalSignatures() 方法轻松删除 Excel 工作簿中的所有数字签名。具体步骤如下:
from spire.xls import *
# 创建Workbook的实例
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("示例.xlsx")
# 移除数字签名
workbook.RemoveAllDigitalSignatures()
# 保存文档
workbook.SaveToFile("output/移除Excel数字签名.xlsx", FileFormat.Version2016)
workbook.Dispose()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
在 Excel 数据透视表中,筛选器是一种控制显示内容的工具。它允许用户根据特定的条件筛选数据,以确保只展示相关信息。例如,用户可以按时间、地区、产品类别或其他关键字段进行筛选,从而减少了无关数据的干扰,提升数据分析的效率。本文将演示如何使用 Spire.XLS for .NET 在 C# 中为 Excel 数据透视表添加筛选器。
首先,您需要将 Spire.XLS for .NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从此链接下载,也可以通过 NuGet 安装。
PM> Install-Package Spire.XLS
Spire.XLS for .NET 提供了 XlsPivotTable.ReportFilters.Add() 方法,用于向 Excel 数据透视表添加报表筛选器。具体步骤如下:
using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;
namespace AddReportFilter
{
internal class Program
{
static void Main(string[] args)
{
// 创建 Workbook 对象
Workbook workbook = new Workbook();
// 加载 Excel 文件
workbook.LoadFromFile("示例.xlsx");
// 获取第一个工作表
Worksheet sheet = workbook.Worksheets[0];
// 获取第一个数据透视表
XlsPivotTable pt = sheet.PivotTables[0] as XlsPivotTable;
// 创建报表筛选器
PivotReportFilter reportFilter = new PivotReportFilter("产品", true);
// 将报表筛选器添加到数据透视表
pt.ReportFilters.Add(reportFilter);
// 保存文件
workbook.SaveToFile("报表筛选器.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}
}

你可以使用 XlsPivotTable.RowFields[index].AddValueFilter() 或 XlsPivotTable.RowFields[index].AddLabelFilter() 方法为 Excel 数据透视表中的指定行字段添加值筛选器或标签筛选器。具体步骤如下:
using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;
namespace AddRowFilter
{
internal class Program
{
static void Main(string[] args)
{
// 创建 Workbook 对象
Workbook workbook = new Workbook();
// 加载 Excel 文件
workbook.LoadFromFile("示例.xlsx");
// 获取第一个工作表
Worksheet sheet = workbook.Worksheets[0];
// 获取第一个数据透视表
XlsPivotTable pt = sheet.PivotTables[0] as XlsPivotTable;
// 为第一个行字段添加值筛选器
pt.RowFields[0].AddValueFilter(PivotValueFilterType.GreaterThan, pt.DataFields[0], 5000, null);
// 或为第一个行字段添加标签筛选器
// pt.RowFields[0].AddLabelFilter(PivotLabelFilterType.Equal, "Mike", null);
// 计算数据透视表数据
pt.CalculateData();
// 保存文件
workbook.SaveToFile("行字段筛选器.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}
}

要为数据透视表中的指定列字段添加值筛选器或标签筛选器,你可以使用 XlsPivotTable.ColumnFields[index].AddValueFilter() 或 XlsPivotTable.ColumnFields[index].AddLabelFilter() 方法。具体步骤如下:
using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;
namespace AddColumnFilter
{
internal class Program
{
static void Main(string[] args)
{
// 创建 Workbook 对象
Workbook workbook = new Workbook();
// 加载 Excel 文件
workbook.LoadFromFile("示例.xlsx");
// 获取第一个工作表
Worksheet sheet = workbook.Worksheets[0];
// 获取第一个数据透视表
XlsPivotTable pt = sheet.PivotTables[0] as XlsPivotTable;
// 为第一个列字段添加标签筛选器
pt.ColumnFields[0].AddLabelFilter(PivotLabelFilterType.Equal, "笔记本电脑", null);
// 或为第一个列字段添加值筛选器
// pt.ColumnFields[0].AddValueFilter(PivotValueFilterType.Between, pt.DataFields[0], 5000, 10000);
// 计算数据透视表数据
pt.CalculateData();
// 保存文件
workbook.SaveToFile("列字段筛选器.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}
}

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.PDF for Java 10.10.0 更新已发布。本次更新新增支持在合并文档报错时返回错误文档的信息。此外,一些已知问题也在该版本中成功修复,如加密 PDF 文档后,红色印章变成黑色的问题。详情请阅读以下内容。
新功能:
问题修复:
当图片覆盖在文字的上方,文本会被图片遮盖从而无法阅读。这时,您可以通过设置图片的透明度来显示文字。本文将介绍怎样使用 Spire.Presentation for Java 将图片插入到幻灯片的特定位置,并通过 Java 设置 PowerPoint 中图片的透明度。
首先,您需要在 Java 程序中添加 Spire.Presentation.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.presentation</artifactId>
<version>11.9.10</version>
</dependency>
</dependencies>
在此代码示例中涉及到多个类和方法,因此我们提供了下表,方便您更好地了解它们。
| 名字 | 释义 |
| IAutoShape Interface | 表示形状 |
| ShapeList Class | 表示形状的集合 |
| PictureFillFormat Class | 表示图片填充的格式 |
| ShapeList.appendShape(ShapeType.shapeType, Rectangle2D.Double) Method | 添加新图片到列表 |
| IAutoShape.getLine().setFillType(FillFormatType.value) Method | 设置线条的填充格式 |
| IAutoShape.getFill().setFillType(FillFormatType.value) Method | 设置形状的填充格式 |
| IAutoShape.getFill().getPictureFill() Method | 获取图片填充格式 |
| PictureFillFormat.setFillType(PictureFillType.value) Method | 设置图片填充模式 |
| PictureFillFormat.getPicture().setUrl(java.lang.String value) Method | 设置填充图像的图片的 URL |
| PictureFillFormat.getPicture().setTransparency() Method | 设置图片填充的透明度 |
下面是设置 PowerPoint 中图像透明度的具体步骤:
import com.spire.presentation.*;
import com.spire.presentation.drawing.*;
import java.awt.geom.Rectangle2D;
public class SetImageTransparency {
public static void main(String[] args) throws Exception {
// 创建一个 Presentation 类的实例
Presentation presentation = new Presentation();
// 加载 PowerPoint 示例文档
presentation.loadFromFile("/空白幻灯片.pptx");
// 在第一页幻灯片的指定位置插入一个形状
Rectangle2D.Double rect1 = new Rectangle2D.Double(50, 130, 275, 150);
IAutoShape shape = presentation.getSlides().get(0).getShapes().appendShape(ShapeType.RECTANGLE, rect1);
// 用图片填充这个形状
shape.getLine().setFillType(FillFormatType.NONE);// 设置填充格式
shape.getFill().setFillType(FillFormatType.PICTURE);// 设置填充的类型
shape.getFill().getPictureFill().getPicture().setUrl("https://cdn.e-iceblue.cn/Logo1.png");// 设置链接图片的 URL
shape.getFill().getPictureFill().setFillType(PictureFillType.STRETCH);// 设置图片填充模式
// 设置图片的透明度
shape.getFill().getPictureFill().getPicture().setTransparency(50);
// 保存修改后的 PowerPoint 文档
presentation.saveToFile("/设置图片透明度.pptx", FileFormat.PPTX_2010);
}
}

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.OCR 1.9.12 现已正式发布,该版本新增了 OCR 使用的新模型。同时,一些已知问题也在此次更新中被成功修复,例如字符识别错误和多次读取时字符识别不一致的问题。更多详情请查阅以下内容。
新功能:
OcrScanner scanner = new OcrScanner();
ConfigureOptions configureOptions = new ConfigureOptions();
configureOptions.ModelPath = "ocr_model\\win-x64\\";
// The default is English(for exmple English, Chinese, Chinesetraditional, French, German, Japan, or Korean)
configureOptions.Language = "Chinese";
scanner.ConfigureDependencies(configureOptions);
scanner.Scan("1.png");
string text = scanner.Text.ToString();
File.WriteAllText("result.txt", text);问题修复:
Spire.Office 9.9.0 已正式发布。该版本新增了一些功能, Spire.XLS 支持识别 Msg 格式的 OLE 对象和对 DTD 进行禁用处理; Spire.Presentation 支持在执行转换功能时设置全局的字体目录,还增加了两个属性用于获取图表数据源的最后一行和最后一列。除此之外,一些在操作 Excel、PDF 和 PPT 文档时出现的问题也得以成功解决。更多新功能及问题修复详情如下。
该版本涵盖了最新版的 Spire.Doc、Spire.PDF、Spire.XLS、Spire.Presentation、Spire.DataExport、Spire.Barcode、Spire.DocViewer、Spire.PDFViewer、Spire.OfficeViewer、Spire.Email。
版本信息如下:
https://www.e-iceblue.cn/Downloads/Spire-Office-NET.html
新功能:
Workbook wb = new Workbook();
wb.LoadFromFile(inputFile);
Worksheet sheet =wb.Worksheets[0];
OleObjectType type;
if (sheet.HasOleObjects)
{
for (int i = 0; i < sheet.OleObjects.Count; i++)
{
var Object = sheet.OleObjects[i];
type = sheet.OleObjects[i].ObjectType;
switch (type)
{
case OleObjectType.Msg:
File.WriteAllBytes(outputFile_1, Object.OleData);
break;
......
}
}
}Workbook workbook = new Workbook();
workbook.ProhibitDtd = true;
workbook.LoadFromFile(inputFile);
workbook.SaveToFile(outputFile, ExcelVersion.Version2013);
workbook.Dispose();Workbook workbook = new Workbook();
workbook.Worksheets[0].Range["A3"].Value2 = 1234;
workbook.Worksheets[0].Range["C3"].Formula = "=BAHTTEXT(A3)";
workbook.Worksheets[0].Range["A9"].Value = "1234";
workbook.Worksheets[0].Range["C9"].Formula = "=BAHTTEXT(A9)";
workbook.SaveToFile(outputFile, ExcelVersion.Version2013);
workbook.Dispose(); XlsPivotTable pt1 = workbook.Worksheets["PivotTable_1"].PivotTables[0] as XlsPivotTable;
pt1.RowFields[0].AddValueFilter(PivotValueFilterType.Between, pt1.DataFields[0], 100000, 1000000);
pt1.ColumnFields[0].AddValueFilter(PivotValueFilterType.Between, pt1.DataFields[0], 100000, 1000000);
pt1.CalculateData();workbook.Worksheets[0].Range["A1"].Formula = "=TEXTBEFORE(\"Red riding hood’s, red hood\", \"hood\")";workbook.Worksheets[0].Range["B2:D2"].FormulaArray = "=TEXTSPLIT(A2, \" \")";workbook.Worksheets[0].Range["A3"].Formula = "=TEXTAFTER(\"Red riding hood’s, red hood\", \"\")";问题修复:
问题修复:
新功能:
Presentation.SetCustomFontsDirctory("myfonts");Presentation ppt = new Presentation();
ppt.LoadFromFile(inputFile);
StringBuilder stringBuilder= new StringBuilder();
IChart chart = ppt.Slides[0].Shapes[0] as IChart;
if (chart != null)
{
int lastRow = chart.ChartData.LastRowIndex;
int lastCol = chart.ChartData.LastColIndex;
sb.AppendLine("lastRow" + lastRow + "\r\n" + "lastColumn" + lastCol);
int dataRow = chart.Series[2].Values[chart.Series[2].Values.Count - 1].Row;
int dataColumn = chart.Series[2].Values[chart.Series[2].Values.Count - 1].Column;
sb.AppendLine("dataRow" + datarow + "\r\n" + "dataColumn" + dataColumn);
chart.ChartData.Clear(dataRow + 1, 0, lastRow + 1, lastCol + 1);
chart.ChartData.Clear(0, dataColumn + 1, lastRow + 1, lastCol + 1);
}
File.WriteAllText(outputFile_T,stringBuilder.ToString());
ppt.SaveToFile(outputFile, FileFormat.Pptx2013);
ppt.Dispose();问题修复:
Spire.Office for Java 9.9.0 已发布。在该版本中,Spire.Doc for Java 支持判断书签是否被隐藏;Spire.PDF for Java 支持提取指定区域的文本;Spire.XLS for Java 支持修订功能;Spire.Presentation for Java 支持获取 PowerPoint 文件中所有内嵌字体的名称。此外,本次更新还修复了许多已知问题。详情请阅读以下内容。
获取 Spire.Office for Java 9.9.0 请点击:https://www.e-iceblue.cn/Downloads/Spire-Office-JAVA.html
新功能:
问题修复:
新功能:
PdfStandardsConverter convert= new PdfStandardsConverter(outputFile_pdf);
convert.getOptions().setPreserveAllowedMetadata(true);
convert.toPdfA2A(outputFile_pdfA2A);PdfPageBase page = pdf.getPages().get(0);
PdfTextReplacer replacer= new PdfTextReplacer (page);
replacer.getOptions().setReplacementArea(new Rectangle2D.Float(10, 0, 841, 150));
replacer.getOptions().setReplaceType(EnumSet.of(ReplaceActionType.WholeWord));
replacer.replaceAllText("SQL","Now SQL");问题修复:
新功能:
Workbook workbook = new Workbook();
workbook.loadFromFile("input.xlsx");
workbook.setTrackedChanges(true);
workbook.acceptAllTrackedChanges();
workbook.saveToFile("output.xlsx", ExcelVersion.Version2013);
workbook.dispose();问题修复:
新功能:
ArrayList<String> embedFonts = ppt.getEmbedFonts();问题修复:
尊敬的顾客朋友:
2024国庆将至,成都冰蓝科技有限公司全体职工在此向您致以最诚挚的祝福与问候!为满足节日期间的客户需求,我司就国庆放假安排做出如下通知:
因放假给您带来的不便,我们深表歉意。
恭祝:节日快乐,万事顺遂!
邮件地址:
在处理 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 允许您指定一个矩形区域,然后使用 PdfPageBase.CropBox 属性裁剪页面中的指定区域。具体步骤如下:
from spire.pdf.common import *
from spire.pdf import *
# 创建PdfDocument对象
pdf = PdfDocument()
# 加载PDF文件
pdf.LoadFromFile("示例文档.pdf")
# 获取第一张页面
page = pdf.Pages.get_Item(0)
# 按指定区域裁剪页面
page.CropBox = RectangleF(0.0, 50.0, 600.0, 320.0)
# 保存结果文件
pdf.SaveToFile("裁剪PDF.pdf")
pdf.Close()

为了完成这项任务,你可以使用 PdfDocument.SaveAsImage(pageIndex: int) 方法将裁剪了的 PDF 页面转换为图像流,然后再进一步保存为指定的图片格式。具体步骤如下:
from spire.pdf.common import *
from spire.pdf import *
# 创建PdfDocument对象
pdf = PdfDocument()
# 加载PDF文件
pdf.LoadFromFile("示例文档.pdf")
# 获取第一张页面
page = pdf.Pages.get_Item(0)
# 按指定区域裁剪页面
page.CropBox = RectangleF(0.0, 50.0, 600.0, 320.0)
# 将页面转换为图片
with pdf.SaveAsImage(0) as imageS:
# 将图像保存为 PNG 文件
imageS.Save("裁剪PDF导出为图片.png")
pdf.Close()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
将 PDF 文档转换为更灵活、更易编辑的格式,如 Markdown,已成为开发人员和内容创作者的常见需求。这样的转换不仅有助于更轻松地进行文档编辑和版本控制,还能增强内容在不同平台和应用程序之间的可移植性,特别适合网络发布及分享。通过使用 Spire.PDF for .NET,开发人员可以自动化这一转换过程,同时确保在生成的 Markdown 文件中保留原始 PDF 的丰富格式和结构。
本文将演示如何使用 Spire.PDF for .NET 通过 C# 代码将 PDF 文档转换为 Markdown 格式。
首先,您需要添加 Spire.PDF for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。
PM> Install-Package Spire.PDF
借助 Spire.PDF for .NET,开发者可以用 PdfDocument.LoadFromFile(string filename) 方法从文件载入 PDF 文档,然后用 PdfDocument.SaveToFile(string filename, FileFormat fileFormat) 方法将其转换为想要的格式并保存。在转换 PDF 文档为 Markdown 文件时,只需要在调用保存方法时将 FileFormat.Markdown 枚举类作为参数即可。
以下是详细操作步骤:
using Spire.Pdf;
namespace PDFToMarkdown
{
class Program
{
static void Main(string[] args)
{
// 创建PdfDocument类的实例
PdfDocument pdf = new PdfDocument();
// 加载PDF文档
pdf.LoadFromFile("示例.pdf");
// 将文档转换为Markdown文件
pdf.SaveToFile("output/PDF转Markdown.md", FileFormat.Markdown);
// 释放资源
pdf.Close();
}
}
}
原 PDF 文档:

转换出的 Markdown 文件:

除了直接读取文件进行操作外,Spire.PDF for .NET 还支持使用 PdfDocument.LoadFromStream() 方法从流中加载 PDF 文档,然后使用 PdfDocument.SaveToStream() 方法将其转换为 Markdown 文件流。使用流可以减少内存使用量,支持大文件处理,实现实时数据传输,同时还能简化与其他系统的数据交换。
通过流将 PDF 文档转换为 Markdown 文件的详细步骤如下:
using Spire.Pdf;
using System.IO;
using System.Net.Http;
namespace PDFToMarkdownByStream
{
class Program
{
static async Task Main(string[] args)
{
// 创建 PdfDocument 类的实例
PdfDocument pdf = new PdfDocument();
// 从 URL 下载 PDF 文档作为字节数组
using (HttpClient client = new HttpClient())
{
byte[] pdfBytes = await client.GetByteArrayAsync("http://example.com/Sample.pdf");
// 使用字节数组创建 MemoryStream
using (MemoryStream inputStream = new MemoryStream(pdfBytes))
{
// 从流中加载 PDF 文档
pdf.LoadFromStream(inputStream);
// 创建另一个 MemoryStream 对象来存储 Markdown 文件
using (MemoryStream outputStream = new MemoryStream())
{
// 将 PDF 文档转换为 Markdown 文件流
pdf.SaveToStream(outputStream, FileFormat.Markdown);
outputStream.Position = 0; // 重置流的位置以便后续读取
// 上传结果流或将其写入文件
await client.PostAsync("http://example.com/upload", new StreamContent(outputStream));
File.WriteAllBytes("output.md", outputStream.ToArray());
}
}
}
// 释放资源
pdf.Close();
}
}
}
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。