解析并枚举 PDF 中的对象 - 控制台 C#
本教程介绍如何解析 PDF 文档结构、枚举PDF 对象,以及如何使用 LEADTOOLS SDK 在 C# Windows 控制台应用程序中显示有关对象的信息。
概述 | |
---|---|
概括 | 本教程介绍如何在 C# Windows 控制台应用程序中解析 PDF 文档中的对象。 |
完成时间 | 30分钟 |
Visual Studio 项目 | 下载教程项目 (2 KB) |
平台 | C# Windows 控制台应用程序 |
集成开发环境 | Visual Studio 2017、2019、2022 |
开发许可证 | 下载 LEADTOOLS |
尝试使用其他语言 |
|
所需知识
在开始解析和枚举 PDF 中的对象 - 控制台 C#教程之前,请先查看添加引用和设置许可证教程,熟悉创建项目的基本步骤。
定义
本教程中的PDF 对象包括 PDF 文件中的图像、书签、内部链接、字体和嵌入文件。
创建项目并添加 LEADTOOLS 引用
从“添加引用”和“设置许可证”教程中创建的项目副本开始。如果您没有该项目,请按照该教程中的步骤创建它。
所需的参考文献取决于项目的目的。可以通过以下两种方法之一添加参考文献(但不能同时使用)。
如果使用 NuGet 引用,本教程需要以下 NuGet 包:
Leadtools.Pdf
如果使用本地 DLL 引用,则需要以下 DLL。
DLL 位于<INSTALL_DIR>\LEADTOOLS23\Bin\net
:
Leadtools.dll
Leadtools.Core.dll
Leadtools.Pdf.dll
有关您的应用程序所需的 DLL 文件的完整列表,请参阅应用程序中要包含的文件。
设置许可证文件
许可证用于解锁项目所需的功能。必须在调用任何工具包函数之前设置许可证。有关详细信息(包括不同平台的教程),请参阅设置运行时许可证。
运行时许可证有两种类型:
- 评估许可证,在下载评估工具包时获得。它允许对工具包进行评估。
- 部署许可证。如果需要部署许可证文件和开发者密钥,请参阅获取许可证。
注意:在添加引用和设置许可证教程中更详细地介绍了添加 LEADTOOLS NuGet 和本地引用以及设置许可证。
添加枚举代码
创建项目、添加参考并设置许可证后,就可以开始编码了。
在解决方案资源管理器中,打开Program.cs
。将以下语句添加到顶部的 using 块中Program.cs
:
// Using block at the top
using Leadtools;
using Leadtools.Pdf;
向类中添加以下全局变量:
private static PDFParseDocumentStructureOptions options;
为类创建五个新方法,Program
分别名为ParseImages(PDFDocument document)
、ParseBookmarks(PDFDocument document)
、ParseInternalLinks(PDFDocument document)
、ParseFonts(PDFDocument document)
和ParseEmbeddedFiles(PDFDocument document)
。所有这些方法都用于填充PDFDocument
对象的属性并显示与这些属性相关的信息。这些方法将在方法内部调用Main()
,如下所示。
static void Main(string[] args)
{
try
{
string pdfLocation = @"C:\LEADTOOLS23\Resources\Images\leadtools.pdf";
SetLicense();
PDFDocument pdfDocument = new PDFDocument(pdfLocation);
ParseImages(pdfDocument);
ParseBookmarks(pdfDocument);
ParseInternalLinks(pdfDocument);
ParseFonts(pdfDocument);
ParseEmbeddedFiles(pdfDocument);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.Write("Press ENTER to end program");
Console.Read();
}
处理流
要使用 处理文件MemoryStream
,请将方法中的现有代码替换Main()
为以下内容:
static void Main(string[] args)
{
try
{
string pdfLocation = @"C:\LEADTOOLS23\Resources\Images\leadtools.pdf";
byte[] data = File.ReadAllBytes(pdfLocation);
using MemoryStream ms = new MemoryStream(data);
SetLicense();
PDFDocument pdfDocument = new(ms);
ParseImages(pdfDocument);
ParseBookmarks(pdfDocument);
ParseInternalLinks(pdfDocument);
ParseFonts(pdfDocument);
ParseEmbeddedFiles(pdfDocument);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.Write("Press ENTER to end program");
Console.Read();
}
解析图像
将以下代码添加到ParseImages
方法中以填充PDFDocument.Images
所提供文档的属性并显示对象信息。
private static void ParseImages(PDFDocument document)
{
options = PDFParseDocumentStructureOptions.Images;
document.ParseDocumentStructure(options);
Console.WriteLine("=======================IMAGES=======================\n");
foreach (PDFImage image in document.Images)
{
Console.WriteLine("###########################################");
Console.WriteLine($"BitsPerComponent: {image.BitsPerComponent} bits");
Console.WriteLine($"BitsPerPixel: {image.BitsPerPixel} bits");
Console.WriteLine($"ColorDevice: {image.ColorDevice}");
Console.WriteLine($"ComponentCount: {image.ComponentCount}");
Console.WriteLine($"Height: {image.Height}");
Console.WriteLine($"ImageType: {image.ImageType}");
Console.WriteLine($"ObjectNumber: {image.ObjectNumber}");
Console.WriteLine($"PageNumber: {image.PageNumber}");
Console.WriteLine($"StreamLength: {image.StreamLength}");
Console.WriteLine($"StreamOffset: {image.StreamOffset}");
Console.WriteLine($"Width: {image.Width}");
Console.WriteLine("###########################################\n");
}
Console.WriteLine("\n====================================================\n");
}
解析书签
将以下代码添加到ParseBookmarks
方法中,以将 PDF 书签信息显示到控制台。
private static void ParseBookmarks(PDFDocument document)
{
options = PDFParseDocumentStructureOptions.Bookmarks;
document.ParseDocumentStructure(options);
Console.WriteLine("=======================BOOKMARKS=======================\n");
foreach (PDFBookmark bookmark in document.Bookmarks)
{
Console.WriteLine("###########################################");
Console.WriteLine($"BookmarkStyle: {bookmark.BookmarkStyle}");
Console.WriteLine($"Level: {bookmark.Level}");
Console.WriteLine($"TargetPageFitType: {bookmark.TargetPageFitType}");
Console.WriteLine($"TargetPageNumber: {bookmark.TargetPageNumber}");
Console.WriteLine($"TargetPosition: {bookmark.TargetPosition}");
Console.WriteLine($"Title: {bookmark.Title}");
Console.WriteLine("###########################################\n");
}
Console.WriteLine("\n====================================================\n");
}
解析内部链接
将以下代码添加到ParseInternalLinks
方法中,以将 PDF 内部链接信息显示到控制台。
private static void ParseInternalLinks(PDFDocument document)
{
options = PDFParseDocumentStructureOptions.InternalLinks;
document.ParseDocumentStructure(options);
Console.WriteLine("=======================INTERNAL LINKS=======================\n");
foreach (PDFInternalLink internalLink in document.InternalLinks)
{
Console.WriteLine("###########################################");
Console.WriteLine($"BorderColor: {internalLink.BorderColor}");
Console.WriteLine($"BorderDashLength: {internalLink.BorderDashLength}");
Console.WriteLine($"BorderWidth: {internalLink.BorderWidth}");
Console.WriteLine($"SourceBounds: {internalLink.SourceBounds}");
Console.WriteLine($"SourcePageNumber: {internalLink.SourcePageNumber}");
Console.WriteLine($"TargetPageFitType: {internalLink.TargetPageFitType}");
Console.WriteLine($"TargetPageNumber: {internalLink.TargetPageNumber}");
Console.WriteLine($"TargetPosition: {internalLink.TargetPosition}");
Console.WriteLine($"TargetZoomPercent: {internalLink.TargetZoomPercent}%");
Console.WriteLine("###########################################\n");
}
Console.WriteLine("\n==========================================================\n");
}
解析字体
将以下代码添加到ParseFonts
方法中,以将 PDF 字体信息显示到控制台。
private static void ParseFonts(PDFDocument document)
{
options = PDFParseDocumentStructureOptions.Fonts;
document.ParseDocumentStructure(options);
Console.WriteLine("=======================FONTS=======================\n");
foreach (PDFFont font in document.Fonts)
{
Console.WriteLine("###########################################");
Console.WriteLine($"DescendantCID: {font.DescendantCID}");
Console.WriteLine($"EmbeddingType: {font.EmbeddingType}");
Console.WriteLine($"Encoding: {font.Encoding}");
Console.WriteLine($"FaceName: {font.FaceName}");
Console.WriteLine($"FontType: {font.FontType}");
Console.WriteLine("###########################################\n");
}
Console.WriteLine("\n==================================================\n");
}
解析嵌入文件
将以下代码添加到ParseEmbeddedFiles
方法中以填充PDFDocument.EmbeddedFiles
所提供文档的属性并将有关嵌入文件的信息显示到控制台。
private static void ParseEmbeddedFiles(PDFDocument document)
{
options = PDFParseDocumentStructureOptions.EmbeddedFiles;
document.ParseDocumentStructure(options);
Console.WriteLine("=======================EMBEDDED FILES=======================\n");
foreach (PDFEmbeddedFile file in document.EmbeddedFiles)
{
Console.WriteLine("###########################################");
Console.WriteLine($"Created: {file.Created}");
Console.WriteLine($"Description: {file.Description}");
Console.WriteLine($"FileName: {file.FileName}");
Console.WriteLine($"FileNumber: {file.FileNumber}");
Console.WriteLine($"FileSize: {file.FileSize}");
Console.WriteLine($"Modified: {file.Modified}");
Console.WriteLine($"ObjectNumber: {file.ObjectNumber}");
Console.WriteLine($"SchemaValues: {file.SchemaValues}");
Console.WriteLine("###########################################\n");
}
Console.WriteLine("\n==========================================================\n");
}
运行项目
按F5或选择“调试”->“开始调试”来运行项目。
如果正确执行了这些步骤,应用程序将运行并从中加载指定的 PDF 文档C:\LEADTOOLS23\Resources\Images\leadtools.pdf
,解析其所有PDF 对象的结构,并将信息显示到控制台。
本教程演示了如何加载 PDF 文档、解析文档的所有PDFDocument
属性并显示信息。此外,我们还介绍了如何使用PDFDocument
、PDFParseDocumentStructureOptions
、PDFEmbeddedFile
类以及PDFImage
、PDFBookmark
、PDFInternalLink
和PDFFont
结构。