static void Main(string[] args) { PDFNet.Initialize(); PDFNet.SetColorManagement(PDFNet.CMSType.e_lcms); // Required for PDFA validation. //----------------------------------------------------------- // Example 1: PDF/A Validation //----------------------------------------------------------- try { string filename = "newsletter.pdf"; using (PDFACompliance pdf_a = new PDFACompliance(false, input_path + filename, null, PDFACompliance.Conformance.e_Level1B, null, 10, false)) { PrintResults(pdf_a, filename); } } catch (pdftron.Common.PDFNetException e) { Console.WriteLine(e.Message); } //----------------------------------------------------------- // Example 2: PDF/A Conversion //----------------------------------------------------------- try { string filename = "fish.pdf"; using (PDFACompliance pdf_a = new PDFACompliance(true, input_path + filename, null, PDFACompliance.Conformance.e_Level1B, null, 10, false)) { filename = "pdfa.pdf"; pdf_a.SaveAs(output_path + filename, true); } // Re-validate the document after the conversion... filename = "pdfa.pdf"; using (PDFACompliance pdf_a = new PDFACompliance(false, output_path + filename, null, PDFACompliance.Conformance.e_Level1B, null, 10, false)) { PrintResults(pdf_a, filename); } } catch (pdftron.Common.PDFNetException e) { Console.WriteLine(e.Message); } Console.WriteLine("PDFACompliance test completed."); }
static void PrintResults(PDFACompliance pdf_a, String filename) { int err_cnt = pdf_a.GetErrorCount(); if (err_cnt == 0) { Console.WriteLine("{0}: OK.", filename); } else { Console.WriteLine("{0} is NOT a valid PDFA.", filename); for (int i = 0; i < err_cnt; ++i) { PDFACompliance.ErrorCode c = pdf_a.GetError(i); Console.WriteLine(" - e_PDFA {0}: {1}.", (int)c, PDFACompliance.GetPDFAErrorMessage(c)); if (true) { int num_refs = pdf_a.GetRefObjCount(c); if (num_refs > 0) { Console.Write(" Objects: "); for (int j = 0; j < num_refs;) { Console.Write("{0}", pdf_a.GetRefObj(c, j)); if (++j != num_refs) { Console.Write(", "); } } Console.WriteLine(); } } } Console.WriteLine(); } }
private void ButtonStart_Click(object sender, EventArgs e) { string title = IniFile.ReadIni("metadane", "Title"); string author = IniFile.ReadIni("metadane", "Author"); string subject = IniFile.ReadIni("metadane", "Subject"); string keywords = IniFile.ReadIni("metadane", "Keywords"); string podstawaPrawna = IniFile.ReadIni("metadane_dod", "podstawa_prawna"); List <string> inputFolders = new List <string> { _inputDir }; inputFolders.AddRange(Directory.GetDirectories(_inputDir, "*", SearchOption.AllDirectories).ToList()); Dictionary <string, int> validationErrors = new Dictionary <string, int>(); Dictionary <string, int> prefiksErrors = new Dictionary <string, int>(); Dictionary <string, string> otherErrors = new Dictionary <string, string>(); foreach (string inputFolder in inputFolders) { string outputFolder = inputFolder.Replace(_inputDir, _outputDir); Directory.CreateDirectory(outputFolder); string[] inputFiles = Directory.GetFiles(inputFolder, "*.pdf", SearchOption.TopDirectoryOnly); foreach (string inputFile in inputFiles) { string outputFile = Path.Combine(outputFolder, Path.GetFileName(inputFile) ?? throw new InvalidOperationException()); PdfDocument srcPdf = new PdfDocument(new PdfReader(inputFile)); PdfOutputIntent rgbIntent = new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", new MemoryStream(Resources.sRGB_CS_profile)); PdfADocument outputPdf = new PdfADocument(new PdfWriter(outputFile), PdfAConformanceLevel.PDF_A_3B, rgbIntent); try { srcPdf.CopyPagesTo(1, srcPdf.GetNumberOfPages(), outputPdf); } catch (Exception exception) { srcPdf.Close(); Document document = new Document(outputPdf); document.Add(new Paragraph()); document.Close(); outputPdf.Close(); otherErrors.Add(inputFile, exception.Message); continue; } srcPdf.Close(); PdfDocumentInfo info = outputPdf.GetDocumentInfo(); info.SetCreator("GN PDF_A Creator"); info.SetTitle(title); info.SetAuthor(author); info.SetSubject(subject); info.SetKeywords(keywords); info.SetMoreInfo(@"Podstawa prawna", podstawaPrawna); string file = Path.GetFileName(outputFile); Dictionary <string, string> rodzajDokumentu = _prefix.Where(p => file.ToUpper().Contains(p.Key.ToUpper())).ToDictionary(x => x.Key, x => x.Value); if (rodzajDokumentu.Count != 1) { prefiksErrors.Add(inputFile, rodzajDokumentu.Count); info.SetMoreInfo(@"Rodzaj Dokumentu", ""); } else { info.SetMoreInfo(@"Rodzaj Dokumentu", rodzajDokumentu.Values.ElementAt(0)); } info.SetMoreInfo("software", @"The file was created by the PDF_A program using iText 7 library"); info.SetMoreInfo("license", @"This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version."); info.SetMoreInfo("copyright", @"Copyright (C) 2019 GISNET"); for (int i = 0; i <= outputPdf.GetNumberOfPdfObjects(); i++) { PdfObject pdfObject = outputPdf.GetPdfObject(i); if (pdfObject != null && pdfObject.IsStream()) { PdfStream pdfStream = (PdfStream)pdfObject; PdfObject subtype = pdfStream.Get(PdfName.Subtype); if (Equals(subtype, PdfName.Image) && pdfStream.ContainsKey(PdfName.Interpolate)) { pdfStream.Remove(PdfName.Interpolate); } } } try { outputPdf.Close(); } catch (Exception exception) { otherErrors.Add(inputFile, exception.Message); continue; } using (PDFACompliance pdfA = new PDFACompliance(false, outputFile, null, PDFACompliance.Conformance.e_Level3B, null, 10, false)) { int errCnt = pdfA.GetErrorCount(); if (errCnt > 0) { validationErrors.Add(outputFile, errCnt); } } } } using (StreamWriter errorFile = new StreamWriter(new FileStream("errors_validation.txt", FileMode.Create))) { foreach (var error in validationErrors) { errorFile.WriteLine(error.Key + ": " + error.Value); } } using (StreamWriter errorFile = new StreamWriter(new FileStream("errors_prefix.txt", FileMode.Create))) { foreach (var error in prefiksErrors) { errorFile.WriteLine(error.Key + ": " + error.Value); } } using (StreamWriter errorFile = new StreamWriter(new FileStream("errors_other.txt", FileMode.Create))) { foreach (var error in otherErrors) { errorFile.WriteLine(error.Key + ": " + error.Value); } } MessageBox.Show(@"Przetwarzanie zakończono.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); }