Spire.Presentation for .NET 10.8.2 现已发布, 该版本更新了 .NET 6.0 和 .NET Core 2.0 框架下的依赖项,并修复了在将 PPTX 转换为 PDF 时出现的一系列问题。更多详细信息如下所示。
更新依赖项::
Microsoft.Win32.Registry >= 4.5.0
System.Drawing.Common >= 4.7.2
System.Security.Permissions >= 4.7.0
System.Text.Encoding.CodePages >= 4.5.0
System.Security.Cryptography.Pkcs >= 4.7.0
System.Security.Cryptography.Xml >=4.7.1
HarfBuzzSharp >=8.3.0.1
Microsoft.Win32.Registry >= 5.0.0
System.Drawing.Common >= 6.0.0
System.Security.Permissions >= 6.0.0
System.Text.Encoding.CodePages >= 6.0.0
System.Security.Cryptography.Pkcs >= 6.0.5
System.Security.Cryptography.Xml >= 6.0.2
HarfBuzzSharp >=8.3.0.1
问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-NET.html
Spire.PDF for Java 11.8.3 现已正式发布。该版本优化了 PDF 转 OFD 的内存消耗,并且还修复了一个在转换 SVG 到 PDF 文件时遇到的问题。详情请查阅以下内容。
优化:
问题修复:

水印技术是保护文档安全、声明所有权及防止未经授权复制的关键手段。无论是分发草稿还是为最终交付成果添加品牌标识,使用水印都能有效保护您的内容。本教程将指导您如何使用 Spire.PDF for Python 在 Python 中为 PDF 文件添加水印 。
我们将逐步演示如何插入文字水印与图片水印、调整透明度与定位,并解决常见问题——所有步骤均配有清晰且注释完善的代码示例。
Spire.PDF for Python 是一款功能强大的 PDF 处理库,特别针对水印功能提供以下特性:
开始前请确保已通过以下命令安装库:
pip install spire.pdf
以下代码演示如何为 PDF 每页添加倾斜的"禁止复制"文字水印,包含字号、颜色、位置、旋转角度及透明度的专业级设置:
from spire.pdf import *
from spire.pdf.common import *
import math
# 创建PdfDocument类的对象
doc = PdfDocument()
# 从指定路径加载PDF文档
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf")
# 为水印字体创建PdfTrueTypeFont类的对象
font = PdfTrueTypeFont("黑体", 48.0, 0, True)
# 指定水印文本
text = "禁 止 复 制"
# 测量文本的尺寸以确保正确定位
text_width = font.MeasureString(text).Width
text_height = font.MeasureString(text).Height
# 循环遍历文档中的每一页
for i in range(doc.Pages.Count):
# 获取当前页面
page = doc.Pages.get_Item(i)
# 保存当前画布状态
state = page.Canvas.Save()
# 计算页面的中心坐标
x = page.Canvas.Size.Width / 2
y = page.Canvas.Size.Height / 2
# 将坐标系平移到中心,使页面的中心成为原点(0, 0)
page.Canvas.TranslateTransform(x, y)
# 将画布逆时针旋转45度以显示水印
page.Canvas.RotateTransform(-45.0)
# 设置水印的透明度
page.Canvas.SetTransparency(0.4)
# 使用负偏移量在中心位置绘制水印文本
page.Canvas.DrawString(text, font, PdfBrushes.get_Blue(), PointF(-text_width / 2, -text_height / 2))
# 恢复画布状态,以防止变换影响后续绘图
page.Canvas.Restore(state)
# 将修改后的文档保存到新的PDF文件
doc.SaveToFile("output/TextWatermark.pdf")
# 释放资源
doc.Dispose()
代码解析:
效果图:

以下代码演示如何为PDF每一页添加半透明图片水印,确保精准定位并呈现专业视觉效果。
from spire.pdf import *
from spire.pdf.common import *
# 创建PdfDocument类的对象
doc = PdfDocument()
# 从指定路径加载PDF文档
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf")
# 从指定路径加载水印图像
image = PdfImage.FromFile("C:\\Users\\Administrator\\Desktop\\logo.png")
# 获取加载的图像的宽度和高度以进行定位
imageWidth = float(image.Width)
imageHeight = float(image.Height)
# 循环遍历文档中的每一页以应用水印
for i in range(doc.Pages.Count):
# 获取当前页面
page = doc.Pages.get_Item(i)
# 将水印的透明度设置为50%
page.Canvas.SetTransparency(0.5)
# 获取当前页面的尺寸
pageWidth = page.ActualSize.Width
pageHeight = page.ActualSize.Height
# 计算x和y坐标以将图像居中放置在页面上
x = (pageWidth - imageWidth) / 2
y = (pageHeight - imageHeight) / 2
# 在计算出的中心位置绘制图像
page.Canvas.DrawImage(image, x, y, imageWidth, imageHeight)
# 将修改后的文档保存到新的PDF文件
doc.SaveToFile("output/ImageWatermark.pdf")
# 释放资源
doc.Dispose()
代码解析:
效果图:

除了水印之外,您还可以为 PDF 添加图章。与水印固定位置不同,图章可以自由移动或删除,为文档批注提供了更大的灵活性。
借助 Spire.PDF for Python 库,为 PDF 文档添加水印既简单便捷又功能强大。您既可以批量添加醒目的"机密"警示水印,也能嵌入品牌 Logo 作为优雅的背景标识。该库支持灵活的坐标定位、透明度调节、旋转等高级功能,让您能够根据文档类型和使用场景,轻松打造专业级的水印解决方案。
可以,您只需在遍历PDF页面的循环中结合使用两种水印添加方法即可。
与文字水印示例类似,在绘制图片前使用 Canvas.RotateTransform( 角度) 方法即可实现旋转。
支持。当使用PNG图片作为水印时,Spire.PDF会保留其原有的透明度。
完全可以。您可以在页面循环中添加条件判断逻辑,根据页码或其他标准为不同页面应用不同的水印。
如果您需要去除生成文档中的评估提示或解除功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。

