Spire.OCR for Java 2.1.1 现已发布。此版本引入了对 Linux-ARM 平台的支持,并支持文本按照图像的原始布局输出。此外,此更新还包括多个错误修复。更多详细信息如下。
新功能:
ConfigureOptions configureOptions = new ConfigureOptions();
configureOptions.setAutoRotate(true);
VisualTextAligner visualTextAligner = new VisualTextAligner(scanner.getText());
String scannedText = visualTextAligner.toString();
问题修复:
光学字符识别(OCR)技术通过将图片中的文本转换为机器可读取的数据,为物理信息与数字世界搭建了沟通的桥梁。对于.NET 开发者而言,掌握运用 C# 从图片中提取文本的技能,是开发智能文档处理、自动数据录入及无障碍应用等工具的关键。
本文将详细介绍如何借助 Spire.OCR for .NET 库在 C# 中实现 OCR 功能,涵盖基础文本提取、坐标定位等高级操作,并分享提升识别精度与效率的实用技巧。
目录:
OCR 技术的作用是对包含文字的图片(如扫描文档、屏幕截图或照片等)进行分析,然后把这些图像中的文字转换成可以编辑、搜索或者通过编程处理的文本字符串。
Spire.OCR for .NET 是一款功能强大且对开发者友好的库,能够在 C# 应用中高精度识别图片中的文本,其主要特点如下:
在编写用于图片到文本 OCR 操作的 C# 代码前,需先配置好开发环境:
1. 通过 NuGet 安装:
打开 Visual Studio 的 NuGet 包管理器,搜索 “Spire.OCR”,在项目中安装最新版本。也可使用程序包管理器控制台,输入以下命令:
Install-Package Spire.OCR
2. 下载 OCR 模型:
Spire.OCR 依赖于预训练模型来识别图片文本。下载适用于您操作系统的模型文件:
下载后,将其解压到指定目录。(例如,F:\OCR Model\win-x64)
重要提示: 由于 Spire.OCR 仅支持 64 位平台,所以务必将解决方案的目标平台修改为 x64。

下面通过一个简单的 C# 示例,展示如何使用 Spire.OCR 从图片中读取文本。
using Spire.OCR;
using System.IO;
namespace OCRTextFromImage
{
internal class Program
{
static void Main(string[] args)
{
// 创建OcrScanner类的实例
OcrScanner scanner = new OcrScanner();
// 创建ConfigureOptions类的实例
ConfigureOptions configureOptions = new ConfigureOptions();
// 设置OCR模型的路径
configureOptions.ModelPath = "F:\\OCR Model\\win-x64";
// 设置文本识别的语言
configureOptions.Language = "Chinese";
// 将配置选项应用于扫描器
scanner.ConfigureDependencies(configureOptions);
// 扫描图片并提取文本
scanner.Scan("示例.png");
// 将提取的文本保存到txt文件
string text = scanner.Text.ToString();
File.WriteAllText("OCR结果.txt", text);
}
}
}
代码解析:
输出:
上述 C# 代码会处理图片文件(示例.png),并利用 File.WriteAllText() 方法将提取到的文本保存到文本文件(OCR结果.txt)中。

