冰蓝科技
|
028-81705109
|
|
微信扫一扫
|

Spire.Cloud 纯前端文档控件

Spire.OCR for Java 2.1.1 现已发布。此版本引入了对 Linux-ARM 平台的支持,并支持文本按照图像的原始布局输出。此外,此更新还包括多个错误修复。更多详细信息如下。

新功能:

问题修复:


获取 Spire.OCR for Java 请点击:

https://www.e-iceblue.cn/Downloads/Spire-OCR-JAVA.html 下载页面

光学字符识别(OCR)技术通过将图片中的文本转换为机器可读取的数据,为物理信息与数字世界搭建了沟通的桥梁。对于.NET 开发者而言,掌握运用 C# 从图片中提取文本的技能,是开发智能文档处理、自动数据录入及无障碍应用等工具的关键。

本文将详细介绍如何借助 Spire.OCR for .NET在 C# 中实现 OCR 功能,涵盖基础文本提取、坐标定位等高级操作,并分享提升识别精度与效率的实用技巧。

目录:

了解 OCR 和 Spire.OCR

什么是 OCR?

OCR 技术的作用是对包含文字的图片(如扫描文档、屏幕截图或照片等)进行分析,然后把这些图像中的文字转换成可以编辑、搜索或者通过编程处理的文本字符串。

Spire.OCR 的优势

Spire.OCR for .NET 是一款功能强大且对开发者友好的库,能够在 C# 应用中高精度识别图片中的文本,其主要特点如下:

  • 支持多种语言(英语、中文、日语等)。
  • 高精度识别算法,针对各种字体和样式进行了优化。
  • 文本坐标提取,实现精确定位。
  • 批量处理能力。
  • 与.NET Framework 和.NET Core 兼容。

搭建 OCR 开发环境

在编写用于图片到文本 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。

Spire.OCR x64 平台目标

基本识别:使用 C# 提取图片中的文本

下面通过一个简单的 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);
        }
    }
}

代码解析:

  • OcrScanner:文本识别的核心类。
  • ConfigureOptions:用于设置 OCR 参数:
    • ModelPath:指定 OCR 模型文件的路径。
    • Language:定义识别语言(例如,“English”、“Chinese”)。
  • Scan():按照配置的设置对图片进行处理并提取文本

输出:

上述 C# 代码会处理图片文件(示例.png),并利用 File.WriteAllText() 方法将提取到的文本保存到文本文件(OCR结果.txt)中。

从图片中提取文本到TXT文件

进阶功能:使用 C# 提取图片中的文本及其坐标

在很多场景下,了解提取的文本在图片中的位置也很重要,比如处理发票、表单或结构化文档时。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);
        }
    }
}

核心方法:

  • IOCRText:表示整个 OCR 结果。
  • IOCRTextBlock:表示连续的文本块(例如,一个段落、一行或一个单词)。
  • IOCRTextBlock.Box:包含文本块的矩形坐标:
    • X(水平位置)
    • Y(垂直位置)
    • 宽度
    • 高度

输出结果:

上述 C# 代码会对图片文件(报价单.png)执行 OCR 操作,提取识别到的文本及其在图片中的位置坐标,并将这些信息保存到文本文件(提取文本与坐标.txt)中。

提取图片中的文本及文本坐标

提升 OCR 识别准确性的技巧

为了在使用 C# 从图片中识别文本时确保可靠的结果,可采用以下最佳实践:

  • 使用高分辨率图片(300 DPI 或更高)。
  • 对图片进行预处理(例如,调整大小、校正偏斜)以提高识别效果。
  • 确保语言设置与图像中的文本语言一致。
  • 将 OCR 模型存储在安全且易于访问的位置。

常见问题(支持的语言和图片格式)

问题 1:Spire.OCR 支持哪些图片格式?

:Spire.OCR 支持所有常见格式:

  • PNG
  • JPEG/JPG
  • BMP
  • TIFF
  • GIF

问题 2:Spire.OCR 支持哪些语言?

:支持多种语言:

  • 英语(默认)
  • 中文(简体和繁体)
  • 日语
  • 韩语
  • 德语
  • 法语

问题 3:能否在ASP.NET Core 应用程序中使用 Spire.OCR 吗?

:可以。支持的环境包括:

  • NET Framework 2.0+
  • NET Standard 2.0+
  • NET Core 2.0+
  • NET 5

问题 4:Spire.OCR 能否在从扫描 PDF 文件中提取文本?

