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

Spire.Cloud 纯前端文档控件

C#发送电子邮件教程:HTML邮件、附件、图片嵌入及群发

在 C# 应用程序中发送邮件是企业开发中的常见需求。无论是项目进度通知、系统告警,还是自动化报表的分发,可靠的邮件功能都至关重要。

本文将详解如何使用 Spire.Email for .NET 组件在 C# 中发送邮件,简化 SMTP 通信及邮件格式处理流程。内容涵盖 SMTP 配置、HTML/纯文本邮件、附件添加以及群发功能等实用技巧。

文章目录

1. 项目配置

首先创建 .NET 项目(控制台或 ASP.NET),并添加 Spire.Email for .NET 组件包。

NuGet 安装:

Install-Package Spire.Email

对于小型项目,也可安装免费版 Free Spire.Email for .NET:

Install-Package FreeSpire.Email

2. 用 C# 发送基础纯文本邮件

以下示例演示如何通过 Spire.Email 使用 SMTP 协议发送纯文本邮件:

using Spire.Email;
using Spire.Email.Smtp;

// 配置SMTP客户端
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.example.com";
smtp.Port = 587;
smtp.Username = "your@example.com";
smtp.Password = "your_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;

// 创建邮件地址对象
MailAddress sender = new MailAddress("your@example.com", "发件人名称");
MailAddress recipient = new MailAddress("recipient@example.com", "收件人名称");
MailMessage message = new MailMessage(sender, recipient);

// 设置邮件内容
message.Subject = "测试邮件";
message.BodyText = "这是一封纯文本测试邮件";

// 发送邮件
smtp.SendOne(message);

核心要点:

  • 使用 Spire.Email 的 MailAddressMailMessage
  • 通过 ConnectionProtocols.StartTls 建立安全连接

下图展示实际收到的邮件效果:

C#代码发送普通文本电子邮件

3. 用 C# 发送 HTML 格式带附件邮件

以下代码演示如何通过 126 邮箱的 SMTP 服务发送 HTML 格式邮件,支持群发、添加附件及纯文本备用内容:

using Spire.Email;
using Spire.Email.Smtp;

// 创建邮件地址对象
MailAddress from = new MailAddress("example@126.com", "发送用户");
MailAddress to1 = new MailAddress("example@gmail.com", "用户一");
MailAddress to2 = new MailAddress("example1@gmail.com", "用户二");

// 创建邮件主体
MailMessage message = new MailMessage(from, to1);
message.To.Add(to2);
message.Cc.Add(new MailAddress("example@icloud.com", "抄送人"));
message.Bcc.Add(new MailAddress("example@petalmail.com"));

// 设置HTML与纯文本内容
message.Subject = "2025年6月月度报告";
message.BodyHtml = "<h2 style='color:#2E86C1;'>报告摘要</h2><p>请查看附件PDF文档</p>";
message.BodyText = "报告摘要——请查看附件PDF文档";

// 添加PDF附件
Attachment attachment = new Attachment(@"Sample.pdf");
message.Attachments.Add(attachment);

// 配置Gmail SMTP
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.126.com";
smtp.Port = 465;
smtp.Username = "example@126.com";
smtp.Password = "your_password";
smtp.ConnectionProtocols = ConnectionProtocols.Ssl;

// 执行发送
smtp.SendOne(message);

技术细节:

  • 同时设置 BodyHtmlBodyText,以兼容不同的邮件客户端
  • 通过 To.Add()Cc.Add()Bcc.Add() 实现群发功能
  • 使用 ConnectionProtocols.StartTls 保障通信安全性

下图展示收到的 HTML 邮件效果,包括富文本内容、群发收件人及 PDF 附件:

C#代码发送HTML内容带附件的邮件

扩展阅读:C# 发送 HTML 邮件

4. C# 邮件发送进阶技巧:内嵌图片与批量群发

以下代码示例展示内嵌图片及批量处理等进阶邮件功能:

关键技术:

  • 使用 ContentIdDispositionType 实现 HTML 邮件中图片的内嵌显示
  • SendSome() 方法支持批量发送,适合定期报告或群发通知的场景

下图展示内嵌图片邮件的实际效果:

using Spire.Email;
using Spire.Email.Smtp;