在现代业务应用中,在 ASP.NET 环境下扫描条码和二维码的需求非常常见。无论是票务验证、支付处理,还是库存管理,集成一个ASP.NET 二维码扫描器或条码读取功能,都能显著提升系统的效率和准确性。
本教程将演示如何使用 Spire.Barcode for .NET 和 C#,在 ASP.NET 中实现完整的条码扫描解决方案。我们将创建一个 ASP.NET Core Web 应用,能够从上传的图片中读取二维码和多种条码格式,识别准确,并可方便地集成到现有项目中。
教程概览
步骤 1:创建项目
创建一个新的 ASP.NET Core Razor Pages 项目,作为扫描功能的基础。可通过以下命令创建新项目,也可在 Visual Studio 中手动配置:
dotnet new webapp -n QrBarcodeScanner
cd QrBarcodeScanner
步骤 2:安装 Spire.Barcode for .NET
安装 Spire.Barcode for .NET NuGet 包。该组件支持解码多种条码类型,并提供简单易用的 API。可在 NuGet 包管理器中搜索或使用以下命令安装:
dotnet add package Spire.Barcode
Spire.Barcode for .NET 内置支持二维码和多种条码格式,如 Code128、EAN-13 和 Code39,无需额外的图像处理库即可集成到 ASP.NET 项目。更多支持的条码类型,请参考 BarCodeType API 文档。
对于小型项目,也可使用 Free Spire.Barcode for .NET。
二维码和条码的扫描功能主要包括两部分:
我们先实现后端,确保扫描流程正确,然后再连接一个简洁的 Razor Page 前端,从而构建一个完整的二维码与条码扫描解决方案。
后端代码将上传的文件读入内存,并使用 Spire.Barcode 进行扫描,可通过内存流或文件路径处理。扫描结果会返回给前端。此实现支持二维码及其他条码类型,无需针对格式编写额外逻辑。
Index.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Spire.Barcode;
public class IndexModel : PageModel
{
[BindProperty]
public IFormFile Upload { get; set; } // 上传的文件
public string Result { get; set; } // 扫描结果
public string UploadedImageBase64 { get; set; } // 用于预览的 Base64 字符串
public void OnPost()
{
if (Upload != null && Upload.Length > 0)
{
using (var ms = new MemoryStream())
{
// 将上传文件读入内存
Upload.CopyTo(ms);
// 转换为 Base64,用于 HTML <img> 显示
UploadedImageBase64 = "data:" + Upload.ContentType + ";base64," +
Convert.ToBase64String(ms.ToArray());
// 重置流位置以便扫描
ms.Position = 0;
// 扫描二维码或条码
try
{
string[] scanned = BarcodeScanner.Scan(ms);
Result = scanned != null && scanned.Length > 0
? string.Join(", ", scanned)
: "未检测到二维码或条码。";
}
catch (Exception ex)
{
Result = "扫描过程中出错: " + ex.Message;
}
}
}
}
}
关键类和方法说明
根据应用需求,这些方法可灵活使用。
下面的页面提供一个简洁的上传表单,用户上传包含二维码或条码的图片后,可显示图片及识别结果,并可一键复制。页面布局保持简洁,实现了在浏览器中快速识别二维码等条码的能力。
Index.cshtml
@page
@model IndexModel
@{
ViewData["Title"] = "二维码与条码扫描器";
}
<div style="max-width:420px;margin:40px auto;padding:20px;border:1px solid #ccc;border-radius:8px;background:#f9f9f9;">
<h2>二维码与条码扫描器</h2>
<form method="post" enctype="multipart/form-data" id="uploadForm">
<input type="file" name="upload" accept="image/*" required onchange="this.form.submit()" style="margin:10px 0;" />
</form>
@if (!string.IsNullOrEmpty(Model.UploadedImageBase64))
{
<div style="margin-top:15px;text-align:center;">
<img src="@Model.UploadedImageBase64" style="width:300px;height:300px;object-fit:contain;border:1px solid #ddd;background:#fff;" />
</div>
}
@if (!string.IsNullOrEmpty(Model.Result))
{
<div style="margin-top:15px;padding:10px;background:#e8f5e9;border-radius:6px;">
<b>扫描结果:</b>
<p id="scanText">@Model.Result</p>
<button type="button" onclick="navigator.clipboard.writeText(scanText.innerText)" style="background:#28a745;color:#fff;padding:6px 10px;border:none;border-radius:4px;">复制</button>
</div>
}
</div>
下图展示了扫描页面成功识别二维码和 Code128 条码后的效果,结果显示并可一键复制:

该 ASP.NET Core 应用可以从上传图片扫描二维码和条码。如需生成二维码或条码,请参考 在 ASP.NET Core 中生成二维码教程。
运行应用后,可用以下图片测试扫描功能:
若识别失败:
建议维护一个小型二维码和条码样本库,用于修改代码后定期测试。
本教程的条码扫描逻辑在不同 .NET 应用类型中使用方式相同,只需提供图片的方式不同。核心解码方法 BarcodeScanner.Scan() 可在以下环境中复用:
示例:最简 ASP.NET Core Web API 接口 — 接收 HTTP POST 上传的图片,并返回解码结果 JSON:
[ApiController]
[Route("api/[controller]")]
public class ScanController : ControllerBase
{
[HttpPost]
public IActionResult Scan(IFormFile file)
{
if (file == null) return BadRequest("未上传文件");
using var ms = new MemoryStream();
file.CopyTo(ms);
ms.Position = 0;
string[] results = BarcodeScanner.Scan(ms);
return Ok(results);
}
}
示例:控制台应用 — 扫描本地图片文件并打印解码文本:
string[] result = BarcodeScanner.Scan(@"C:\path\to\image.png");
Console.WriteLine(string.Join(", ", result));
这种灵活性方便开发者快速在新项目中集成二维码和条码扫描,或扩展已有 .NET 应用。
本教程展示了如何在 ASP.NET Core 中使用 Spire.Barcode for .NET,实现完整的二维码和条码扫描解决方案。从上传图片到解码显示结果,流程清晰,适用于多种应用类型。借助此方法,开发者可以快速在电商平台、票务系统、文件验证工具及其他关键业务 Web 应用中集成可靠的扫描功能。
对于更高级的场景,Spire.Barcode for .NET 提供了自定义识别流程、支持多种图片格式和条码类型等功能。申请免费试用以解锁所有高级功能。
立即下载 Spire.Barcode for .NET,开始构建自己的 ASP.NET 条码扫描解决方案。
Spire.Doc for Python 13.8.0 现已正式发布。该版本支持设置图表坐标轴间距,同时修复了获取文本框数量、公式显示、文档对比、自定义属性及内容格式等多个问题。更多详情如下。
新功能:
chart.AxisX.Units.Major = 5
chart.AxisX.Units.MajorTimeUnit= AxisTimeUnit.Days
chart.AxisX.Units.BaseTimeUnit= AxisTimeUnit.Days
doc.DefaultSubstitutionFontName = "SimSun";
问题修复:

Excel 和 JSON(JavaScript Object Notation)是两种广泛使用的数据格式,在不同场景中各具优势。Excel 以其强大的数据处理和分析能力被广泛应用于报表制作和数据管理,而 JSON 则因轻量、结构化,成为 Web 开发、API 集成和跨平台数据交换的首选格式。
本文将详细介绍如何使用 C# 结合 Spire.XLS for .NET 库,实现 Excel 与 JSON 的双向转换。无论是将 Excel 数据导出为 JSON 以供前端展示,还是将 JSON 数据导入 Excel 便于分析和报表制作,本文都提供完整的代码示例和实用技巧,帮助开发者快速掌握可靠的数据转换方法。
在开始操作前,请确保您的开发环境满足以下条件:
库安装方法
在 Visual Studio 中打开 NuGet 包管理器控制台,依次执行以下命令安装所需库:
Install-Package Spire.XLS
Install-Package Newtonsoft.Json
完成以上准备后,即可开始实现 Excel 与 JSON 的转换操作。
将 Excel 导出为 JSON 是在 C# 中进行数据交换与系统集成的常见需求,适用于将数据传递到前端或调用 Web API。实现流程为:读取 Excel 工作表数据 → 导出为 DataTable → 序列化为 JSON → 保存为文件。
using Newtonsoft.Json;
using Spire.Xls;
using System.Data;
using System.IO;
namespace ConvertExcelToJSON
{
class Program
{
static void Main(string[] args)
{
// Excel 文件路径
string excelFilePath = @"示例.xlsx";
// 创建 Workbook对象,并加载Excel文件
Workbook workbook = new Workbook();
workbook.LoadFromFile(excelFilePath);
// 获取第一个工作表
Worksheet worksheet = workbook.Worksheets[0];
// 将工作表内容导出为 DataTable
DataTable dataTable = worksheet.ExportDataTable();
// 将 DataTable 序列化为 JSON 字符串
string jsonResult = JsonConvert.SerializeObject(dataTable, Formatting.Indented);
// 将 JSON 字符串保存到文本文件
File.WriteAllText("输出.txt", jsonResult);
}
}
}

