This repository contains runnable code examples demonstrating how to use GroupDocs.Comparison for Node.js via Java to compare documents, spreadsheets, presentations, PDFs, images, emails, and more.
- Node.js 20 LTS or later
- Java JRE/JDK 8+ (17 LTS recommended)
- Java Environment: Set
JAVA_HOMEand add toPATH
Windows PowerShell:
$env:JAVA_HOME="C:\Program Files\Java\jdk-17"
$env:Path="$env:JAVA_HOME\bin;$env:Path"Linux/macOS:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATHFor detailed installation instructions and platform-specific notes, refer to the documentation:
npm installThis installs @groupdocs/groupdocs.comparison and other packages referenced in package.json.
Execute all examples:
npm startOutputs are saved to Output/<example-name>/.
Examples are organized into three categories:
Minimal examples to get started:
helloWorld.js- Basic document comparisonsetLicense.js- License setup examplesetMeteredLicense.js- Metered license setup
Core comparison functionality examples:
| File | What It Demonstrates |
|---|---|
compareDocumentsFromPath.js |
Compare documents using file paths |
compareDocumentsFromStream.js |
Compare documents using file streams |
compareDocumentsProtectedPath.js |
Compare password-protected documents (paths) |
compareDocumentsProtectedStream.js |
Compare password-protected documents (streams) |
compareCellsFromPath.js |
Compare Excel spreadsheets (paths) |
compareCellsFromStream.js |
Compare Excel spreadsheets (streams) |
compareImageFromPath.js |
Compare image files (paths) |
compareImageFromStream.js |
Compare image files (streams) |
compareMultiplePdfDocuments.js |
Compare multiple PDFs simultaneously |
getDocumentInfoPath.js |
Get document properties (paths) |
getDocumentInfoStream.js |
Get document properties (streams) |
getSupportedFormats.js |
List all supported file formats |
Advanced scenarios organized by feature:
acceptRejectDetectedChangesPath.js- Accept/reject changes programmatically (paths)acceptRejectDetectedChangesStream.js- Accept/reject changes programmatically (streams)compareDocumentsSettingsStream.js- Custom comparison settings (sensitivity, styles)compareFolders.js- Compare entire folders, save as TXT or HTMLcompareMultipleDocumentsPath.js- Compare multiple documents at once (paths)compareMultipleDocumentsStream.js- Compare multiple documents (streams)compareMultipleDocumentsProtectedPath.js- Multiple password-protected documents (paths)compareMultipleDocumentsProtectedStream.js- Multiple password-protected documents (streams)compareMultipleDocumentsSettingsPath.js- Multiple documents with custom settings (paths)compareMultipleDocumentsSettingsStream.js- Multiple documents with custom settings (streams)
loadDocumentFromLocalDisc.js- Load with custom options (passwords, pages, comments)loadDocumentFromStream.js- Load from streams with optionsloadTextFromString.js- Load document content from string
setDocumentMetadataSource.js- Set metadata for source documentsetDocumentMetadataTarget.js- Set metadata for target documentsetPasswordForResultantDocument.js- Password-protect result document
// Examples/BasicUsage/compareDocumentsFromPath.js
const comparer = new groupdocs.Comparer(Constants.SOURCE_WORD);
comparer.add(Constants.TARGET_WORD);
comparer.compare(outputFileName);// Examples/BasicUsage/compareDocumentsFromStream.js
const InputStream = java.import('java.io.FileInputStream');
const comparer = new groupdocs.Comparer(
new InputStream(Constants.SOURCE_WORD)
);
comparer.add(new InputStream(Constants.TARGET_WORD));
comparer.compare(outputFileName);// Examples/AdvancedUsage/Comparison/acceptRejectDetectedChangesPath.js
const comparer = new groupdocs.Comparer(Constants.SOURCE_WORD);
comparer.add(Constants.TARGET_WORD);
await comparer.compare();
let changes = await comparer.getChanges();
changes[0].setComparisonAction(groupdocs.ComparisonAction.ACCEPT);
const applyChangeOptions = new groupdocs.ApplyChangeOptions();
applyChangeOptions.setChanges(Arrays.asList(changes));
await comparer.applyChanges(outputPath, applyChangeOptions);// Examples/AdvancedUsage/Comparison/compareDocumentsSettingsStream.js
const compareOptions = new groupdocs.CompareOptions();
const styleSettings = new groupdocs.StyleSettings();
styleSettings.setUnderline(true);
styleSettings.setFontColor(Color.GREEN);
styleSettings.setHighlightColor(Color.RED);
compareOptions.setInsertedItemStyle(styleSettings);
await comparer.compare(outputFileName, compareOptions);// Examples/AdvancedUsage/Comparison/compareMultipleDocumentsPath.js
const comparer = new groupdocs.Comparer(Constants.SOURCE_WORD);
comparer.add(Constants.TARGET_WORD);
comparer.add(Constants.TARGET2_WORD);
comparer.add(Constants.TARGET3_WORD);
await comparer.compare(outputFileName);// Examples/BasicUsage/compareDocumentsProtectedPath.js
const loadOptions = new groupdocs.LoadOptions();
loadOptions.setPassword("1234");
const comparer = new groupdocs.Comparer(
Constants.SOURCE_WORD_PROTECTED,
loadOptions
);
comparer.add(Constants.TARGET_WORD_PROTECTED, loadOptions);
comparer.compare(outputFileName);All examples are accessible through Examples/examples.js:
const examples = require('./Examples/examples');
// Basic examples
await examples.helloWorld();
await examples.compareDocumentsFromPath();
await examples.compareDocumentsFromStream();
await examples.compareCellsFromPath();
await examples.compareImageFromPath();
// Advanced examples
await examples.acceptRejectDetectedChangesPath();
await examples.compareMultipleWordsDocuments();
await examples.compareFolderSaveAsTxt();
await examples.loadDocumentFromLocalDisc();
await examples.setDocumentMetadataSource();├── Examples/ # All example code
│ ├── BasicUsage/ # Basic comparison examples
│ │ ├── compareDocumentsFromPath.js
│ │ ├── compareDocumentsFromStream.js
│ │ ├── compareCellsFromPath.js
│ │ └── ...
│ │
│ ├── AdvancedUsage/ # Advanced features
│ │ ├── Comparison/ # Advanced comparison scenarios
│ │ ├── Loading/ # Document loading options
│ │ └── Saving/ # Result saving options
│ │
│ ├── QuickStart/ # Quick start examples
│ │ ├── helloWorld.js
│ │ ├── setLicense.js
│ │ └── setMeteredLicense.js
│ │
│ ├── Resources/
│ │ └── SampleFiles/ # Sample input files
│ │ ├── source.docx
│ │ ├── target.docx
│ │ └── ...
│ │
│ ├── constants.js # File paths and configuration
│ ├── examples.js # Example runner module
│ └── runExamples.js # Run all examples
│
├── Results/
│ └── Output/ # Generated results (auto-created)
│
└── package.json
- Input Files:
Examples/Resources/SampleFiles/(configured inExamples/constants.js) - Output Files:
Results/Output/<example-name>/(auto-created per example)
Modify Examples/constants.js to change paths if needed.
Examples run in trial mode by default. To use a license:
Option 1: Environment variable
Create .env:
GROUPDOCS_LICENSE=C:\path\to\license.licOption 2: Programmatic
const examples = require('./Examples/examples');
await examples.setLicense('path/to/license.lic');Get a temporary license: GroupDocs Temporary License
Set JAVA_HOME and add to PATH (see Prerequisites above).
Install build tools:
- Windows: Visual Studio Build Tools
- Linux:
sudo apt-get install build-essential - macOS:
xcode-select --install
Ensure write access to Results/Output/ directory.
Install common fonts (especially on Linux servers):
- Microsoft Core Fonts
- Liberation Fonts
- DejaVu Fonts
- Documentation: docs.groupdocs.com/comparison/nodejs-java
- API Reference: apireference.groupdocs.com/comparison/nodejs-java
- Support Forum: forum.groupdocs.com/c/comparison
- Product Page: products.groupdocs.com/comparison/nodejs-java
Note: These are code examples demonstrating GroupDocs.Comparison features. For production use, ensure you have a valid license.