// 创建带内嵌图片的邮件
MailMessage message = new MailMessage(
    new MailAddress("your@domain.com", "发件人"),
    new MailAddress("client@domain.com", "客户"));

message.Subject = "品牌更新通知";
message.BodyHtml = "<h1>新LOGO展示</h1><img src=\"cid:logo\">";
message.BodyText = "请使用HTML模式查看图片内容";

// 添加内嵌图片
Attachment logo = new Attachment(@"C:\Images\logo.png");
logo.ContentId = "logo";
logo.DispositionType = "Inline";
message.Attachments.Add(logo);

// 创建第二封邮件
MailMessage message2 = new MailMessage(
    new MailAddress("your@domain.com"),
    new MailAddress("sales@domain.com"));
message2.Subject = "周度汇总";
message2.BodyText = "这是自动生成的周度报告";

// 配置SMTP客户端
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.domain.com";
smtp.Port = 587;
smtp.Username = "your@domain.com";
smtp.Password = "your_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;

// 单封发送
smtp.SendOne(message);

// 批量发送
smtp.SendSome(new List<MailMessage> { message, message2 });

技术细节:

  • 通过 ContentIdDispositionType 实现 HTML 内嵌图片
  • SendSome() 方法支持批量发送,适合定期报告场景

下图展示内嵌图片邮件的实际效果:

C#代码群发内嵌图片的邮件

推荐阅读:使用 C# 添加、提取、删除邮件附件

5. 常见错误排查

错误类型 可能原因
认证失败 凭证错误,或未启用应用专用密码
需要安全连接 未配置 StartTLSSSL 协议
HTML 内容不显示 未设置 BodyHtmlBodyText
文件未找到 附件路径配置错误

6. 典型应用场景

Spire.Email 适用于以下业务需求:

  • 自动化日报 / 周报邮件发送
  • 用户注册通知邮件
  • 含附件的订单确认邮件
  • 表单提交提醒邮件
  • 带图片的新闻简报或促销信息

其简洁的 API 可自动处理 SMTP 头、MIME 格式等底层细节,减少开发负担。

总结

借助 Spire.Email for .NET,开发者可以在 C# 应用中快速构建稳定灵活的邮件发送功能。无论是发送事务通知、生成格式化报表,还是定时推送新闻简报,该组件都提供了简洁可靠的 API,助力开发流程更加高效。

Spire.Email 支持纯文本与 HTML 格式邮件、附件添加、SMTP 通信、图片内嵌以及批量群发等多种特性,可在无需引入额外依赖的情况下,轻松实现邮件系统集成。

7. 免费临时授权申请

如需去除试用版水印,可申请免费的临时授权:

联系销售获取 30 天免费授权

提交申请后,按指引应用授权,即可启用完整功能。

8. 常见问题

如何在 C# 中发送 HTML 邮件?

设置 MailMessage 对象的 BodyHtml 属性,建议同时设置 BodyText 作为备用内容。

如何实现邮件群发?

通过调用 message.To.Add()Cc.Add()Bcc.Add() 方法添加多个收件人地址。

ASP.NET 项目中如何使用?

SMTP 配置方式与控制台项目一致,可直接调用 SendOne()SendOneAsync() 方法发送邮件。

使用C#读取二维码 – 教程涵盖条码扫描器和C#示例代码

二维码已成为现代应用的常见组成部分,广泛应用于用户身份验证、移动支付、商品包装和活动票务等场景。很多使用 C# 开发的系统需要从图像或扫描件中提取二维码信息,因此掌握二维码识别技术显得尤为重要。

为满足这类需求,开发者需要一种既可靠又易于集成的二维码解码方式。本文将通过一个简洁明了的示例,演示如何使用 C# 从图像中读取二维码,并在桌面或服务器端项目中轻松实现识别功能。

快速导航

1. 项目配置

首先我们需要使用支持二维码解码的 .NET 条码库。本指南采用 Spire.Barcode for .NET,该库提供简洁API帮助开发者轻松从图片文件和数据流读取二维码。

1.1 通过NuGet安装库

可通过NuGet包管理器安装:

Install-Package Spire.Barcode

对于简单的项目,也可使用免费版 Free Spire.Barcode for .NET

Install-Package FreeSpire.Barcode

1.2 创建控制台项目

