Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        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());
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }