package filetools.pdf; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import org.apache.commons.io.FilenameUtils; import org.apache.pdfbox.pdmodel.PDDocument; public class PdfChecker { static String examinedFolder; static int PdfHeader; static int NoPdfHeader; static int PdfA; static int PdfStandard; static int PdfEncrypted; static int PdfTooBig; static int i; static long filesize; static PrintWriter outputfile; public static void main(String args[]) throws IOException { try { examinedFolder = utilities.BrowserDialogs.chooseFolder(); // TODO: Create an XML Writer if (examinedFolder != null) { ArrayList<File> files = utilities.ListsFiles.getPaths(new File(examinedFolder), new ArrayList<File>()); if (files == null) return; PdfHeader = 0; NoPdfHeader = 0; PdfA = 0; PdfStandard = 0; PdfEncrypted = 0; PdfTooBig = 0; filesize = 0; for (i = 0; i < files.size(); i++) { if (files.get(i) != null) { System.out.println(i + 1); try { System.out.println(files.get(i).getCanonicalPath()); // is this necessary as the %PDF Test follows // anyway? String extension = FilenameUtils.getExtension(files.get(i).getCanonicalPath()); extension = extension.toLowerCase(); if (extension.equals("pdf")) { if (!filetools.GenericFileAnalysis.checkFileSize(files.get(i))) { if (filetools.GenericFileAnalysis.testFileHeaderPdf(files.get(i)) == true) { System.out.println(files.get(i).getName() + " is a PDF file and has a PDF header"); PdfHeader++; PDDocument testfile = PDDocument.load(files.get(i)); if (testfile.isEncrypted()) { System.out.println("Pdf is encrypted: " + files.get(i)); PdfEncrypted++; // TODO: Add Encryption Checker // if // (!PdfEncryptor.isCopyAllowed(testfile.toString())) } else { String PdfType = PdfAnalysis.checkIfPdfA(files.get(i)); System.out.println("Pdf Type: " + PdfType); if (PdfType.contains("PDF/A")) { PdfA++; } else { PdfStandard++; // this included // files with // "%PDF-header that have no XMP Metadata" } } } else { System.out.println(files.get(i).getName() + " PDF Header is missing."); NoPdfHeader++; } } else { PdfTooBig++; } } else { System.out.println("Extension is not .pdf"); NoPdfHeader++; } } catch (IOException e) { System.out.print(e); } } } System.out.println(); System.out.println(); // System.out.println("Files examined: " + i); // does not // always // work System.out.println("PDF Header missing: " + NoPdfHeader); System.out.println("PDF Header: " + PdfHeader); System.out.println("PDF/A-files: " + PdfA); System.out.println("PDF Standard files: " + PdfStandard); System.out.println("PDF Encrypted files: " + PdfEncrypted); System.out.println("PDF files too big: " + PdfTooBig); } } catch (FileNotFoundException e) { } } }