演示案例使用 Visual Studio 创建 C# 控制台应用:

  • 支持 .NET Framework.NET Core/.NET 6+ASP.NET 或 Xamarin 跨平台移动开发
  • 添加 Spire.Barcode.dll 引用(如未使用NuGet)

2. 用 C# 从图片读取二维码

通过库提供的静态方法 BarcodeScanner.Scan() 即可从图片文件读取二维码。该方法接收图片路径和 BarcodeType 作为参数,返回匹配指定类型(如二维码)的所有解码结果。此方法支持 JPG、PNG、EMF 等图片格式,适用于控制台应用、桌面应用或处理上传图像的服务端程序。

2.1 C# 示例代码:从图片文件解码二维码

using Spire.Barcode;

class Program
{
    static void Main(string[] args)
    {
        // 加载二维码图片
        string imagePath = @"C:\qr-code.png";

        // 条码扫描器从图片读取二维码
        string[] results = BarcodeScanner.Scan(imagePath, BarCodeType.QRCode);

        // 显示解码结果
        foreach (string result in results)
        {
            Console.WriteLine("二维码内容: " + result + "\n");
        }
    }
}

二维码图片及 C# 解码效果:

C#解码二维码输出结果到控制台

2.2 代码说明

  • Scan() 方法读取并解码图片中所有条码
  • BarCodeType.QRCode 参数确保仅检测二维码(可修改为其他类型)
  • 返回数组格式以支持多二维码场景

扩展阅读:使用 C# 生成二维码

3. 用 C# 从数据流读取二维码

在Web API或现代应用中处理内存图像时,常需操作 Stream 对象——例如处理文件上传或读取云存储时。

BarcodeScanner.Scan() 方法直接支持 Stream 输入,无需转换即可轻松解码二维码:

using Spire.Barcode;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        using (FileStream fs = new FileStream(@"C:\qr-code.png", FileMode.Open, FileAccess.Read))
        {
            // 直接从数据流解析二维码
            string[] results = BarcodeScanner.Scan(fs, BarCodeType.QRCode, false);
            foreach (string result in results)
            {
                Console.WriteLine("二维码内容: " + result);
            }
        }
    }
}

此方法特别适用于 WPF 或 ASP.NET Core 等需要内存处理的应用。

相关教程:用 C# 从 PDF 读取条码


4. 提高准确率与错误处理

实际场景中可能因图像质量导致识别失败,以下是提升解码成功率的实践方案:

4.1 优化识别准确率

  • 使用高清图片,避免模糊或过度压缩
  • 保留静区(二维码周围空白区域)
  • 优先选择PNG格式保证清晰度
  • 避免透视畸变——使用正对拍摄的图片

4.2 增强错误处理

通过 try-catch 块优化异常处理:

try
{
    string[] results = BarcodeScanner.Scan(imagePath, BarCodeType.QRCode);

    if (results.Length == 0)
    {
        Console.WriteLine("未检测到二维码");
    }
    else
    {
        Console.WriteLine("二维码内容: " + results[0]);
    }
}
catch (Exception ex)
{
    Console.WriteLine("解码错误: " + ex.Message);
}

5. 进阶技巧:获取二维码在图片上的坐标

有时需要获取二维码在图片中的精确位置(用于裁剪或标注),可通过 ScanInfo() 方法获取边界框:

ScanResult[] results = scanner.ScanInfo(imagePath, BarCodeType.QRCode);
foreach (BarcodeInfo result in results)
{
    Console.WriteLine("内容: " + result.DataString);
    Console.WriteLine($"坐标: " + string.Join(",", result.Vertexes.Select(p => $"({p.X},{p.Y})")) + "\n");
}

该方案可同时获取二维码数据和位置信息。

效果演示:

用C#解码二维码并读取其在图片上的坐标


6. 常见问题

如何在 C# 中读取二维码?

使用 Spire.Barcode for .NET 库的 BarcodeScanner.Scan() 方法,几行代码即可实现从图片或数据流读取二维码。

如何读取其他类型条码(非二维码)?

Scan() 方法传入图片路径后,将自动检测所有支持类型。若需限定检测类型(如仅 QR 码或 Code128),传入对应的 BarCodeType 参数即可。

如何扫描一张图片上的多个二维码?

直接使用 BarcodeScanner.Scan() 方法即可扫描一张图片上的多个二维码。该方法支持自动识别图片上条码的类型,并返回所有条码的扫描结果。