:此任务需要结合 Spire.PDF 实现,先将 PDF 转换为图片或从扫描的 PDF 中提取图片,然后使用上述 C# 示例从图片中获取文本。

结论

Spire.OCR for .NET 提供了一个功能强大且简单易用的解决方案,帮助开发人员实现在 C# 应用中提取图片中的文本。无论您是要开发一个简单的图片转文本工具,还是一个处理数千张发票的复杂系统,按照本文介绍的方法和最佳实践,都能轻松地将 OCR 功能集成到 .NET 应用中。

点击申请 30 天的试用许可证,以获得无限制的 OCR 功能,并提取隐藏在图片中的宝贵信息。

使用 Spire.XLS 将 CSV 转换为带格式的 Excel 文件

将 CSV 文件转换为 Excel 是 Java 开发者在进行数据报表、分析流程或文件转换时常见的操作。虽然可以手动解析 CSV 文件,但这种方式不仅代码繁琐,而且格式控制能力有限。借助如 Spire.XLS for Java 这样的专业 Excel 库,可以极大简化处理流程,同时实现对布局、样式、模板以及数据整合的全面控制。

本文将带你逐步了解多种使用场景,介绍如何使用 Java 将 CSV 转换为 Excel,包括基本的导入导出、样式设置、注入模板数据、以及将多个 CSV 文件合并为一个 Excel 工作簿等内容。


快速导航


在 Java 项目中配置 Spire.XLS

在进行 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


使用 Java 将 CSV 文件转换为 Excel

最基本的使用场景是将一个 .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

以下是转换结果示意图:

使用 Spire.XLS 将 CSV 转换为 Excel 的输出结果

此外,你还可以自定义分隔符,或设置起始的行和列位置,非常适合已有标题或固定布局的场景:

workbook.loadFromFile("data_semicolon.csv", ";", 3, 2);

使用 Java 设置 Excel 输出格式

在生成用于报表或客户展示的 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 文件

如果你想将数据导入到预设的 Excel 模板中,只需加载现有 .xlsx 文件,并使用如 insertArray() 插入数组。请注意,模板格式不会自动应用,仍需手动设置样式。


将多个 CSV 文件合并为一个 Excel 文件

当处理批量数据或多个来源的数据时,通常需要将多个 CSV 文件合并为一个 Excel 文件。Spire.XLS 支持以下两种方式:

  • 每个 CSV 文件导入到独立的工作表;
  • 所有 CSV 数据整合到同一个工作表中。

方式一:每个 CSV 单独作为工作表

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 文件:

多个 CSV 文件合并为 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 合并为同一工作表

相关文章:如何使用 Java 合并、拆分 Excel 文件


故障排查建议

错误及解决方法:

  • Excel 内容乱码?

请确保 CSV 文件采用 UTF-8 编码。

  • 列错位或对齐不正确?

检查使用的分隔符是否一致。

  • CSV 文件过大?

考虑将其拆分为多个工作表,提高处理效率。

  • 合并的文件结构不同?

先统一字段结构或列标题,再执行合并操作。


常见问题解答

如何在 Java 中将 CSV 文件转换为 XLSX 格式?

使用 Workbook.loadFromFile("file.csv", ",") 加载 CSV 文件,然后使用 saveToFile("output.xlsx", ExcelVersion.Version2016) 保存为 .xlsx 文件。

可以设置 Excel 输出的样式吗?

可以。通过 CellStyle 类可设置字体、颜色、对齐方式、数字格式等。

可以将 CSV 数据插入到 Excel 模板中吗?

完全可以。加载 .xlsx 模板文件后,通过 setText()insertDataTable() 方法注入数据。

如何将多个 CSV 文件合并为一个 Excel 文件?

可以选择每个 CSV 为一个工作表,或将它们逐行追加合并到一个工作表中。

Spire.Doc 13.7.14 现已发布。该版本新增了多项功能, 如支持加载epub文件,支持转换 Word 到 Pdf_UA1 格式。详情如下。

新功能:


获取 Spire.Doc 13.7.14,请点击:

https://www.e-iceblue.cn/Downloads/Spire-Doc-NET.html

使用 Spire.PDF for Java 高质量提取 PDF 中的图片

在处理包含图片的 PDF 文件时,例如扫描文档、产品手册或宣传资料,我们经常需要将其中的图像提取出来,用于保存、识别或再加工。本文将介绍如何使用 Spire.PDF for Java 实现 从 PDF 中提取图片,并提供基础操作方法与高级提取技巧。无论你是在开发一个图像提取工具,还是希望通过 Java 从 PDF 中获取嵌入图像,本教程都将提供实用的代码示例和详尽的解读。

