package filetools.pdf; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import org.apache.pdfbox.pdmodel.PDDocument; public class PdfTwinTest { static String OrgPdf; static String MigPdf; static long filesizeOrg; static long filesizeMig; static String folder; static PrintWriter outputfile; public static void main(String args[]) throws IOException { System.out .println("Please select the folder for outputfile 'PdfTwinTest.txt'"); folder = utilities.BrowserDialogs.chooseFolder(); if (folder != null) { outputfile = new PrintWriter(new FileWriter(folder + "\\PdfTwinTester.txt")); outputfile.println("Pdf Twin Test"); OrgPdf = utilities.BrowserDialogs.chooseFile(); System.out.println(OrgPdf); MigPdf = utilities.BrowserDialogs.chooseFile(); System.out.println(MigPdf); outputfile.println("Original File: " + OrgPdf); outputfile.println("Migrated File: " + MigPdf); if (OrgPdf != null && MigPdf != null) { // the real program starts here, everything else are just // prerequisites filesizeOrg = OrgPdf.length(); filesizeMig = MigPdf.length(); if (filesizeOrg < 16000000 && filesizeMig < 16000000) { if (filetools.GenericFileAnalysis.testFileHeaderPdf(OrgPdf) == true && filetools.GenericFileAnalysis.testFileHeaderPdf(MigPdf) == true) { PDDocument testfileOrg = PDDocument.load(OrgPdf); PDDocument testfileMig = PDDocument.load(MigPdf); if (testfileOrg.isEncrypted() || testfileMig.isEncrypted()) { System.out .println("One or both of the Pdf-files are encrypted."); } else { if (PdfAnalysis.checkBrokenPdf(OrgPdf) == false && PdfAnalysis.checkBrokenPdf(MigPdf) == false) { String[] linesOrg = PdfAnalysis .extractsPdfLines(OrgPdf); String[] linesMig = PdfAnalysis .extractsPdfLines(MigPdf); int differences = 0; int lenOrg = linesOrg.length; int lenMig = linesMig.length; outputfile.println(OrgPdf + " has " + lenOrg + " lines."); outputfile.println(OrgPdf + " has " + lenMig + " lines."); if (lenOrg != lenMig) { if (lenOrg > lenMig) { outputfile .println("The migrated Pdf has" + (lenOrg - lenMig) + " lines less."); } else { outputfile .println("The migrated PDf has" + (lenMig - lenOrg) + " lines more."); } outputfile.println(); } if ((lenOrg > lenMig || lenOrg == lenMig)) { for (int j = 0; j < lenMig; j++) { if (!(linesOrg[j]).equals(linesMig[j])) { outputfile.println(); outputfile .println("Differs in line: " + (j + 1)); outputfile.println(); outputfile.println("Original : " + linesOrg[j]); outputfile.println("Migration: " + linesMig[j]); outputfile.println(); differences++; } } if (differences == 0) { outputfile .println("Both PDF-Files are alike."); } else { outputfile.println(differences + " lines have differences."); } } else /* (lenMig > lenOrg) */{ for (int j = 0; j < lenOrg; j++) { // happens twice, maybe create a method? if (!(linesOrg[j]).equals(linesMig[j])) { outputfile.println(); outputfile .println("Differs in line: " + (j + 1)); outputfile.println(); outputfile.println("Original : " + linesOrg[j]); outputfile.println("Migration: " + linesMig[j]); outputfile.println(); differences++; } } if (differences == 0) { outputfile .println("Both PDF-Files are alike."); } else { outputfile.println(differences + " lines have differences."); } } } else { System.out.println("Program closed."); } } } else { System.out .println("One of the files is lacking a PdfHeader."); System.out .println("Please choose two proper Pdf-files"); } } else { System.out .println("One of the Files or both are too big to be examined:"); System.out.println(OrgPdf + " Filesize: " + filesizeOrg); System.out.println(MigPdf + " Filesize: " + filesizeMig); } } else { System.out.println("Please choose two files."); } outputfile.close(); } } }