7. 总结

使用 Spire.Barcode for .NET 库,仅需少量代码即可在 C# 中实现二维码读取。该方案支持图片和数据流解码,完美适配桌面应用、服务端及 WPF 程序,且配置简单性能优异。

基于此基础,可进一步探索二维码生成、文档集成和实时扫描等进阶应用。申请免费临时授权,即可体验 Spire.Barcode for .NET 全功能无限制版本。

Java 读取PDF

在数据驱动的现代开发中,高效处理 PDF 文档已成为 Java 开发者不可或缺的核心能力。无论是处理各类发票扫描件、业务分析报告,还是包含丰富图表的技术文档,掌握 Java 版的 PDF 解析技术都将大幅提升数据处理效率,充分释放文档中的商业价值。

本指南将介绍如何使用 Spire.PDF for Java 读取 PDF 文档 ,涵盖从可搜索的 PDF 提取文本表格图片 ,以及通过 OCR 技术从扫描版 PDF 中读取文本。

用于读取 PDF 内容的 Java 库

选择适合的库是成功读取 PDF 的关键。Spire.PDF 以其稳定性和丰富功能脱颖而出,支持文本提取、图片获取、表格解析及 OCR 集成,其直观 API 和完善的教程对新手和专家同样友好。

开始前请从官网下载 Spire.PDF for Java 并添加至项目依赖。Maven 用户请在 pom.xml 中添加:

<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>11.11.11</version>
    </dependency>
</dependencies>

下文将演示如何运用 Spire.PDF 完成各类 PDF 读取任务。

Java 从可搜索 PDF 读取文本

可搜索 PDF 以机器可读的格式存储文本,便于高效提取内容。Spire.PDF 中的 PdfTextExtractor 类可直接获取可搜索PDF的页面文本,而 PdfTextExtractOptions 能灵活设置提取参数,包括文本布局处理策略和指定提取区域。

以下示例展示如何使用 Java 提取 PDF 所有页面的文本并输出到TXT文件:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.texts.PdfTextExtractOptions;
import com.spire.pdf.texts.PdfTextExtractor;
import com.spire.pdf.texts.PdfTextStrategy;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class ExtractTextFromSearchablePdf {

    public static void main(String[] args) throws IOException {

        // 创建一个 PdfDocument 对象
        PdfDocument doc = new PdfDocument();

        // 加载 PDF 文件
        doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");

        // 遍历所有页面
        for (int i = 0; i < doc.getPages().getCount(); i++) {

            // 获取当前页面
            PdfPageBase page = doc.getPages().get(i);

            // 创建一个 PdfTextExtractor 对象
            PdfTextExtractor textExtractor = new PdfTextExtractor(page);

            // 创建一个 PdfTextExtractOptions 对象
            PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();

            // 指定提取策略
            extractOptions.setStrategy(PdfTextStrategy.None);

            // 从页面中提取文本
            String text = textExtractor.extract(extractOptions);

            // 定义输出文件路径
            Path outputPath = Paths.get("output/Extracted_Page_" + (i + 1) + ".txt");

            // 写入 txt 文件
            Files.write(outputPath, text.getBytes());
        }

        // 关闭文档
        doc.close();
    }
}

效果图:

Java 提取PDF文本到TXT文件中

Java 从 PDF 文档读取图片

对于包含图形的 PDF,PdfImageHelper 类能精准提取所有嵌入式图片。通过 PdfImageInfo 对象可将图片保存为标准图像文件,特别适用于产品图册等视觉内容重要的文档。

以下Java示例将 PDF 文档中的所有图片提取为 PNG 文件:

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 ExtractAllImages {

    public static void main(String[] args) throws IOException {

        // 创建一个 PdfDocument 对象
        PdfDocument doc = new PdfDocument();

        // 加载 PDF 文档
        doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");

        // 创建一个 PdfImageHelper 对象
        PdfImageHelper imageHelper = new PdfImageHelper();

        // 声明一个整型变量
        int m = 0;

        // 遍历页面
        for (int i = 0; i < doc.getPages().getCount(); i++) {

            // 获取特定页面
            PdfPageBase page = doc.getPages().get(i);

            // 获取页面中的所有图像信息
            PdfImageInfo[] imageInfos = imageHelper.getImagesInfo(page);

            // 遍历图像信息
            for (int j = 0; j < imageInfos.length; j++)
            {
                // 获取特定图像信息
                PdfImageInfo imageInfo = imageInfos[j];

                // 获取图像
                BufferedImage image = imageInfo.getImage();
                File file = new File(String.format("output/Image-%d.png",m));
                m++;

                // 以 PNG 格式保存图像文件
                ImageIO.write(image, "PNG", file);
            }
        }

        // 清理资源
        doc.dispose();
    }
}