教程目录

环境配置与依赖库

在 Java 中直接处理 PDF 并提取图像并不容易。由于 PDF 文件中的图片可能被压缩、编码或嵌入在复杂结构中,使用原生 API 很难有效完成图像提取任务。

Spire.PDF for Java 提供了简洁的 API,能够准确识别并提取 PDF 中的嵌入图像,非常适合构建文档处理和图像提取类应用。

开发环境建议如下:

  • JDK 1.6 或更高版本
  • Spire.PDF for Java(可选择免费版或商业版)
  • 开发工具:如 IntelliJ IDEA 或 Eclipse

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

用 Java 提取 PDF 中所有图片

我们可以使用 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。

说明:

  • PdfImageHelper.getImagesInfo() 会返回当前页面中所有图像的数组;
  • 每个 PdfImageInfo 包含图像本体、位置、分辨率等元数据;
  • 使用 ImageIO.write() 可将图像保存为 PNG、JPG、BMP 等格式。

该方法适用于大多数含图 PDF,可快速提取图片资源:

从 PDF 提取出的图片,分别保存为 PNG 文件

如果你的目标是将整页 PDF 渲染为图像而非仅提取其中的图像对象,可参考:Java 实现 PDF 转图片教程

进阶技巧:过滤背景图与小图标

某些 PDF 页面会包含水印、边框、按钮等装饰性图像。为避免提取这些不必要内容,可通过以下策略进行优化:

1. 跳过背景图像

一些 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() 获取图像位置与尺寸,结合逻辑判断其是否属于背景。

2. 过滤尺寸过小的图像元素

为避免导出图标、按钮等无用小图,可设置尺寸阈值过滤掉这些小图:

BufferedImage image = imagesInfo[i].getImage();
if (image.getWidth() > 200 && image.getHeight() > 200) {
    ImageIO.write(image, "PNG", new File("output/image_" + i + ".png"));
}

建议根据文档实际情况调整尺寸阈值。

3. 输出为不同格式或写入流中

根据用途选择不同格式:

ImageIO.write(image, "JPEG", new File("output/image_" + i + ".jpg"));  // 有损压缩
ImageIO.write(image, "BMP", new File("output/image_" + i + ".bmp"));   // 无损保存
  • PNG/BMP:适合保存原始图像,便于后续 OCR;
  • JPEG:适合网络展示或压缩存储。

也可以写入字节流,便于在线处理或上传:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
ImageIO.write(image, "PNG", stream);

附加内容:提取 PDF 附件中的图像

如果 PDF 文件中嵌入了图片作为附件(例如 .jpg/.png 文件),可参考以下教程提取:
用 Java 提取 PDF 附件

常见问题解答

Java 可以提取 PDF 中的图像吗?

可以。Spire.PDF for Java 提供专门的图像提取接口,能够快速获取页面中的嵌入图像。

提取的图片是否保持原始质量?

是的。提取后的图像保持原始分辨率与编码。推荐使用 PNG 或 BMP 以获取无损质量。

图像提取与页面渲染有何区别?

图像提取是将 PDF 中嵌入的原始图像提取出来;而页面渲染是将整个 PDF 页面(包括文字与排版)转换为一张图像,前者更轻量,后者更全面。

扫描版 PDF 是否也能提取图像?

可以。大多数扫描 PDF 其实是嵌入了整页位图(如 JPG/TIFF),可以直接提取。

结语

通过本文的讲解,我们了解了如何使用 Spire.PDF for Java 通过 Java 代码从 PDF 文件中提取图像,包括基础提取方法和过滤背景图、小图标等进阶技巧。无论是处理扫描件、设计图,还是提取营销资料中的图片,我们都可以通过 Java 程序轻松提取。

如需体验完整功能并解除评估限制,可联系我们申请免费临时 License

使用Python生成二维码

二维码技术已经彻底改变了我们连接物理与数字体验的方式——从营销活动到安全数据共享皆可见其身影。对于希望在 Python 中生成二维码的开发者而言,Spire.Barcode for Python 提供了一套完整的工具包,既能满足基本需求,又能为专业应用提供高级定制。

本指南将带您从零开始,逐步掌握使用 Python 生成二维码的完整流程。您将学习如何通过编程创建二维码、自定义外观样式、嵌入品牌标识以及优化纠错能力。这些技能足以满足任何商业或技术场景下对二维码生成方案的需求。