在很多场景下,了解提取的文本在图片中的位置也很重要,比如处理发票、表单或结构化文档时。Spire.OCR 不仅能提取文本,还能获取文本块的坐标,便于进行精确分析。
从图片中提取带坐标文本的 C# 代码:
using Spire.OCR;
using System.Collections.Generic;
using System.IO;
namespace OCRWithCoordinates
{
internal class Program
{
static void Main(string[] args)
{
// 创建OcrScanner类的实例
OcrScanner scanner = new OcrScanner();
// 创建ConfigureOptions类的实例
ConfigureOptions configureOptions = new ConfigureOptions();
// 设置OCR模型的路径
configureOptions.ModelPath = "F:\\OCR Model\\win-x64";
// 设置文本识别的语言
configureOptions.Language = "Chinese";
// 将配置选项应用于扫描器
scanner.ConfigureDependencies(configureOptions);
// 从图片中提取文本
scanner.Scan("报价单.png");
// 获取OCR结果文本
IOCRText text = scanner.Text;
// 创建一个列表来存储信息
List<string> results = new List<string>();
// 遍历OCR结果文本的每个块
foreach (IOCRTextBlock block in text.Blocks)
{
// 将每个块的文本及其位置信息添加到列表
results.Add($"文本:{block.Text}");
results.Add($"坐标:{block.Box}");
results.Add("---------");
}
// 将提取的带坐标的文本保存到txt文件
File.WriteAllLines("提取文本与坐标.txt", results);
}
}
}
核心方法:
输出结果:
上述 C# 代码会对图片文件(报价单.png)执行 OCR 操作,提取识别到的文本及其在图片中的位置坐标,并将这些信息保存到文本文件(提取文本与坐标.txt)中。

为了在使用 C# 从图片中识别文本时确保可靠的结果,可采用以下最佳实践:
答:Spire.OCR 支持所有常见格式:
答:支持多种语言:
答:可以。支持的环境包括:
答:此任务需要结合 Spire.PDF 实现,先将 PDF 转换为图片或从扫描的 PDF 中提取图片,然后使用上述 C# 示例从图片中获取文本。
Spire.OCR for .NET 提供了一个功能强大且简单易用的解决方案,帮助开发人员实现在 C# 应用中提取图片中的文本。无论您是要开发一个简单的图片转文本工具,还是一个处理数千张发票的复杂系统,按照本文介绍的方法和最佳实践,都能轻松地将 OCR 功能集成到 .NET 应用中。
点击申请 30 天的试用许可证,以获得无限制的 OCR 功能,并提取隐藏在图片中的宝贵信息。

将 CSV 文件转换为 Excel 是 Java 开发者在进行数据报表、分析流程或文件转换时常见的操作。虽然可以手动解析 CSV 文件,但这种方式不仅代码繁琐,而且格式控制能力有限。借助如 Spire.XLS for Java 这样的专业 Excel 库,可以极大简化处理流程,同时实现对布局、样式、模板以及数据整合的全面控制。
本文将带你逐步了解多种使用场景,介绍如何使用 Java 将 CSV 转换为 Excel,包括基本的导入导出、样式设置、注入模板数据、以及将多个 CSV 文件合并为一个 Excel 工作簿等内容。
在进行 CSV 到 Excel 的转换前,需要将 Spire.XLS for Java 引入到项目中。该库支持 .xls 与 .xlsx 文件格式,并提供简洁的 API,无需安装 Microsoft Office 即可创建和操作 Excel 文档。
通过 Maven 引入
<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.xls</artifactId>
<version>15.11.3</version>
</dependency>
</dependencies>
手动引入 JAR 包
你也可以下载 Spire.XLS for Java,并手动将 JAR 文件添加到项目的类路径中。对于小型项目,也可以使用免费版 Spire.XLS for Java。
最基本的使用场景是将一个 .csv 文件转换为 .xlsx 或 .xls 格式。使用 Spire.XLS,只需两步即可完成:使用 loadFromFile() 加载 CSV,使用 saveToFile() 保存为 Excel 文件。
import com.spire.xls.*;
public class CsvToXlsx {
public static void main(String[] args) {
Workbook workbook = new Workbook();
workbook.loadFromFile("data.csv", ",");
workbook.saveToFile("output.xlsx", ExcelVersion.Version2013);
}
}
若要输出为 .xls 格式,只需将版本参数改为 ExcelVersion.Version97to2003。
以下是转换结果示意图:

