在 PDF 文件中突出显示字符

介绍

在处理 PDF 时,经常需要突出显示文本或字符 - 无论是出于学术目的、编辑还是仅仅提高可读性。想象一下,您有一个漂亮的文档,但您想强调某些部分。这就是突出显示的作用所在!在本教程中,我们将深入研究如何使用强大的 Aspose.PDF for .NET 库突出显示 PDF 文件中的字符。

先决条件

在我们开始编写代码之前,让我们先确保我们拥有所需的一切。以下是您需要的内容:

  1. 开发环境:本教程假设您在 Visual Studio 或类似的 .NET IDE 中工作。
  2. Aspose.PDF for .NET Library: 如果你还没有,你可以点击下载并将其添加到您的项目中。
  3. C# 基础知识:C# 编程入门将帮助您轻松理解实现。
  4. PDF 文档:您应该准备好一个示例 PDF 文件以供使用。您可以创建一个或使用现有文档。

导入包

首先,我们需要导入必要的命名空间。为此,您需要将它们包含在 C# 文件的顶部:

using System.IO;
using Aspose.Pdf;
using Aspose.Pdf.Facades;
using Aspose.Pdf.Devices;
using Aspose.Pdf.Text;
using System;
using System.Drawing;

这些包对于使用 Aspose 库创建、操作和处理 PDF 文档至关重要。

现在,让我们将这个过程分解为易于理解的步骤来突出显示 PDF 中的字符。

步骤 1:初始化 PDF 文档

第一步是初始化您的 PDF 文档。这涉及加载您将要使用的 PDF 文件。操作方法如下:

string dataDir = "YOUR DOCUMENT DIRECTORY"; //确保设置正确的路径。
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document(dataDir + "input.pdf");

在此代码片段中,替换YOUR DOCUMENT DIRECTORY与您机器上输入 PDF 文件所在的实际路径一致。Aspose.Pdf.Document类被实例化来加载您的PDF。

步骤 2:设置渲染过程

接下来,我们需要为文档准备渲染过程。这对于准确突出显示页面上的字符至关重要。

int resolution = 150; //设置图像捕捉的分辨率。
using (MemoryStream ms = new MemoryStream())
{
    PdfConverter conv = new PdfConverter(pdfDocument);
    conv.Resolution = new Resolution(resolution, resolution);
    conv.GetNextImage(ms, System.Drawing.Imaging.ImageFormat.Png);
    Bitmap bmp = (Bitmap)Bitmap.FromStream(ms);

我们定义了一个清晰度,以便正确呈现文本。PdfConverter将 PDF 页面转换为图像,以便我们可以在其上绘图。

步骤 3:创建用于绘图的图形对象

设置绘图过程后,我们需要创建一个图形对象来执行突出显示:

using (System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp))
{
    float scale = resolution / 72f; //比例因子。
    gr.Transform = new System.Drawing.Drawing2D.Matrix(scale, 0, 0, -scale, 0, bmp.Height);

在这里,我们从位图图像创建图形对象。转换有助于调整渲染以正确匹配所需的分辨率。

步骤 4:循环遍历每一页并突出显示文本

现在,让我们循环遍历 PDF 中的每一页并找到我们想要突出显示的文本片段:

for (int i = 0; i < pdfDocument.Pages.Count; i++)
{
    Page page = pdfDocument.Pages[i + 1]; //在 Aspose 中,页面以 1 为索引。
    TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"[\S]+");
    textFragmentAbsorber.TextSearchOptions.IsRegularExpressionUsed = true;
    page.Accept(textFragmentAbsorber);

我们访问每个页面并使用TextFragmentAbsorber 正则表达式模式@"[\S]+"捕获所有非空白字符。

步骤 5:提取文本片段并突出显示

现在是时候提取文本片段并突出显示它们了。此过程涉及在我们要突出显示的字符周围绘制矩形:

TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;

foreach (TextFragment textFragment in textFragmentCollection)
{
    //在此强调逻辑
    for (int segNum = 1; segNum <= textFragment.Segments.Count; segNum++)
    {
        TextSegment segment = textFragment.Segments[segNum];
        for (int charNum = 1; charNum <= segment.Characters.Count; charNum++)
        {
            CharInfo characterInfo = segment.Characters[charNum];
            gr.DrawRectangle(Pens.Black, 
                (float)characterInfo.Rectangle.LLX, 
                (float)characterInfo.Rectangle.LLY, 
                (float)characterInfo.Rectangle.Width, 
                (float)characterInfo.Rectangle.Height);
        }
    }
}

我们循环遍历每个文本片段、其段和单个字符,使用之前创建的图形对象在它们周围绘制矩形。

步骤6:保存修改后的图像

突出显示后,您需要将生成的图像保存为新的 PNG 文件:

dataDir = dataDir + "HighlightCharacterInPDF_out.png";
bmp.Save(dataDir, System.Drawing.Imaging.ImageFormat.Png);

此行将您修改的位图图像作为 PNG 文件保存在指定目录中。

步骤 7:结束异常处理

最后,将代码包装在 try-catch 块中是一种很好的做法,确保我们能够正常处理任何意外错误:

catch (Exception ex)
{
    Console.WriteLine(ex.Message + "\nThis example will only work if you apply a valid Aspose License. You can purchase full license or get a 30-day temporary license from [here](https://buy.aspose.com/temporary-license/)。");
}

该块捕获过程中可能发生的任何异常并向用户提供信息反馈。

结论

就这样!您已成功使用 Aspose.PDF for .NET 突出显示 PDF 文件中的字符。这个功能强大的库为 PDF 操作打开了无限可能——无论您是处理注释、表单填写还是文档转换。在您继续使用 Aspose 的过程中,请记住实践是关键。继续尝试不同的功能,您很快就会成为 PDF 专家!

常见问题解答

什么是 Aspose.PDF for .NET?

Aspose.PDF for .NET 是一个库,允许在.NET 应用程序中以编程方式创建、操作和转换 PDF 文档。

我可以一次突出显示多个文本片段吗?

是的,所提供的代码可以通过循环遍历 PDF 中的所有文本来突出显示多个片段。

Aspose.PDF 有免费版本吗?

是的,Aspose 提供免费试用,因此您可以在购买前测试该库。

我需要任何许可证才能使用 Aspose.PDF 吗?

是的,商业用途需要有效的许可证,但您可以获取 30 天的临时许可证进行测试。

在哪里可以找到更多文档?

您可以参考Aspose.PDF 文档了解有关实施和功能的更多详细信息。