核心 PDF 文档管理涵盖几乎所有 PDF 工作流中出现的操作:打开或创建文档、访问页面及其内容、读取和写入批注、提取文本以及处理交互式操作。Aspose.PDF FOSS for .NET 提供了一个 .NET 8+ API,通过以 Document 和 Page 类型为中心的一致对象模型来处理所有这些任务。
文档生命周期:创建,打开,保存
每个工作流都从创建新文档或加载现有文档开始。Document.Create() 返回一个新的空 Document 实例。Document.Open(data) 接受 byte[] 或 Stream 并解析 PDF 结构:
using var doc = Document.Create();
doc.Pages.Add();
var page = doc.Pages[1];
var action = PdfAction.CreateUri("https://aspose.com");
page.Annotations.AddLinkAnnotation(new Rectangle(50, 700, 200, 720), action);
using var ms = new MemoryStream();
doc.Save(ms);
ms.Position = 0;
using var doc2 = Document.Open(ms.ToArray());
var annot = (LinkAnnotation)doc2.Pages[1].Annotations[1];
Console.WriteLine(annot.Uri); // https://aspose.com
此代码段打开一个最小的 PDF,在第 1 页添加链接注释,保存到 MemoryStream,并验证重新加载后注释仍然保留。Document.Save(Stream) 重载写入完整的更新结构;Document.ToArray() 直接返回字节。
页面访问和页面集合
页面通过 Pages 属性使用基于 1 的整数索引进行访问:doc.Pages[1] 返回第一页,doc.Pages[doc.Pages.Count] 返回最后一页。每个 Page 对象公开:
Annotations— 该页面的AnnotationCollection,支持AddLinkAnnotation并按类型枚举现有注释。- 内容流运算符 — 通过
Operators集合对页面绘图命令进行低级访问。
基于 1 的索引在整个 API 中保持一致:注释查找、GoTo 操作的目标页面索引以及所有其他页面引用均使用相同的约定。
使用 TextFragmentAbsorber 进行文本提取
TextFragmentAbsorber 是读取 PDF 页面文本的标准入口点。使用无参数构造函数提取所有片段,或传入搜索短语以过滤匹配的文本:
using var doc = Document.Open("path/to/document.pdf");
var absorber = new TextFragmentAbsorber("Hello");
absorber.Visit(doc.Pages[1]);
foreach (var fragment in absorber.TextFragments)
{
Console.WriteLine($"Found: {fragment.Text} size={fragment.FontSize}");
}
调用 absorber.Visit(page) 来处理单页。生成的 TextFragments 集合包含 TextFragment 对象;每个对象公开 Text(字符串内容)和 FontSize(渲染后的点大小)。第二个重载 TextFragmentAbsorber(searchPhrase, isRegex) 接受正则表达式标志用于基于模式的搜索。
交互操作
PdfAction 是所有标准 PDF 操作类型的工厂类。四个静态工厂方法覆盖了最常见的情况:
PdfAction.CreateUri(uri)— 打开用户浏览器中的 URL。PdfAction.CreateGoTo(pageIndex, fitType)— 在文档中导航到特定页面。PdfAction.CreateJavaScript(script)— 在 PDF 查看器中执行 JavaScript 字符串。PdfAction.CreateLaunch(filePath)— 启动外部文件或应用程序。
操作通过注释附加到页面。AnnotationCollection.AddLinkAnnotation(rectangle, action) 在指定的矩形区域上放置一个 LinkAnnotation,并附加给定的操作:
using var doc = Document.Create();
doc.Pages.Add();
var page = doc.Pages[1];
var action = PdfAction.CreateUri("https://example.org");
var annot = page.Annotations.AddLinkAnnotation(new Rectangle(10, 10, 100, 30), action);
Console.WriteLine(page.Annotations.Count); // 1
Console.WriteLine(annot.AnnotationType); // Link
AnnotationType.Link 确认该注释已创建为链接类型。Rectangle 构造函数接受 PDF 用户空间单位中的 left、bottom、right 和 top 坐标。
文档元数据和许可
Document 类公开 IsLicensed(在 FOSS 构建中返回 true),JavaScript(用于文档级脚本的 JavaScriptCollection),以及 DocumentActions 用于生命周期事件,例如 BeforeClosing 和 BeforeSaving。
FOSS 包通过 NuGet 安装:
dotnet add package Aspose.Pdf.Foss --version 0.1.0-alpha
不需要许可证密钥。MIT 许可证允许在商业应用中使用,且无需署名,只需保留许可证声明。