private static PdfContentInfo ConvertPortfolioToPdf(IPdfContent pdf) { IList <ContentInfo> extractedPortfolios = iTextSharpHelper.ExtractPortfolio(pdf); PdfContentInfo result = pdf.ToPdfContent(); if (result.XfaPresent || result.HasAnnots) { if (!result.TryToFlattenedPdf(out result)) { logger.Warn("Errore di appiattimento PDF. TryToFlattenedPdf ha restituito il file originale e non il file appiattito. Nel file verrà inserito un warning nella firma."); } } if (extractedPortfolios == null) { return(result); } IEnumerable <PdfContentInfo> toMergeContentInfos = Enumerable.Empty <PdfContentInfo>(); toMergeContentInfos = toMergeContentInfos.Concat(new List <PdfContentInfo>() { result }) .Concat(extractedPortfolios.Select(ConvertToPdf)); byte[] mergedContent = iTextSharpHelper.Merge(toMergeContentInfos).Content; return(new PdfContentInfo(pdf.FileName, mergedContent)); }
private static PdfContentInfo ConvertPdfToPdf(IPdfContent pdf, CompliantTransformer tx) { if (tx.RenderSignatures) { try { pdf = RenderSignatures(pdf); } catch (Exception ex) { logger.WarnFormat("E' avvenuto un errore durante la rappresentazione del documento firmato. Verrà restituito il documento originale.", ex); }//se fallisce il render delle firme prosegue } PdfContentInfo result = ConvertPortfolioToPdf(pdf); return(result); }
/// <summary> /// /// Se il file va in errore, viene ritornato il file originale e viene loggato l'errore. /// </summary> /// <param name="source"></param> /// <returns></returns> public static bool TryToFlattenedPdf(this IPdfContent source, out PdfContentInfo content) { content = null; bool result = false; try { using (var gs = GhostscriptSharpHelper.GetSession().GenerateOutput(source)) { var images = gs.GetFiles() .Where(f => f.EndsWith(".png")) .Select(i => Image.GetInstance(i)); using (var doc = new Document()) using (var ms = new MemoryStream()) using (var writer = PdfWriter.GetInstance(doc, ms)) { doc.Open(); foreach (var png in images) { png.SetAbsolutePosition(0, 0); doc.NewPage(png); doc.PageSize.ToA4WithRotation(); doc.Add(png); } doc.Close(); content = new PdfContentInfo(ms.ToDeepCopyArray()); result = true; } } } catch (System.Exception ex) { string error = string.Format("Il file '{0}' ha riscontrato il seguente errore: {1}. Verrà resituita la versione originale del file.", source.FullName, ex.Message); logger.Error(error, ex); content = new PdfContentInfo(source); } finally { logger.Debug(string.Format("TryToFlattenedPdf result: {0}.", result)); } return(result); }
private static PdfContentInfo RenderSignatures(IPdfContent pdf) { logger.Debug("RenderSignatures pdf"); if (pdf.HasSignatures) { logger.Debug("RenderSignatures pdf enter"); var mergeable = new List <PdfContentInfo>(); PdfContentInfo result = pdf.ToPdfContent(); bool enableErrorSection = !pdf.TryToFlattenedPdf(out result); logger.Debug(string.Format("RenderSignatures pdf enableErrorSection: {0}", enableErrorSection)); mergeable.Add(result); mergeable.Add(pdf.PrintSignContentReport(enableErrorSection)); return(iTextSharpHelper.Merge(mergeable)); } return(pdf.ToPdfContent()); }
public byte[] AddLabelToPagesNew(byte[] fileBlob) { byte[] result = null; var pdf = new PdfContentInfo(fileBlob); PdfReader reader = null; PdfWriter writer = null; using (reader = pdf.GetReader()) using (var ms = new MemoryStream()) using (var document = new Document()) using (writer = PdfWriter.GetInstance(document, ms)) { logger.DebugFormat("EtichettaPdfWithOverprint..Pages:{0}", reader.NumberOfPages); try { PdfContentByte cb = null; document.Open(); cb = writer.DirectContent; for (int j = 1; j <= reader.NumberOfPages; j++) { var rt = reader.GetPageRotation(j); var rect = reader.GetPageSizeWithRotation(j); document.SetPageSize(rect); document.NewPage(); var page = writer.GetImportedPage(reader, j); var tx = PdfTransformerFactory.Default().SetOrigin(page, rect); cb.TransformTo(tx); string testo = testoEtichetta.Replace("(pagina)", j.ToString()); testo = testo.Replace("(pagine)", reader.NumberOfPages.ToString()); string FontName = FontFactory.COURIER; if (string.Compare(FontFace, "HELVETICA", true) == 0) { FontName = FontFactory.HELVETICA; } if (string.Compare(FontFace, "TIMES", true) == 0) { FontName = FontFactory.TIMES; } int style = iTextSharp.text.Font.NORMAL; if (FontStyle.IndexOf("Bold") >= 0) { style |= iTextSharp.text.Font.BOLD; } if (FontStyle.IndexOf("Italic") >= 0) { style |= iTextSharp.text.Font.ITALIC; } var phrase = new Phrase(); var chunk = new Chunk(testo, FontFactory.GetFont(FontName, font.SizeInPoints, style, new iTextSharp.text.BaseColor(0, 0, 0))); phrase.Add(chunk); var ct = new ColumnText(cb); ct.SetSimpleColumn(phrase, posizione.X, (rect.Height - font.SizeInPoints) - posizione.Y, rect.Right, 0, 0, Element.ALIGN_LEFT); ct.Go(); if (testoFooter.Length > 0) { testo = testoFooter.Replace("(pagina)", j.ToString()); testo = testo.Replace("(pagine)", reader.NumberOfPages.ToString()); phrase = new Phrase(); chunk = new Chunk(testo, FontFactory.GetFont(FontName, font.SizeInPoints, style, new iTextSharp.text.BaseColor(0, 0, 0))); phrase.Add(chunk); ct = new ColumnText(cb); ct.SetSimpleColumn(phrase, posizione.X, posizione.Y, rect.Right, 0, 0, Element.ALIGN_LEFT); ct.Go(); } cb.Stroke(); PrintRedirected.ExtractPdfComments(ref reader, ref writer, j); } document.Close(); result = ms.ToDeepCopyArray(); } catch (Exception ex) { logger.Error(ex); throw; } } return(result); }
public byte[] AddSignatureToPageAndResizeNew(byte[] fileBlob, byte[] originalFileBlob) { logger.DebugFormat("AddSignatureToPageAndResizeNew..New"); byte[] result = null; var pdf = new PdfContentInfo(fileBlob); PdfReader reader = null; PdfWriter writer = null; using (reader = pdf.GetReader()) using (var ms = new MemoryStream()) using (var document = new Document(reader.GetPageSizeWithRotation(1))) using (writer = PdfWriter.GetInstance(document, ms)) { try { writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_7); writer.PDFXConformance = PdfWriter.PDFX1A2001; writer.CreateXmpMetadata(); document.Open(); var cb = writer.DirectContent; iTextSharp.text.Rectangle rect = null; for (int i = 1; i <= reader.NumberOfPages; i++) { rect = reader.GetPageSizeWithRotation(i); document.NewPage(rect); var page = writer.GetImportedPage(reader, i); var tx = PdfTransformerFactory.Default().SetOrigin(page, rect); tx.ContentScaling = Convert.ToInt32(scalePercent * 100F); logger.DebugFormat("AddSignatureToPageAndResizeNew -> tx.ContentScaling: {0}", tx.ContentScaling); writer.DirectContent.TransformTo(tx); //PrintRedirected.ExtractPdfComments(ref reader, ref writer, i); } if (coverWMF.Length > 0) // retro copertina con le firme { document.NewPage(); P7Mmanager p7m = new P7Mmanager(); if (p7m.LastErr.Length > 0) { logger.Debug("Warning in creazione CompEd: " + p7m.LastErr); p7m.LastErr = ""; } logger.Debug("ExtractDocumentFromBuffer"); string originalFileName; p7m.ExtractDocumentFromBuffer(originalFileBlob, out originalFileName); p7m.PrintMetaFileDocumentToFile(null, cb, document, rect.Height); p7m.Close(); } document.Close(); result = ms.ToDeepCopyArray(); } catch (Exception ex) { logger.Error(ex); throw; } } return(result); }