此外,你还可以自定义分隔符,或设置起始的行和列位置,非常适合已有标题或固定布局的场景:
workbook.loadFromFile("data_semicolon.csv", ";", 3, 2);
在生成用于报表或客户展示的 Excel 文件时,设置样式能显著提升可读性与专业感。Spire.XLS 支持通过 CellStyle 类自定义字体、颜色、数字格式等,并支持自动调整列宽。
import com.spire.xls.*;
public class CsvToXlsx {
public static void main(String[] args) {
Workbook workbook = new Workbook();
workbook.loadFromFile("data.csv", ",");
Worksheet sheet = workbook.getWorksheets().get(0);
// 设置表头样式
CellStyle headerStyle = workbook.getStyles().addStyle("Header");
headerStyle.getFont().isBold(true);
headerStyle.getFont().setSize(14f);
headerStyle.setKnownColor(ExcelColors.LightYellow);
for (int col = 1; col <= sheet.getLastColumn(); col++) {
sheet.getCellRange(1, col).setStyle(headerStyle);
}
// 设置数字列样式
CellStyle numStyle = workbook.getStyles().addStyle("Numbers");
numStyle.setNumberFormat("#,##0.00");
sheet.getCellRange("B2:B100").setStyle(numStyle);
// 统一设置字体自动调整列宽
sheet.getRange().getStyle().getFont().setFontName("微软雅黑");
for (int i = 1; i <= sheet.getLastRow(); i++) {
sheet.autoFitColumn(i);
}
workbook.saveToFile("formatted_output.xlsx", ExcelVersion.Version2013);
}
}
以下是带有格式的 Excel 输出示例:

如果你想将数据导入到预设的 Excel 模板中,只需加载现有 .xlsx 文件,并使用如 insertArray() 插入数组。请注意,模板格式不会自动应用,仍需手动设置样式。
当处理批量数据或多个来源的数据时,通常需要将多个 CSV 文件合并为一个 Excel 文件。Spire.XLS 支持以下两种方式:
import com.spire.xls.*;
import java.io.File;
public class CsvToXlsx {
public static void main(String[] args) {
File[] csvFiles = new File("CSVs/").listFiles((dir, name) -> name.endsWith(".csv"));
Workbook workbook = new Workbook();
workbook.getWorksheets().clear();
for (File csv : csvFiles) {
Workbook temp = new Workbook();
temp.loadFromFile(csv.getAbsolutePath(), ",");
workbook.getWorksheets().addCopy(temp.getWorksheets().get(0));
}
workbook.saveToFile("merged.xlsx", ExcelVersion.Version2016);
}
}
下图展示了多个工作表组成的 Excel 文件:

import com.spire.xls.*;
import java.io.File;
public class CsvToXlsx {
public static void main(String[] args) {
File[] csvFiles = new File("CSVs/").listFiles((dir, name) -> name.endsWith(".csv"));
Workbook workbook = new Workbook();
workbook.getWorksheets().clear();
Worksheet sheet = workbook.getWorksheets().add("Sample");
int startRow = 1;
boolean isFirstFile = true;
for (File csv : csvFiles) {
Workbook temp = new Workbook();
temp.loadFromFile(csv.getAbsolutePath(), ",");
Worksheet tempSheet = temp.getWorksheets().get(0);
int startReadRow = isFirstFile ? 1 : 2;
isFirstFile = false;
for (int r = startReadRow; r <= tempSheet.getLastRow(); r++) {
for (int c = 1; c <= tempSheet.getLastColumn(); c++) {
sheet.getCellRange(startRow, c).setValue(tempSheet.getCellRange(r, c).getText());
}
startRow++;
}
}
workbook.saveToFile("merged_single_sheet.xlsx", ExcelVersion.Version2016);
}
}
以下是合并结果的截图:

错误及解决方法:
请确保 CSV 文件采用 UTF-8 编码。
检查使用的分隔符是否一致。
考虑将其拆分为多个工作表,提高处理效率。
先统一字段结构或列标题,再执行合并操作。
使用 Workbook.loadFromFile("file.csv", ",") 加载 CSV 文件,然后使用 saveToFile("output.xlsx", ExcelVersion.Version2016) 保存为 .xlsx 文件。
可以。通过 CellStyle 类可设置字体、颜色、对齐方式、数字格式等。
完全可以。加载 .xlsx 模板文件后,通过 setText() 或 insertDataTable() 方法注入数据。
可以选择每个 CSV 为一个工作表,或将它们逐行追加合并到一个工作表中。
Spire.Doc 13.7.14 现已发布。该版本新增了多项功能, 如支持加载epub文件,支持转换 Word 到 Pdf_UA1 格式。详情如下。
新功能:
Document doc = new Document();
doc.LoadFromFile("in.epub", Spire.Doc.FileFormat.EPub);
doc.SaveToFile(@"out.docx", Spire.Doc.FileFormat.Docx);
doc.SaveToFile(@"out.pdf", Spire.Doc.FileFormat.PDF);
Document doc = new Document();
doc.LoadFromFile("https://cdn.e-iceblue.cn/in.docx");
ToPdfParameterList list = new ToPdfParameterList();
list.PdfConformanceLevel = PdfConformanceLevel.Pdf_UA1;
doc.SaveToFile(@"out.pdf", list);

在处理包含图片的 PDF 文件时,例如扫描文档、产品手册或宣传资料,我们经常需要将其中的图像提取出来,用于保存、识别或再加工。本文将介绍如何使用 Spire.PDF for Java 实现 从 PDF 中提取图片,并提供基础操作方法与高级提取技巧。无论你是在开发一个图像提取工具,还是希望通过 Java 从 PDF 中获取嵌入图像,本教程都将提供实用的代码示例和详尽的解读。
教程目录
在 Java 中直接处理 PDF 并提取图像并不容易。由于 PDF 文件中的图片可能被压缩、编码或嵌入在复杂结构中,使用原生 API 很难有效完成图像提取任务。
Spire.PDF for Java 提供了简洁的 API,能够准确识别并提取 PDF 中的嵌入图像,非常适合构建文档处理和图像提取类应用。
开发环境建议如下:
Maven 引入方式:
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>11.7.5</version>
</dependency>
如果只需要处理简单的提取任务,也可以使用免费版:Free Spire.PDF for Java。
我们可以使用 PdfImageHelper 类来遍历 PDF 各页并提取图像信息,然后获取图像内容并保存。该类可自动识别嵌入或内联图像,并返回其内容及元数据信息(如尺寸、位置等)。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.utilities.PdfImageHelper;
import com.spire.pdf.utilities.PdfImageInfo;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ExtractAllImagePDF {
public static void main(String[] args) throws IOException {
// 创建 PdfDocument 类的实例
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文件
pdf.loadFromFile("input.pdf");
// 创建 PdfImageHelper 类的实例
PdfImageHelper imageHelper = new PdfImageHelper();
// 遍历 PDF 的每一页,提取图片
for (int i = 0; i < pdf.getPages().getCount(); i++) {
PdfPageBase page = pdf.getPages().get(i);
// 获取当前页面上的图片信息
PdfImageInfo[] imagesInfo = imageHelper.getImagesInfo(page);
// 遍历所有图片信息
for (int j = 0; j < imagesInfo.length; j++) {
PdfImageInfo imageInfo = imagesInfo[j];
// 获取图片并保存为文件
BufferedImage image = imageInfo.getImage();
File file = new File("output/Images/Page" + i+1 + "_Image" + j+1 + ".png");
ImageIO.write(image, "png", file); // 写入文件
}
}
// 关闭文档
pdf.close();
}
}
提示:确保执行前已创建好“output”目录,否则将抛出 IOException。
该方法适用于大多数含图 PDF,可快速提取图片资源:

如果你的目标是将整页 PDF 渲染为图像而非仅提取其中的图像对象,可参考:Java 实现 PDF 转图片教程。
某些 PDF 页面会包含水印、边框、按钮等装饰性图像。为避免提取这些不必要内容,可通过以下策略进行优化:
一些 PDF 页面包含背景图,而提取时背景图通常会作为第一张图片,可通过跳过首个图像过滤背景图:
for (int i = 1; i < imagesInfo.length; i++) { // 从第二张图开始处理
BufferedImage image = imagesInfo[i].getImage();
ImageIO.write(image, "PNG", new File("output/image_" + (i - 1) + ".png"));
}
还可以使用 imagesInfo[].getBounds() 获取图像位置与尺寸,结合逻辑判断其是否属于背景。
为避免导出图标、按钮等无用小图,可设置尺寸阈值过滤掉这些小图:
BufferedImage image = imagesInfo[i].getImage();
if (image.getWidth() > 200 && image.getHeight() > 200) {
ImageIO.write(image, "PNG", new File("output/image_" + i + ".png"));
}
建议根据文档实际情况调整尺寸阈值。
根据用途选择不同格式:
ImageIO.write(image, "JPEG", new File("output/image_" + i + ".jpg")); // 有损压缩
ImageIO.write(image, "BMP", new File("output/image_" + i + ".bmp")); // 无损保存
也可以写入字节流,便于在线处理或上传:
ByteArrayOutputStream stream = new ByteArrayOutputStream();
ImageIO.write(image, "PNG", stream);
如果 PDF 文件中嵌入了图片作为附件(例如 .jpg/.png 文件),可参考以下教程提取:
用 Java 提取 PDF 附件
可以。Spire.PDF for Java 提供专门的图像提取接口,能够快速获取页面中的嵌入图像。
是的。提取后的图像保持原始分辨率与编码。推荐使用 PNG 或 BMP 以获取无损质量。
图像提取是将 PDF 中嵌入的原始图像提取出来;而页面渲染是将整个 PDF 页面(包括文字与排版)转换为一张图像,前者更轻量,后者更全面。
可以。大多数扫描 PDF 其实是嵌入了整页位图(如 JPG/TIFF),可以直接提取。
通过本文的讲解,我们了解了如何使用 Spire.PDF for Java 通过 Java 代码从 PDF 文件中提取图像,包括基础提取方法和过滤背景图、小图标等进阶技巧。无论是处理扫描件、设计图,还是提取营销资料中的图片,我们都可以通过 Java 程序轻松提取。
如需体验完整功能并解除评估限制,可联系我们申请免费临时 License。

