/* (non-Javadoc) * @see com.itextpdf.html2pdf.attach.ITagWorker#processEnd(com.itextpdf.html2pdf.html.node.IElementNode, com.itextpdf.html2pdf.attach.ProcessorContext) */ public virtual void ProcessEnd(IElementNode element, ProcessorContext context) { // Note that charset and http-equiv attributes are processed on DataUtil#parseByteData(ByteBuffer, String, String, Parser) level. String name = element.GetAttribute(AttributeConstants.NAME); if (null != name) { name = name.ToLowerInvariant(); String content = element.GetAttribute(AttributeConstants.CONTENT); // although iText do not visit head during processing html to elements // meta tag can by accident be presented in body section and that shouldn't cause NPE if (null != content && null != context.GetPdfDocument()) { PdfDocumentInfo info = context.GetPdfDocument().GetDocumentInfo(); if (AttributeConstants.AUTHOR.Equals(name)) { info.SetAuthor(content); } else { if (AttributeConstants.APPLICATION_NAME.Equals(name)) { info.SetCreator(content); } else { if (AttributeConstants.KEYWORDS.Equals(name)) { info.SetKeywords(content); } else { if (AttributeConstants.DESCRIPTION.Equals(name)) { info.SetSubject(content); } else { info.SetMoreInfo(name, content); } } } } } } }
protected internal virtual void ManipulatePdf(String dest) { PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest)); PdfDocumentInfo info = pdfDoc.GetDocumentInfo(); IDictionary <String, String> newInfo = new Dictionary <String, String>(); newInfo.Add("Special Character: \u00e4", "\u00e4"); StringBuilder buf = new StringBuilder(); buf.Append((char)0xc3); buf.Append((char)0xa4); newInfo.Add(buf.ToString(), "\u00e4"); info.SetMoreInfo(newInfo); pdfDoc.Close(); }
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); }