效果图:

Java 从PDF中提取图片到文件夹

Java 从 PDF 文件读取表格数据

Spire.PDF 提供的 PdfTableExtractor 类能智能识别表格边界,生成的 PdfTable 对象保持原始结构,并支持使用 PdfTable.getText() 方法获取具体单元格中的文本。该功能特别适用于从财务报表等结构化文档提取数据。

以下 Java 代码将 PDF 中的每一个表格导出为单独的TXT文件:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;

import java.io.FileWriter;

public class ExtractTableData {
    public static void main(String[] args) throws Exception {

        // 创建一个 PdfDocument 对象
        PdfDocument doc = new PdfDocument();

        // 加载 PDF 文档
        doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");

        // 创建一个 PdfTableExtractor 实例
        PdfTableExtractor extractor = new PdfTableExtractor(doc);

        // 初始化表计数器
        int tableCounter = 1;

        // 遍历 PDF 中的页面
        for (int pageIndex = 0; pageIndex < doc.getPages().getCount(); pageIndex++) {

            // 从当前页面提取表格到 PdfTable 数组
            PdfTable[] tableLists = extractor.extractTable(pageIndex);

            // 如果找到任何表格
            if (tableLists != null && tableLists.length > 0) {

                // 遍历数组中的表格
                for (PdfTable table : tableLists) {

                    // 为当前表格创建一个 StringBuilder
                    StringBuilder builder = new StringBuilder();

                    // 遍历当前表格中的行
                    for (int i = 0; i < table.getRowCount(); i++) {

                        // 遍历当前表格中的列
                        for (int j = 0; j < table.getColumnCount(); j++) {

                            // 从当前表格单元格中提取数据并附加到 StringBuilder
                            String text = table.getText(i, j);
                            builder.append(text).append(" | ");
                        }
                        builder.append("\r\n");
                    }

                    // 为每个表格写入一个单独的 .txt 文档
                    FileWriter fw = new FileWriter("output/Table_" + tableCounter + ".txt");
                    fw.write(builder.toString());
                    fw.flush();
                    fw.close();

                    // 增加表计数器
                    tableCounter++;
                }
            }
        }

        // 清理资源
        doc.dispose();
    }
}

效果图:

Java 从PDF提取表格到TXT文件

通过 OCR 将扫描版 PDF 转为文本

从扫描版的 PDF 提取文本需要依赖 OCR 引擎,如Spire.OCR for Java。本解决方案首先使用 Spire.PDF 的渲染引擎将页面转换为图片,然后通过 Spire.OCR 的 OcrScanner 类从图片识别文字。通过这两步法,可以有效地将实体文档扫描转换为可编辑文本,且支持多种语言。

步骤 1. 安装Spire.OCR 并配置环境

OcrScanner scanner = new OcrScanner();
configureOptions.setModelPath("D:\\win-x64"); // 模型路径

有关详细步骤,请参阅:使用 Spire.OCR for Java 的新模型从图像中提取文本

步骤 2. 将扫描的 PDF 转换为文本

此代码示例将扫描 PDF 的每一页转换为图像文件,应用 OCR 提取文本,并将结果保存到文本文件中。

