Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
请注意,所有比较工具均可在 Aspose.PDF.Drawing 库中使用。
在处理 PDF 文档时,有时需要比较两个文档的内容以识别差异。Aspose.PDF for .NET 库提供了一个强大的工具集来实现这一目的。在本文中,我们将探讨如何使用几个简单的代码片段比较 PDF 文档。
Aspose.PDF 中的比较功能允许您逐页比较两个 PDF 文档。您可以选择比较特定页面或整个文档。生成的比较文档突出显示差异,使识别两个文件之间的更改变得更加容易。
以下是使用 Aspose.PDF for .NET 库比较 PDF 文档的可能方法列表:
比较特定页面 - 比较两个 PDF 文档的第一页。
比较整个文档 - 比较两个 PDF 文档的整个内容。
图形比较 PDF 文档:
使用 GetDifference 方法比较 PDF - 标记更改的单独图像。
使用 CompareDocumentsToPdf 方法比较 PDF - 标记更改的图像的 PDF 文档。
第一个代码片段演示了如何比较两个 PDF 文档的第一页。
文档初始化。 代码首先使用各自的文件路径(documentPath1 和 documentPath2)初始化两个 PDF 文档。路径目前指定为空字符串,但在实际操作中,您将用实际的文件路径替换这些路径。
比较过程。
‘AdditionalChangeMarks = true’ - 此选项确保显示额外的变更标记。这些标记突出显示可能存在于其他页面上的差异,即使它们不在当前正在比较的页面上。
‘ComparisonMode = ComparisonMode.IgnoreSpaces’ - 此模式告诉比较器忽略文本中的空格,仅关注单词内的更改。
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ComparingSpecificPages()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();
// Open PDF documents
using (var document1 = new Aspose.Pdf.Document(dataDir + "ComparingSpecificPages1.pdf"))
{
using (var document2 = new Aspose.Pdf.Document(dataDir + "ComparingSpecificPages2.pdf"))
{
// Compare
Aspose.Pdf.Comparison.SideBySidePdfComparer.Compare(document1.Pages[1], document2.Pages[1], dataDir + "ComparingSpecificPages_out.pdf", new Aspose.Pdf.Comparison.SideBySideComparisonOptions
{
AdditionalChangeMarks = true,
ComparisonMode = Aspose.Pdf.Comparison.ComparisonMode.IgnoreSpaces,
DeleteColor = Color.DarkGray,
InsertColor = Color.LightYellow
});
}
}
}
第二个代码片段扩展了范围,以比较两个 PDF 文档的整个内容。
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ComparingEntireDocuments()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();
// Open PDF documents
using (var document1 = new Aspose.Pdf.Document(dataDir + "ComparingEntireDocuments1.pdf"))
{
using (var document2 = new Aspose.Pdf.Document(dataDir + "ComparingEntireDocuments2.pdf"))
{
// Compare
Aspose.Pdf.Comparison.SideBySidePdfComparer.Compare(
document1,
document2,
dataDir + "ComparingEntireDocuments_out.pdf",
new Aspose.Pdf.Comparison.SideBySideComparisonOptions
{
AdditionalChangeMarks = true,
ComparisonMode = Aspose.Pdf.Comparison.ComparisonMode.IgnoreSpaces,
DeleteColor = Color.DarkGray,
InsertColor = Color.LightYellow
});
}
}
}
这些代码片段生成的比较结果是 PDF 文档,您可以在 Adobe Acrobat 等查看器中打开。如果您在 Adobe Acrobat 中使用双页视图,您将看到并排的更改:
通过将 ‘AdditionalChangeMarks’ 设置为 ’true’,您还可以看到可能发生在其他页面上的更改的标记,即使这些更改不在当前查看的页面上。
Aspose.PDF for .NET 提供了强大的工具来比较 PDF 文档,无论您需要比较特定页面还是整个文档。通过使用 ‘AdditionalChangeMarks’ 和不同的 ‘ComparisonMode 设置’,您可以根据特定需求定制比较过程。生成的文档提供了清晰的并排更改视图,使跟踪修订和确保文档准确性变得更加容易。
| 类 | 目的 | 关键属性 | 如何使用 |
|---|---|---|---|
SideBySideDocsComparisonResult |
表示两个 PDF 文档的并排比较结果。 | * HasChanges – 指示是否检测到任何更改。* FirstDocChanges – 按第一个文档版本的页面分组的更改列表。* SecondDocChanges – 按第二个文档版本的页面分组的更改列表。* FullChanges – 完整的更改序列,其中每个元素对应于一对比较页面,并包含该页面对的所有比较操作。 |
由 SideBySidePdfComparer.Compare(Document, Document, string, SideBySideComparisonOptions) 方法返回。获取实例后,您可以确定是否存在任何更改(HasChanges),并遍历集合以检索有关哪些页面和片段已更改的详细信息。 |
SideBySidePagesComparisonResult |
表示两个单独 PDF 页面并排比较的结果。 | * HasChanges – 指示页面之间是否存在任何差异。* FirstPageChanges – 在第一页上检测到的更改列表。* SecondPageChanges – 在第二页上检测到的更改列表。* FullChanges – 两个页面之间的完整比较操作序列。 |
由 SideBySidePdfComparer.Compare(Page, Page, string, SideBySideComparisonOptions) 方法返回。获取实例后,您可以确定是否存在任何更改(HasChanges),并遍历集合以检索完整的差异列表。 |
| 属性 | 类型 | 描述 |
|---|---|---|
HasChanges |
bool |
指示是否存在至少一个差异。 |
FirstDocChanges / FirstPageChanges |
List<List<EditContainer>> / List<EditContainer> |
包含在第一个(文档/页面)中检测到的更改。对于文档,这是一个列表的列表,其中每个嵌套列表对应于单个页面。 |
SecondDocChanges / SecondPageChanges |
List<List<EditContainer>> / List<EditContainer> |
包含在第二个(文档/页面)中检测到的更改。对于文档,这是一个列表的列表,其中每个嵌套列表对应于单个页面。 |
FullChanges |
List<List<DiffOperation>>(文档)List<DiffOperation>(页面) |
所有比较操作的合并集。对于文档,这是一个二维列表,其中每个外部元素对应于一对比较页面。对于页面,这是一个平面操作列表。 |
DiffOperation |
(外部类型) | 描述特定更改(插入、删除、相等)。 |
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ComparingEntireDocuments()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();
// --- Comparing pages ----------------------------
// Open PDF documents
using (Document doc1 = new Document(dataDir + "ComparingEntireDocuments1.pdf"),
doc2 = new Document(dataDir + "ComparingEntireDocuments2.pdf"))
{
// Compare
SideBySidePagesComparisonResult pageResult = SideBySidePdfComparer.Compare(
doc1.Pages[1],
doc2.Pages[1],
dataDir + "ComparingEntireDocuments_out.pdf",
new SideBySideComparisonOptions
{
AdditionalChangeMarks = false,
ComparisonMode = ComparisonMode.Normal
});
Console.WriteLine("=== Page Comparison ===");
Console.WriteLine(pageResult.HasChanges ? "Changes were detected" : "No changes detected");
Console.WriteLine($"First page changes count : {pageResult.FirstPageChanges.Count}");
Console.WriteLine($"Second page changes count: {pageResult.SecondPageChanges.Count}");
Console.WriteLine($"Total changes count : {pageResult.FullChanges.Count}");
}
// --- Comparing documents ----------------------------
// Open PDF documents
using (Document doc1 = new Document(dataDir + "ComparingEntireDocuments1.pdf"),
doc2 = new Document(dataDir + "ComparingEntireDocuments2.pdf"))
{
// Compare
SideBySideDocsComparisonResult docResult = SideBySidePdfComparer.Compare(
doc1,
doc2,
dataDir + "ComparingEntireDocuments_out.pdf",
new SideBySideComparisonOptions
{
AdditionalChangeMarks = false,
ComparisonMode = ComparisonMode.Normal
});
Console.WriteLine("\n=== Document Comparison ===");
Console.WriteLine(docResult.HasChanges ? "Changes were detected" : "No changes detected");
Console.WriteLine($"First document changes count : {Count(docResult.FirstDocChanges)} ");
Console.WriteLine($"Second document changes count: {Count(docResult.SecondDocChanges)}");
Console.WriteLine($"Total changes count : {Count(docResult.FullChanges)}");
}
}
private static int Count<T>(List<List<T>> list)
{
int count = 0;
foreach (var innerList in list)
{
count += innerList.Count;
}
return count;
}
EditContainer 是一个帮助对象,描述在比较 PDF 页面(或文档)期间检测到的单个更改。它充当一个“容器”,存储更改标识符、差异类型、附加标记标志和几何坐标(矩形),指示更改在页面上的确切位置。
| 属性 | 类型 | 描述 |
|---|---|---|
Id |
int |
更改的唯一标识符。它允许在比较结果中区分一个更改与另一个更改。它用于页面上的更改注释。 |
Operation |
DiffOperation |
描述更改性质的差异操作类型(插入、删除、替换等)。 |
Rects |
List<Rectangle> |
覆盖页面上修改片段的矩形区域集合。 |
在协作文档时,特别是在专业环境中,您通常会得到同一文件的多个版本。
您可以使用 GraphicalPdfComparer 类比较 PDF 文档和页面。该类适合比较页面图形内容中的更改。
使用 Aspose.PDF for .NET,可以比较文档和页面,并将比较结果输出到 PDF 文档或图像文件。
您可以设置以下类属性:
该类具有一个方法,允许您以适合进一步处理的形式获取页面图像差异:ImagesDifference GetDifference(Page page1, Page page2)。
此方法返回一个 ImagesDifference 类的对象,其中包含正在比较的第一页的图像和差异数组。差异数组和原始图像具有 RGB24bpp 像素格式。
ImagesDifference 允许您生成不同的图像,并通过将差异数组添加到原始图像来获取正在比较的第二页的图像。为此,请使用 ImagesDifference.GetDestinationImage 和 ImagesDifference.DifferenceToImage 方法。
提供的代码定义了一个方法 GetDifference,该方法比较两个 PDF 文档并生成它们之间差异的视觉表示。
此方法比较两个 PDF 文件的第一页,并生成两个 PNG 图像:
此过程对于直观比较文档的两个版本之间的更改或差异非常有用。
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ComparePDFWithGetDifferenceMethod()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();
// Open PDF documents
using (var document1 = new Aspose.Pdf.Document(dataDir + "ComparePDFWithGetDifferenceMethod1.pdf"))
{
using (var document2 = new Aspose.Pdf.Document(dataDir + "ComparePDFWithGetDifferenceMethod2.pdf"))
{
// Create comparer
var comparer = new Aspose.Pdf.Comparison.GraphicalPdfComparer();
// Compare
using (var imagesDifference = comparer.GetDifference(document1.Pages[1], document2.Pages[1]))
{
using (var diffImg = imagesDifference.DifferenceToImage(Aspose.Pdf.Color.Red, Aspose.Pdf.Color.White))
{
diffImg.Save(dataDir + "ComparePDFWithGetDifferenceMethodDiffPngFilePath_out.png");
}
using (var destImg = imagesDifference.GetDestinationImage())
{
destImg.Save(dataDir + "ComparePDFWithGetDifferenceMethodDestPngFilePath_out.png");
}
}
}
}
}
提供的代码片段使用 CompareDocumentsToPdf 方法,该方法比较两个文档并生成比较结果的 PDF 报告。
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ComparePDFWithCompareDocumentsToPdfMethod()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();
// Open PDF documents
using (var document1 = new Aspose.Pdf.Document(dataDir + "ComparePDFWithCompareDocumentsToPdfMethod1.pdf"))
{
using (var document2 = new Aspose.Pdf.Document(dataDir + "ComparePDFWithCompareDocumentsToPdfMethod2.pdf"))
{
// Create comparer
var comparer = new Aspose.Pdf.Comparison.GraphicalPdfComparer()
{
Threshold = 3.0,
Color = Aspose.Pdf.Color.Blue,
Resolution = new Aspose.Pdf.Devices.Resolution(300)
};
// Compare
comparer.CompareDocumentsToPdf(document1, document2, dataDir + "compareDocumentsToPdf_out.pdf");
}
}
}
您可以使用 TextPdfComparer 类比较文档和单个页面。该类允许逐页或作为单个连续内容流(没有页面分隔)比较文档。比较方法返回一个差异数组,可以传递给任何实现 IStringOutputGenerator 或 IFileOutputGenerator 接口的类,以生成格式化的比较输出。支持的输出格式有:HTML、Markdown、PDF 和 JSON。您还可以使用 ComparisonStatistics 类获取执行的比较操作的统计信息。
| 方法 | 描述 | 参数 | 返回值 |
|---|---|---|---|
CompareDocumentsPageByPage(Document document1, Document document2, ComparisonOptions options) |
逐页比较两个 PDF 文档。 | * document1 – 第一个文档。* document2 – 第二个文档。* options – 比较选项(见下文)。 |
List<List<DiffOperation>> – 每页的差异列表。 |
CompareDocumentsPageByPage(Document document1, Document document2, ComparisonOptions options, string resultPdfDocumentPath) |
与上面相同,但还将比较结果保存到 PDF 文件中。 | 与上面相同的参数 + resultPdfDocumentPath – 输出文件的路径。 |
List<List<DiffOperation>> – 差异列表。 |
CompareFlatDocuments(Document document1, Document document2, ComparisonOptions options) |
将两个 PDF 文档作为单个连续文本进行比较(合并所有页面)。 | 与 CompareDocumentsPageByPage 中的参数相同。 |
List<DiffOperation> – 所有差异的列表。 |
CompareFlatDocuments(Document document1, Document document2, ComparisonOptions options, string resultPdfDocumentPath) |
扁平文档比较,结果保存到 PDF 文件中。 | 与 CompareFlatDocuments 中的参数相同 + resultPdfDocumentPath。 |
List<DiffOperation> – 差异列表。 |
ComparePages(Page page1, Page page2, ComparisonOptions options) |
比较两个单独的页面。 | * page1 – 第一个页面。* page2 – 第二个页面。* options – 比较选项。 |
List<DiffOperation> – 页面差异列表。 |
CreateComparisonStatistics(List<DiffOperation> diffs) |
为一组操作(单个页面)生成比较统计信息。 | diffs – DiffOperation 的列表。 |
TextItemComparisonStatistics(见下文)。 |
CreateComparisonStatistics(List<List<DiffOperation>> diffs) |
为跨页面的操作列表(文档级别)生成比较统计信息。 | diffs – DiffOperation 的列表列表。 |
DocumentComparisonStatistics(见下文)。 |
AssemblySourcePageText(List<DiffOperation> diffs) |
重建原始(更改前)页面文本。 | diffs – 操作列表。 |
string – 原始文本。 |
AssemblyDestinationPageText(List<DiffOperation> diffs) |
重建修改后的(更改后)页面文本。 | diffs – 操作列表。 |
string – 修改后的文本。 |
ComparisonOptions影响比较过程的参数:
| 属性 | 类型 | 描述 |
|---|---|---|
ExtractionArea |
Rectangle |
将从中提取文本的区域。与 ExcludeTables、ExcludeAreas1/2 不兼容。 |
ExcludeTables |
bool |
从比较中排除表格。与 ExtractionArea 不兼容。 |
ExcludeAreas1 |
Rectangle[] |
要排除的第一个文档的区域数组。 |
ExcludeAreas2 |
Rectangle[] |
要排除的第二个文档的区域数组。 |
EditOperationsOrder |
EditOperationsOrder (enum) |
应用插入/删除操作的顺序(默认是 DeleteFirst)。 |
DiffOperation表示单个差异操作。包含:
| 属性 | 类型 | 描述 |
|---|---|---|
Operation |
Operation (enum) |
操作类型(Equal、Delete、Insert)。 |
Text |
string |
与操作相关的文本。 |
ComparisonStatistics| 类 | 描述 |
|---|---|
TextItemComparisonStatistics |
单个文本(页面)的统计信息。包括总字符数、插入、删除的数量及相应的操作。 |
DocumentComparisonStatistics(继承自 TextItemComparisonStatistics) |
整个文档的扩展统计信息,包括 PagesStatistics 列表(每页统计信息)。 |
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.