目录

  1. Spire.Barcode for Python 简介
  2. 环境配置
  3. 基础示例:用 Python 生成二维码
  4. 自定义二维码外观
  5. 生成带 Logo 的二维码
  6. 总结
  7. 常见问题解答

1. Spire.Barcode for Python 简介

Spire.Barcode for Python 是一款功能强大的开发库,支持在 Python 应用程序中生成和读取多种条形码(包括二维码)。该解决方案不仅支持多种条码符号体系,还提供了丰富的外观和功能自定义选项。

主要特性包括:

  • 支持可调节纠错等级的二维码生成。
  • 灵活的数据编码选项(数字、字母数字、字节/二进制、自动)。
  • 全面的外观自定义(颜色、尺寸、字体)。
  • 高分辨率输出能力。
  • 二维码内嵌 Logo 功能。

2. 环境配置

在开始生成 QR 代码之前,您需要设置好 Python 环境。请确保已安装 Python,然后使用 pip 命令安装 Spire.Barcode 库:

pip install spire.barcode

为获得最佳效果,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取免费的临时许可证。应用许可证以后,您可以去除评估版本的水印标识,还能获得完整的专业版功能支持,从而确保生成的二维码具有最佳品质和用户体验。

3. 基础示例:用 Python 生成二维码

完成环境配置后,我们将通过以下步骤生成第一个二维码:

  1. 初始化设置

    • 导入Spire.Barcode 库。
    • 使用有效许可证激活库功能,以去除评估版本水印。
  2. 配置条码参数

    • 创建 BarcodeSettings 对象控制二维码属性。
    • 设置条码类型为 QRCode
    • 配置数据模式(自动检测数据类型)。
    • 设置纠错等级(如M表示中等纠错级别)。
    • 定义需要编码的数据内容。
    • 配置模块宽度、文本显示等视觉参数。
  3. 生成条码图像

    • 使用配置参数创建 BarCodeGenerator 对象。
    • 将设置好的二维码转换为内存中的图像对象。
  4. 保存图像文件

    • 将生成的二维码以 PNG 格式保存到指定路径。

完整代码示例如下:

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%损坏恢复 关键应用场景

视觉影响说明:

更高纠错等级:

  • 会增加二维码复杂度(更多模块/方块)。
  • 使受损二维码更易扫描。
  • 添加 Logo 时必须使用(至少选择 Q 或 H 等级)。

效果图:

由Spire.Barcode生成的常规二维码

4. 自定义二维码外观

生成基础二维码后,您可以进一步定制其外观,使其更具视觉吸引力或符合品牌形象。以下是可用的自定义选项:

4.1 调整 DPI 设置

DPI(每英寸点数)设置控制二维码的图像质量。较高的 DPI 值可生成更清晰的图像,适合打印用途;而较低的值(72-150)通常足以满足数字使用需求。

barcodeSettings.DpiX = 150
barcodeSettings.DpiY = 150

4.2 修改前景色与背景色

您可以自定义二维码的配色方案:前景色( ForeColor )决定二维码模块(方块)的颜色,而背景色( BackColor )则设置二维码的背景颜色。请确保两者保持足够的对比度,以保证二维码的可扫描性。

barcodeSettings.BackColor = Color.get_GhostWhite()
barcodeSettings.ForeColor = Color.get_Purple()

4.3 显示编码数据

若需要在不扫描的情况下展示二维码包含的信息,可通过设置以下属性实现:

barcodeSettings.ShowTextOnBottom = True
barcodeSettings.TextColor = Color.get_Purple()
barcodeSettings.SetTextFont("Arial", 13, FontStyle.Bold)

4.4 在二维码下方添加文本

您可以在二维码下方添加自定义文本内容,例如操作提示或说明文字。

barcodeSettings.ShowBottomText = True
barcodeSettings.BottomText = "请扫码支付"
barcodeSettings.SetBottomTextFont("Arial", 13, FontStyle.Bold)
barcodeSettings.BottomTextColor = Color.get_Black()

4.5 设置边距与边框

通过定义边距和边框样式可以提升二维码的呈现效果。具体设置方法如下:

barcodeSettings.LeftMargin = 2
barcodeSettings.RightMargin = 2
barcodeSettings.TopMargin = 2
barcodeSettings.BottomMargin = 2

barcodeSettings.HasBorder = True
barcodeSettings.BorderWidth = 0.5
barcodeSettings.BorderColor = Color.get_Black()

5. 生成带Logo的二维码