import com.spire.ocr.OcrException;
import com.spire.ocr.OcrScanner;
import com.spire.ocr.ConfigureOptions;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.graphics.PdfImageType;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class ExtractTextFromScannedPdf {

    public static void main(String[] args) throws IOException, OcrException {

        // 创建 OcrScanner 类的实例
        OcrScanner scanner = new OcrScanner();

        // 配置扫描器
        ConfigureOptions configureOptions = new ConfigureOptions();
        configureOptions.setModelPath("D:\\win-x64"); // 设置模型路径
        configureOptions.setLanguage("Chinese"); // 设置语言

        // 应用配置选项
        scanner.ConfigureDependencies(configureOptions);

        // 加载 PDF 文档
        PdfDocument doc = new PdfDocument();
        doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");

        // 准备临时目录
        String tempDirPath = "temp";
        new File(tempDirPath).mkdirs(); // 创建临时目录

        StringBuilder allText = new StringBuilder();

        // 遍历所有页面
        for (int i = 0; i < doc.getPages().getCount(); i++) {

            // 将页面转换为图像
            BufferedImage bufferedImage = doc.saveAsImage(i, PdfImageType.Bitmap);
            String imagePath = tempDirPath + File.separator + String.format("page_%d.png", i);
            ImageIO.write(bufferedImage, "PNG", new File(imagePath));

            // 执行 OCR
            scanner.scan(imagePath);
            String pageText = scanner.getText().toString();
            allText.append(String.format("\n--- PAGE %d ---\n%s\n", i + 1, pageText));

            // 清理临时图像
            new File(imagePath).delete();
        }

        // 将所有提取的文本保存到文件
        Path outputTxtPath = Paths.get("output", "extracted_text.txt");
        Files.write(outputTxtPath, allText.toString().getBytes());

        // 关闭文档
        doc.close();
        System.out.println("文本已提取到 " + outputTxtPath);
    }
}

效果图:

Java 使用OCR从扫描PDF提取文本到TXT文件

结语

在数字化转型的浪潮中,PDF 文档作为企业信息的重要载体,其高效处理能力已成为现代开发者的核心竞争力。通过本指南介绍的 Spire.PDF for Java 技术方案,开发者可以轻松应对各类 PDF 数据提取需求,从简单的文本和图片提取 到复杂的 表格数据解析 ,再到 扫描文档的智能识别 ,帮助企业更好地管理和利用文档信息。

此外,Spire.PDF for Java 提供了一套全面的工具和功能,使开发者能够构建起完整的文档自动化处理能力。无论是自动化生成报告、批量处理文档,还是提取特定数据以供分析,开发者都能通过灵活的 API 和丰富的示例代码,快速实现这些功能。这不仅提高了工作效率,也减少了人工操作的错误率,为企业带来了更高的生产力和竞争优势。

常见问题

Q1:如何使用 Java 从扫描 PDF 提取文本?

结合 Spire.PDF for Java 和 Spire.OCR for Java 即可实现:先将 PDF 页面转为图片,再进行 OCR 识别。

Q2:在Java 中读取 PDF 的最佳库是什么?

强烈推荐 Spire.PDF for Java,因为它功能多样且易于使用。它支持文本、图像、表格的提取以及 OCR 集成。

Q3:Spire.PDF 是否支持提取元数据、附件和超链接?

是的, Spire.PDF支持提取:

  • 元数据(标题/作者/关键词)
  • 附件(嵌入文件)
  • 超链接( URL 和文档链接)

该库提供 PdfDocumentInformation 类获取元数据,以及用于获取附件( PdfAttachmentCollection )和超链接( PdfUriAnnotation )的方法。

Q4:如何以编程方式将 PDF表格提取为 CSV/Excel?

使用 Spire.PDF for Java,您可以从 PDF 中提取表格数据,然后通过 Spire.XLS for Java 无缝导出到 Excel(XLSX)或 CSV 格式。有关逐步指南,请参考我们的教程:在 Java 中将 PDF 中的表格数据导出到 Excel

申请临时License

如果您需要去除生成文档中的评估提示或解除功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。

Spire.Office for Java 10.6.0 更新已发布。在该版本中,Spire.Doc for Java 支持读取和设置图表格式;Spire.XLS for Java 支持应用自定义字体时使用字体流;Spire.Presentation for Java 支持复制段落中的公式。此外,大量已知问题也在该版本中成功修复。详情请阅读以下内容。


获取Spire.Office for Java 10.6.0,请点击:

Spire.Office for Java 下载页面

Spire.Doc for Java

新功能:

问题修复:

Spire.PDF for Java

问题修复:

Spire.XLS for Java

新功能:

问题修复:

Spire.Presentation for Java

新功能:

问题修复:

Spire.Presentation for Java 10.6.2 现已正式发布。最新版本支持复制段落中的公式。此外,该版本还成功修复了一些已知问题,例如 ODP 转 PDF 时,程序抛 "Unknow file format" 的问题。更多详情请查阅下面的内容。