二维码技术已经彻底改变了我们连接物理与数字体验的方式——从营销活动到安全数据共享皆可见其身影。对于希望在 Python 中生成二维码的开发者而言,Spire.Barcode for Python 提供了一套完整的工具包,既能满足基本需求,又能为专业应用提供高级定制。
本指南将带您从零开始,逐步掌握使用 Python 生成二维码的完整流程。您将学习如何通过编程创建二维码、自定义外观样式、嵌入品牌标识以及优化纠错能力。这些技能足以满足任何商业或技术场景下对二维码生成方案的需求。
目录
Spire.Barcode for Python 是一款功能强大的开发库,支持在 Python 应用程序中生成和读取多种条形码(包括二维码)。该解决方案不仅支持多种条码符号体系,还提供了丰富的外观和功能自定义选项。
主要特性包括:
在开始生成 QR 代码之前,您需要设置好 Python 环境。请确保已安装 Python,然后使用 pip 命令安装 Spire.Barcode 库:
pip install spire.barcode
为获得最佳效果,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取免费的临时许可证。应用许可证以后,您可以去除评估版本的水印标识,还能获得完整的专业版功能支持,从而确保生成的二维码具有最佳品质和用户体验。
完成环境配置后,我们将通过以下步骤生成第一个二维码:
初始化设置 :
配置条码参数 :
生成条码图像 :
保存图像文件 :
完整代码示例如下:
from spire.barcode import *
# 将所有字节写入文件的函数
def WriteAllBytes(fname: str, data):
with open(fname, "wb") as fp:
fp.write(data)
fp.close()
# 为条形码生成库应用许可证密钥
License.SetLicenseKey("你的许可证密钥")
# 创建一个 BarcodeSettings 对象以配置条形码属性
barcodeSettings = BarcodeSettings()
# 设置条形码类型为二维码
barcodeSettings.Type = BarCodeType.QRCode
# 设置二维码的数据模式(自动检测数据类型)
barcodeSettings.QRCodeDataMode = QRCodeDataMode.Auto
# 设置错误校正级别(M表示中等错误校正级别)
barcodeSettings.QRCodeECL = QRCodeECL.M
# 设置要编码在二维码中的数据
barcodeSettings.Data2D = "通过www.e-iceblue.cn访问我们"
# 设置条形码中每个模块(方形条)的宽度
barcodeSettings.X = 3
# 隐藏通常伴随条形码的文本
barcodeSettings.ShowText = False
# 创建一个带有指定设置的 BarCodeGenerator 对象
barCodeGenerator = BarCodeGenerator(barcodeSettings)
# 根据设置生成条形码的图像
image = barCodeGenerator.GenerateImage()
# 将生成的 PNG 图像写入指定路径的磁盘
WriteAllBytes("output/QRCode.png", image)
关键概念:
A. QRCodeDataMode (数据编码方案)
控制输入数据在二维码中的编码方式:
| 模式 | 最佳适用场景 | 示例用例 |
|---|---|---|
| Auto(自动) | 由库自动检测 | 通用场景(默认选择) |
| Numeric(数字) | 仅数字(0-9) | 产品编码、电话号码 |
| AlphaNumber(字母数字) | A-Z、0-9及部分符号 | 网址、简单消息 |
| Byte(字节) | 二进制/Unicode数据 | 复杂文本、特殊字符 |
重要性说明:
B. QRCodeECL(纠错等级)
决定二维码中内置的冗余量:
| 等级 | 恢复能力 | 使用场景 |
|---|---|---|
| L(低) | 7%损坏恢复 | 小型二维码、短网址 |
| M(中) | 15%损坏恢复 | 通用场景(推荐) |
| Q(四分之一) | 25%损坏恢复 | 带Logo或装饰的二维码 |
| H(高) | 30%损坏恢复 | 关键应用场景 |
视觉影响说明:
更高纠错等级:
效果图:

生成基础二维码后,您可以进一步定制其外观,使其更具视觉吸引力或符合品牌形象。以下是可用的自定义选项:
DPI(每英寸点数)设置控制二维码的图像质量。较高的 DPI 值可生成更清晰的图像,适合打印用途;而较低的值(72-150)通常足以满足数字使用需求。
barcodeSettings.DpiX = 150
barcodeSettings.DpiY = 150
您可以自定义二维码的配色方案:前景色( ForeColor )决定二维码模块(方块)的颜色,而背景色( BackColor )则设置二维码的背景颜色。请确保两者保持足够的对比度,以保证二维码的可扫描性。
barcodeSettings.BackColor = Color.get_GhostWhite()
barcodeSettings.ForeColor = Color.get_Purple()
若需要在不扫描的情况下展示二维码包含的信息,可通过设置以下属性实现:
barcodeSettings.ShowTextOnBottom = True
barcodeSettings.TextColor = Color.get_Purple()
barcodeSettings.SetTextFont("Arial", 13, FontStyle.Bold)
您可以在二维码下方添加自定义文本内容,例如操作提示或说明文字。
barcodeSettings.ShowBottomText = True
barcodeSettings.BottomText = "请扫码支付"
barcodeSettings.SetBottomTextFont("Arial", 13, FontStyle.Bold)
barcodeSettings.BottomTextColor = Color.get_Black()
通过定义边距和边框样式可以提升二维码的呈现效果。具体设置方法如下:
barcodeSettings.LeftMargin = 2
barcodeSettings.RightMargin = 2
barcodeSettings.TopMargin = 2
barcodeSettings.BottomMargin = 2
barcodeSettings.HasBorder = True
barcodeSettings.BorderWidth = 0.5
barcodeSettings.BorderColor = Color.get_Black()
出于品牌推广需求,您可以在二维码中嵌入公司 Logo。Spire.Barcode 在保证可扫描性的同时,提供了简便的 Logo 集成方案。具体实现步骤如下:
barcodeSettings.SetQRCodeLogoImage("C:\\Users\\Administrator\\Desktop\\logo.png")
添加 Logo 时:
Logo 将位于二维码的中心,Spire.Barcode 会自动调整其大小,以确保二维码的可扫描性。
效果图:

使用 Spire.Barcode 在 Python 中生成二维码是一个简单直接的过程,它提供了广泛的自定义选项。从基础二维码到带品牌 Logo 和自定义样式的版本,该库提供了生成专业二维码所需的所有工具。
主要优点:
无论您是在构建库存系统、创建营销材料,还是在开发移动应用程序集成,Spire.Barcode 都能为您的所有 二维码生成需求提供强大的 Python 解决方案。
二维码(QR Code,全称 Quick Response Code)是一种矩阵式二维条码,能够存储网址及其他各类信息。其主要用途是通过移动设备快速将用户引导至网站、应用程序或数字内容。
是的,您可以在没有许可证密钥的情况下生成二维码,但生成的条码将包含评估版本水印及开发商标识,这可能会影响用户体验和专业呈现效果。
是的,Spire.Barcode 支持多种条形码类型,而不仅仅是二维码。详细类型支持可以在这里找到:如何在 Python 中生成条形码
要在 Python 中使用 Spire.Barcode 实现二维码生成器,请创建一个 BarcodeSettings 对象来配置二维码属性。然后,使用 BarCodeGenerator 类通过调用 GenerateImage() 方法生成二维码图像。
是的,您可以使用 Spire.Barcode for Python 扫描和读取二维码。请参考此指南:如何使用 Python 读取条形码
Spire.PDF 11.7.14 现已正式发布。最新版本新增支持 XlsxLineLayoutOptions.TextRecognizer,通过 OCR 库增强 PDF 到 Excel 的转换效果。此外,该版本还修复了一系列已知问题,例如 XPS 转 PDF 内容不正确的问题。更多详情请查阅下方内容。
新功能:
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("https://cdn.e-iceblue.cn/in.pdf");
XlsxLineLayoutOptions options = new XlsxLineLayoutOptions(false, false, false, true);
options.TextRecognizer = new TextRecognizer();
doc.ConvertOptions.SetPdfToXlsxOptions(options);
doc.SaveToFile("out.xlsx", Spire.Pdf.FileFormat.XLSX);
// niget install PaddleOCRSharp lib
using PaddleOCRSharp;
using Spire.Pdf.Conversion;
public class TextRecognizer : ITextRecognizer
{
private static readonly PaddleOCREngine _engine;
static TextRecognizer()
{ _engine = new PaddleOCREngine(null, “”); }
public string RecognizeGlyph(Stream glyphImageStream)
{
var image = new System.Drawing.Bitmap(glyphImageStream);
// paint glyph in image center
var fixImage = new System.Drawing.Bitmap(160, 240);
using (Graphics g = Graphics.FromImage(fixImage))
{ g.DrawImage(image, new RectangleF(20, 20, fixImage.Width - 40, fixImage.Height - 40), new RectangleF(0, 0, image.Width, image.Height), GraphicsUnit.Pixel); }
var unicodeResult = _engine.DetectText(fixImage).Text;
return unicodeResult;
}
}
问题修复:
Spire.XLS for Python 15.7.1 现已发布。该版本新增了对多级排序和为透视表添加过滤器的支持,优化并模块化了命名空间结构,同时修复了文档操作、公式计算、单元格操作等方面的多个问题。详情如下:
优化:
from spire.xls import *
from spire.xls import LicenseProvider as xlsLicense
xlsLicense.SetLicenseKey("key",True)
#testing code
xlsLicense.UnbindDevelopmentOrTestingLicenses()
新功能:
workbook = Workbook()
workbook.LoadFromFile(inputFile)
for i in range(0, workbook.Worksheets.Count):
worksheet = workbook.Worksheets.get_Item(i)
if i==0:
workbook.DataSorter.SortColumns.Clear()
workbook.DataSorter.SortColumns.Add(0, SortComparsionType.Values, OrderBy.Ascending)
workbook.DataSorter.SortColumns.Add(1, SortComparsionType.Values, OrderBy.Descending)
workbook.DataSorter.Sort(worksheet.Range["A1:E7"])
elif i==1:
workbook.DataSorter.SortColumns.Clear()
workbook.DataSorter.SortColumns.Add(1, SortComparsionType.BackgroundColor, OrderBy.Bottom)
workbook.DataSorter.SortColumns.Add(2, SortComparsionType.BackgroundColor, OrderBy.Top)
workbook.DataSorter.Sort(worksheet.Range["A1:E7"])
elif i==2:
workbook.DataSorter.SortColumns.Clear()
workbook.DataSorter.SortColumns.Add(1, SortComparsionType.FontColor, OrderBy.Top)
workbook.DataSorter.SortColumns.Add(3, SortComparsionType.FontColor, OrderBy.Bottom)
workbook.DataSorter.Sort(worksheet.Range["A1:E7"])
elif i==3:
workbook.DataSorter.SortColumns.Clear()
workbook.DataSorter.SortColumns.Add(5, SortComparsionType.Icon, OrderBy.Top)
workbook.DataSorter.SortColumns.Add(6, SortComparsionType.Icon, OrderBy.Bottom)
workbook.DataSorter.Sort(worksheet.Range["A1:G8"])
elif i==4:
workbook.DataSorter.SortColumns.Clear()
workbook.DataSorter.SortColumns.Add(0, SortComparsionType.Values, OrderBy.Ascending)
workbook.DataSorter.SortColumns.Add(2, SortComparsionType.BackgroundColor, OrderBy.Bottom)
workbook.DataSorter.SortColumns.Add(3, SortComparsionType.FontColor, OrderBy.Bottom)
workbook.DataSorter.SortColumns.Add(5, SortComparsionType.Icon, OrderBy.Top)
workbook.DataSorter.Sort(worksheet.Range["A1:G7"])
workbook.SaveToFile(outputFile, ExcelVersion.Version2016)
workbook.Dispose()
workbook = Workbook()
workbook.LoadFromFile(inputFile)
sheet = workbook.Worksheets[0]
pt = sheet.PivotTables[0]
reportFilter = PivotReportFilter("Product", True)
pt.ReportFilters.Add(reportFilter)
workbook.SaveToFile(outputFile, ExcelVersion.Version2016)
问题修复:
Spire.Office for C++ 10.7.0 现已发布。该版本对部分产品所依赖的HarfBuzzSharp和SkiaSharp做了升级,并加强了Excel转PDF、 ODF转PDF、PPT转图片的效果。与此同时,还修复了一些其他问题,例如:从PDF获取字体报错。更多详细更新如下。
调整:
问题修复:
调整:
问题修复:
调整:
问题修复:
调整:
问题修复:
Spire.XLS for C++ 15.7.1 现已正式发布。该版本修复了几个在转换Excel到PDF和计算AGGREGATE公式时出现的问题。详情请查阅以下内容。
问题修复: