比较C#中的两个PDF文件

时间:2012-09-08 13:37:25

标签: c#

我有两个pdf文件,我想比较这两个pdf文件并在messagebox中打印差异。

到目前为止,我有这个(但它没有像我期望的那样工作):

  private void button1_Click(object sender, EventArgs e)
    {
        string str1 = this.textBox1.Text;
        string str2 = this.textBox2.Text;

        string comparison = str1.Replace(str2,"");
        MessageBox.Show(comparison);
    }


 private void ParsePDF(string filePath)
    {
        string text = string.Empty;

        PdfReader reader = new iTextSharp.text.pdf.PdfReader(filePath);
        byte[] streamBytes = reader.GetPageContent(1);
        PRTokeniser tokenizer = new PRTokeniser(streamBytes);

        while (tokenizer.NextToken())
        {
            if (tokenizer.TokenType == PRTokeniser.TokType.STRING)
            {
                text += tokenizer.StringValue;
            }
        }
        this.textBox1.Text = text.ToString();
        this.textBox2.Text = text.ToString();
    }

}

就在下面我调用那个方法:ParsePDF(“C://Users//lf222aw//Desktop//file1.pdf”);

我的程序是这样的: 假设我有一个带有文本“I love stackoverflow”的文本框和另一个文本框 “我stackoverflow”和我的程序打印出这样的结果:“我喜欢stackoverflow”和我想要打印的是“爱”作为两个文件之间的差异

任何想法? 的问候,

5 个答案:

答案 0 :(得分:2)

在下面的链接中检查Github存储库。

google-diff-match-patch

它是一个用于字符串的开源库。比较。它是用C#编写的多种语言。您可以计算两个字符串值或文本文档之间的差异差异。

答案 1 :(得分:1)

如果您将文件拆分为单词,则可以使用以下内容:

    Dim str1 = New String() {"I", "love", "stackoverflow"}
    Dim str2 = New String() {"I", "stackoverflow"}
    Dim Diff = str1.Where(Function(x) Not str2.Contains(x)).ToArray()

答案 2 :(得分:0)

您错误地使用了String.Replace。它应该在字符串1中找到所有出现的字符串2,并用给定的文本替换它。在您的示例中,您尝试在I stackoverflow中找到所有I love stackoverflow,但没有匹配,这就是您的程序仍在打印I love stackoverflow的原因。查看关于字符串比较的SO帖子。 How to find difference between two strings?

答案 3 :(得分:0)

如果我正确地阅读您的代码,您将1页的内容写入两个文本框。

同样使用你的替换语句它将永远不会起作用,因为“I stackoverflow”中不存在“I stackoverflow”。

如果您有“a b c”和“a c”。

你会看到“a b c”中没有“a c”

How to find difference between two strings?

答案 4 :(得分:0)

在源文本和目标文本/文件中,区别在于单词,并且必须在输出文件中突出显示该单词。 .NET API的GroupDocs.Comparison提供了此功能。如果启用它,它将检测样式更改:

ComparisonSettings settings = new ComparisonSettings();
settings.StyleChangeDetection = true;

并且可以检测到以下样式更改:

settings.InsertedItemsStyle.FontColor = System.Drawing.Color.Brown;
settings.InsertedItemsStyle.BeginSeparatorString = "<inserted>";
settings.InsertedItemsStyle.EndSeparatorString = "</inserted>";
settings.DeletedItemsStyle.FontColor = System.Drawing.Color.Aquamarine;
settings.DeletedItemsStyle.BeginSeparatorString = "<deleted>";
settings.DeletedItemsStyle.EndSeparatorString = "</deleted>";

settings.StyleChangedItemsStyle.FontColor = System.Drawing.Color.Aqua;
settings.StyleChangedItemsStyle.BeginSeparatorString = "<style>";
settings.StyleChangedItemsStyle.EndSeparatorString = "</style>";

下面是处理文档比较的代码:

ICompareResult result = comparer.Compare(source, target, settings);