新功能:

问题修复:


获取 Spire.Presentation for Java 10.6.2 请点击:

Spire.Presentation for Java 下载页面

我们很高兴地宣布 Spire.Office for .NET 10.6.0 版本正式发布。本次更新带来了三项新功能,例如:Spire.Doc新增支持设置矩形圆角功能;Spire.XLS 实现了 SHEETS() 函数支持。与此同时,我们还成功修复了大量已知问题。更多详情请参阅以下内容。

该版本涵盖了最新版的Spire.Doc、Spire.PDF、Spire.XLS、Spire.Presentation、Spire.DataExport、Spire.Barcode、Spire.DocViewer、Spire.PDFViewer、Spire.OfficeViewer、Spire.Email。

版本信息如下:

Spire.Doc

新功能:

问题修复:

Spire.PDF

问题修复:

Spire.XLS

新功能:

问题修复:

Spire.Presentation

问题修复:

Spire.DocViewer

问题修复:


获取Spire.Office 10.6.0,请点击:

Spire.Office for .NET 下载页面

Spire.Doc 13.6.14 现已发布。该版本支持设置矩形形状的圆角,以及获取移动修订。此外还修复了几个已知问题,如获取到的段落文本内容不正确。详情请查看以下内容。

新功能:

问题修复:


获取Spire.Doc 13.6.14,请点击:

Spire.Doc for .NET 下载页面

C#示例 - 拆分PDF文件

PDF文件因其高度的跨平台兼容性和安全稳定的格式特点,广泛应用于企业文档管理和电子资料传输中。随着PDF文档页数和内容复杂度的增加,拆分PDF成为优化文档处理流程、提升办公效率的重要需求。通过编程方式实现PDF拆分,不仅能自动化处理海量文档,还能根据需求精准提取指定页面、按页码范围分割,甚至基于关键字内容智能拆分,大大提升了工作效率和准确性。

本文将详细讲解如何使用 Spire.PDF for .NET 库在C# 中实现多种PDF拆分功能,包含按每页拆分、按页码范围拆分、按关键字拆分及提取指定页面等场景的完整示例代码,帮助开发者轻松掌握高效的PDF分割技巧,优化文档管理流程。

目录

为什么要以编程方式拆分 PDF?

通过代码拆分 PDF 相比手动操作具有显著优势,包括:

  • 自动生成报表
  • 提高企业流程中的文档处理效率
  • 便于内容归档或重新分发
  • 根据用户或系统输入动态处理文档

此外,这种方式可减少人为错误,提高重复性任务的一致性。

准备工作

在编写代码之前,请确保你已具备以下环境和工具:

  • 已安装 .NET Framework 或 .NET Core
  • 安装 Visual Studio 或其他 C# 开发环境
  • 已安装 Spire.PDF for .NET 库
  • 具备 C# 编程基础

安装 Spire.PDF for .NET 库

Spire.PDF for .NET 是一款专业的 .NET PDF 库,支持在不安装 Adobe Acrobat 的情况下创建、读取、编辑及操作 PDF 文件。它支持多种PDF功能,如拆分、合并文本提取添加注释等。

你可以通过 NuGet 包管理器快速安装该库:

Install-Package Spire.PDF

或在 Visual Studio 中通过图形界面安装:

  • 右键点击项目 > 管理 NuGet 程序包
  • 搜索 Spire.PDF
  • 点击“安装”

C# 拆分 PDF 的方法与代码示例

按每一页拆分 PDF

当你需要将 PDF 拆分为多个单页文件时,可使用 Split 方法。该方法可以快速将每一页保存为单独的文件,便于批量处理或单页分发。

using Spire.Pdf;

namespace SplitPDF
{
    class Program
    {
        static void Main(string[] args)
        {
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("心理健康.pdf");

            // 将每页拆分为单独的 PDF 文件
            pdf.Split("第{0}页.pdf", 1);

            pdf.Close();
        }
    }
}

C#示例 - 按页拆分PDF

按页码范围拆分 PDF

在实际应用中,常常需要将文档按特定页码范围拆分成多个部分。Spire.PDF 提供了 InsertPageRange 方法,支持基于起始页和结束页索引(索引从0开始)来提取指定页码区间,并保存为新的 PDF 文件。

