Compare documents with GroupDocs.Comparison
Leave feedback
On this page
GroupDocs.Comparison finds the differences between two versions of a document and writes a result file with the changes marked up — insertions, deletions and style changes, down to word and character level.
The examples below compare two revisions of the same contract. contract-v1.docx and contract-v2.docx differ in exactly three places: the delivery date, the contract value, and a late-delivery clause added in v2. Each example is ready to copy into a project once you have installed the package.
The change count comes out higher than three, because GroupDocs.Comparison reports at word level and records a reworded sentence as a deletion plus an insertion rather than as one edit.
Compare two documents
The source document goes to the constructor, the revision to add, and compare writes the marked-up result.
In the result, inserted text is blue, deleted text is red and struck through, and style-only changes are green.
List every change
getChanges returns the differences as data rather than a document, which is what you want when the comparison feeds a review UI or an audit log rather than a human reader.
contract-v1.docx and contract-v2.docx are the sample files used in this example. Download contract-v1.docx and contract-v2.docx.
Changes found: 7
0. Deleted | source: 'The vendor shall deliver the completed remediation plan by 30 June 2026.' | target: 'The vendor shall deliver the completed remediation plan by 31 August 2026.'
1. Inserted | source: 'The vendor shall deliver the completed remediation plan by 30 June 2026.' | target: 'The vendor shall deliver the completed remediation plan by 31 August 2026.'
2. Inserted | source: 'The vendor shall deliver the completed remediation plan by 30 June 2026.' | target: 'The vend
[TRUNCATED]
Each change carries a ComparisonAction. Set it to REJECT and re-apply, and the result keeps the source wording for that change while accepting the rest — the API behind a review workflow.
importcom.groupdocs.comparison.Comparer;importcom.groupdocs.comparison.options.ApplyChangeOptions;importcom.groupdocs.comparison.result.ChangeInfo;importcom.groupdocs.comparison.result.ComparisonAction;try(Comparercomparer=newComparer("contract-v1.docx")){comparer.add("contract-v2.docx");comparer.compare();ChangeInfo[]changes=comparer.getChanges();// Accept everything except the first change, which we reject
for(ChangeInfochange:changes){change.setComparisonAction(ComparisonAction.ACCEPT);}if(changes.length>0){changes[0].setComparisonAction(ComparisonAction.REJECT);System.out.println("Rejected: '"+changes[0].getTargetText()+"'");}ApplyChangeOptionsapplyOptions=newApplyChangeOptions();applyOptions.setChanges(changes);comparer.applyChanges("comparison-accept-reject.docx",applyOptions);}
contract-v1.docx and contract-v2.docx are the sample files used in this example. Download contract-v1.docx and contract-v2.docx.
GroupDocs.Comparison also compares more than two revisions at once, compares whole directories, produces a summary page, compares password-protected documents, and lets you tune sensitivity and the styling of each change type.