出于品牌推广需求,您可以在二维码中嵌入公司 Logo。Spire.Barcode 在保证可扫描性的同时,提供了简便的 Logo 集成方案。具体实现步骤如下:

barcodeSettings.SetQRCodeLogoImage("C:\\Users\\Administrator\\Desktop\\logo.png")

添加 Logo 时:

  • 使用简单、高对比度的徽标效果最佳。
  • 添加徽标后测试可扫描性。
  • 二维码的纠错功能可帮助补偿模糊区域。

Logo 将位于二维码的中心,Spire.Barcode 会自动调整其大小,以确保二维码的可扫描性。

效果图:

由Spire.Barcode生成的包含Logo的二维码

6. 总结

使用 Spire.Barcode 在 Python 中生成二维码是一个简单直接的过程,它提供了广泛的自定义选项。从基础二维码到带品牌 Logo 和自定义样式的版本,该库提供了生成专业二维码所需的所有工具。

主要优点:

  • Spire.Barcode 通过简洁的 API 简化了二维码生成。
  • 广泛的自定义选项允许创建品牌化、视觉吸引力强的二维码。
  • 错误纠正功能确保即使添加 Logo 也能保持可靠性。
  • 高分辨率输出支持数字和打印使用场景。

无论您是在构建库存系统、创建营销材料,还是在开发移动应用程序集成,Spire.Barcode 都能为您的所有 二维码生成需求提供强大的 Python 解决方案。

7. 常见问题解答

Q1: 什么是二维码?

二维码(QR Code,全称 Quick Response Code)是一种矩阵式二维条码,能够存储网址及其他各类信息。其主要用途是通过移动设备快速将用户引导至网站、应用程序或数字内容。

Q2: 是否可以不使用许可证密钥生成二维码?

是的,您可以在没有许可证密钥的情况下生成二维码,但生成的条码将包含评估版本水印及开发商标识,这可能会影响用户体验和专业呈现效果。

Q3: 我可以使用 Spire.Barcode 生成不同类型的条形码吗?

是的,Spire.Barcode 支持多种条形码类型,而不仅仅是二维码。详细类型支持可以在这里找到:如何在 Python 中生成条形码

Q4: 如何使用 Spire.Barcode 在 Python 中实现二维码生成器?

要在 Python 中使用 Spire.Barcode 实现二维码生成器,请创建一个 BarcodeSettings 对象来配置二维码属性。然后,使用 BarCodeGenerator 类通过调用 GenerateImage() 方法生成二维码图像。

Q5: 我可以使用 Spire.Barcode 扫描或读取二维码吗?

是的,您可以使用 Spire.Barcode for Python 扫描和读取二维码。请参考此指南:如何使用 Python 读取条形码

Spire.PDF 11.7.14 现已正式发布。最新版本新增支持 XlsxLineLayoutOptions.TextRecognizer,通过 OCR 库增强 PDF 到 Excel 的转换效果。此外,该版本还修复了一系列已知问题,例如 XPS 转 PDF 内容不正确的问题。更多详情请查阅下方内容。

新功能:

问题修复:


获取 Spire.PDF 11.7.14 请点击:

Spire.PDF for .NET 下载页面

Spire.XLS for Python 15.7.1 现已发布。该版本新增了对多级排序和为透视表添加过滤器的支持,优化并模块化了命名空间结构,同时修复了文档操作、公式计算、单元格操作等方面的多个问题。详情如下:

优化:

新功能:

问题修复:


获取 Spire.XLS for Python 15.7.1 请点击:

Spire.XLS for Python 下载页面

Spire.Office for C++ 10.7.0 现已发布。该版本对部分产品所依赖的HarfBuzzSharp和SkiaSharp做了升级,并加强了Excel转PDF、 ODF转PDF、PPT转图片的效果。与此同时,还修复了一些其他问题,例如:从PDF获取字体报错。更多详细更新如下。

Spire.Doc for C++

调整:

Spire.XLS for C++

问题修复:

Spire.PDF for C++

调整:

问题修复:

Spire.Presentation for C++

调整:

问题修复:

Spire.Barcode for C++

调整:

问题修复:


获取 Spire.Office for C++ 10.7.0请点击:

Spire.Office for C++ 下载页面

Spire.XLS for C++ 15.7.1 现已正式发布。该版本修复了几个在转换Excel到PDF和计算AGGREGATE公式时出现的问题。详情请查阅以下内容。

问题修复:


获取 Spire.XLS for C++ 15.7.1 请点击:

Spire.XLS for C++ 下载页面