using Spire.Pdf;

namespace SplitPDF
{
    class Program
    {
        static void Main(string[] args)
        {
            PdfDocument document = new PdfDocument();
            document.LoadFromFile("心理健康.pdf");

            // 指定拆分的起始页和结束页索引(0-2页,即第1到第3页)
            int startPage = 0;
            int endPage = 2;

            PdfDocument rangePdf = new PdfDocument();
            rangePdf.InsertPageRange(document, startPage, endPage);
            rangePdf.SaveToFile($"指定页码范围.pdf");
            rangePdf.Close();

            document.Close();
        }
    }
}

C#示例 - 按页码范围拆分PDF

按关键字拆分 PDF

如果需要根据文档内容拆分 PDF,可以使用 PdfTextFinder 类的 Find 方法查找包含指定关键字的页面,然后通过 InsertPage 方法提取这些页面:

using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Collections.Generic;

namespace SplitPDF
{
    class Program
    {
        static void Main(string[] args)
        {
            PdfDocument document = new PdfDocument();
            document.LoadFromFile("心理健康.pdf");

            PdfDocument resultDoc = new PdfDocument();
            string keyword = "问题";

            for (int i = 0; i < document.Pages.Count; i++)
            {
                PdfPageBase page = document.Pages[i];
                PdfTextFinder finder = new PdfTextFinder(page);

                finder.Options.Parameter = TextFindParameter.WholeWord;
                finder.Options.Parameter = TextFindParameter.IgnoreCase;

                List<PdfTextFragment> fragments = finder.Find(keyword);

                if (fragments.Count > 0)
                {
                    resultDoc.InsertPage(document, page);
                }
            }

            resultDoc.SaveToFile("关键字.pdf");

            document.Dispose();
            resultDoc.Dispose();
        }
    }
}

提取 PDF 中的指定页面

有时你可能只需要提取文档中的某一页或几页内容,而非整个文件。下面的示例展示了如何使用 InsertPage 方法提取指定页面,并将其保存为新的 PDF 文件:

using Spire.Pdf;

namespace SplitPDF
{
    class Program
    {
        static void Main(string[] args)
        {
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("心理健康.pdf");

            PdfDocument newPdf = new PdfDocument();

            // 提取第3页(索引为2)
            newPdf.InsertPage(pdf, pdf.Pages[2]);

            newPdf.SaveToFile("提取指定页.pdf");

            newPdf.Close();
            pdf.Close();
        }
    }
}

总结

在 C# 中使用 Spire.PDF for .NET 拆分 PDF 文件,不仅简单高效,还具备很强的灵活性。无论是按固定页数拆分,提取特定页码段,还是根据关键字定位内容进行拆分,该库都能提供稳定可靠的支持,满足各种类型的文档处理需求。

常见问题解答(FAQs)

Q1:Spire.PDF 是否免费?

A1:Spire.PDF 提供适用于小型项目或非商业用途的免费版本。若需完整功能,建议使用商业授权版。

Q2:可以拆分加密的 PDF 吗?

A2:可以,只要在加载 PDF 时提供正确的密码即可。

Q3:Spire.PDF 支持 .NET Core 吗?

A3:支持。Spire.PDF 兼容 .NET Framework 与 .NET Core。

Q4:我能在一个项目中同时拆分和合并 PDF 吗?

A4:完全可以。Spire.PDF 同时支持拆分与合并操作。

获取免费授权

如需体验 Spire.PDF for .NET 的完整功能(无评估限制),你可以该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。免费 30 天试用授权。

Spire.PDF 11.6.18 现已发布。该版本通过修复渲染和透明度相关问题,进一步提升了 PDF 转图片的准确性与一致性。详细更新内容如下:

问题修复:


获取 Spire.PDF 11.6.18 请点击:

Spire.PDF for .NET 下载页面

我们很高兴地宣布 Spire.XLS for Java 15.6.3 版本的发布。该版本新增在应用自定义字体时支持字体流功能,并支持获取嵌入图片所在的单元格位置。此外,我们还修复了若干已知问题。具体更新内容如下:

新功能:

问题修复:


获取 Spire.XLS for Java 15.6.3,请点击:

Spire.XLS for Java 下载页面