将 JSON 数据导入 Excel 常用于数据分析和报表生成等场景。JSON 格式结构清晰、易解析,而 Excel 则提供直观的数据处理与可视化功能。通过将 JSON 转换为 Excel,不仅能在熟悉的表格环境中对数据进行进一步计算和分析,还能快速生成可视化报表。
using Newtonsoft.Json;
using Spire.Xls;
using System.Data;
using System.Drawing;
namespace ConvertJSONToExcel
{
class Program
{
static void Main(string[] args)
{
// 示例 JSON 数据
string json = @"
[
{""姓名"":""张三"",""年龄"":30,""部门"":""销售部"",""入职日期"":""2020-05-12"",""全职"":true},
{""姓名"":""李四"",""年龄"":25,""部门"":""市场部"",""入职日期"":""2021-09-01"",""全职"":false},
{""姓名"":""王五"",""年龄"":40,""部门"":""技术部"",""入职日期"":""2018-03-15"",""全职"":true},
{""姓名"":""赵六"",""年龄"":35,""部门"":""财务部"",""入职日期"":""2019-07-20"",""全职"":true}
]";
// 将 JSON 字符串反序列化为 DataTable
DataTable dataTable = JsonConvert.DeserializeObject<DataTable>(json);
// 创建 Excel 工作簿
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
// 将 DataTable 插入工作表(包含列头)
worksheet.InsertDataTable(dataTable, true, 1, 1);
// 设置表头样式
CellStyle headerStyle = workbook.Styles.Add("HeaderStyle");
headerStyle.Font.IsBold = true;
headerStyle.Font.Size = 12;
headerStyle.Font.Color = Color.White;
headerStyle.HorizontalAlignment = HorizontalAlignType.Center;
headerStyle.VerticalAlignment = VerticalAlignType.Center;
headerStyle.Color = Color.DarkBlue;
int colCount = dataTable.Columns.Count;
for (int c = 1; c <= colCount; c++)
{
worksheet.Range[1, c].CellStyleName = "HeaderStyle";
}
// 设置数据单元格样式
CellStyle dataStyle = workbook.Styles.Add("DataStyle");
dataStyle.HorizontalAlignment = HorizontalAlignType.Center;
dataStyle.VerticalAlignment = VerticalAlignType.Center;
dataStyle.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;
dataStyle.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin;
dataStyle.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin;
dataStyle.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
int rowCount = dataTable.Rows.Count;
worksheet.Range[2, 1, rowCount + 1, colCount].CellStyleName = "DataStyle";
// 自动调整列宽
worksheet.AllocatedRange.AutoFitColumns();
// 保存 Excel 文件
workbook.SaveToFile("输出.xlsx", ExcelVersion.Version2013);
// 释放资源
workbook.Dispose();
}
}
}

在 Excel 与 JSON 之间进行转换时,可参考以下技巧来提高转换的稳定性与准确性:
本文深入探讨了C# 实现 Excel 到 JSON 及 JSON 到 Excel 的双向转换方法,并提供了详细步骤介绍和完整代码示例。通过 Spire.XLS 和 Newtonsoft.Json 库,开发者可以快速、高效、可靠地实现Excel与JSON格式互转,适用于数据分析、报表生成、前端展示和系统集成等多种场景。
可遍历 Workbook.Worksheets 集合,分别导出每个工作表的数据,支持批量 Excel 到 JSON 转换。
使用 JsonConvert.SerializeObject 可设置缩进、驼峰命名或忽略空值,也可使用自定义转换器。
保留列头、设置对齐方式、应用边框和样式,可生成清晰、易读的 Excel 报表。
完全兼容,Spire.XLS 和 Newtonsoft.Json 都支持 .NET Core 和 .NET Framework 平台,可在各种 C# 项目中使用。
Spire.PDF 11.8.0 现已正式发布。该版本优化了转换 PDF 到 PDFA 的耗时,同时修复了多个与 PDF 转换、文本提取以及表格内容显示相关的问题。更多详情如下。
优化:
调整:
问题修复:
Spire.PDF for Java 11.8.0 现已正式发布。该版本修复了内存溢出、透明度丢失及无法生成输出文档等问题,进一步提升了 PDF 转换过程的稳定性和正确性。详细更新内容如下:
问题修复:
Spire.PDF for C++ 11.8.1 已发布。本次更新修复了特定场景下,多产品同时使用的兼容性问题。详情请阅读以下内容。
问题修复:
Spire.XLS for C++ 15.8.1 现已正式发布。该版本修复了特定场景下,多产品同时使用的兼容性问题。详情请查阅以下内容。
问题修复: