Exemple #1
0
 private void TeardownContent(IPdfContent content)
 {
     if (content != null)
     {
         content.Teardown();
     }
 }
Exemple #2
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));
        }
Exemple #3
0
 public static IEnumerable <int> GetScannedPageNumbers(IPdfContent pdf)
 {
     try
     {
         using (var reader = pdf.ToPdfContent().GetReader())
             return(reader.GetScannedPageNumbers());
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
         Console.WriteLine(ex.StackTrace);
         throw;
     }
 }
Exemple #4
0
 public static Dictionary <int, string> GetTextFromAllPages(IPdfContent pdf)
 {
     try
     {
         using (var reader = pdf.ToPdfContent().GetReader())
             return(reader.GetTextFromAllPages());
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
         Console.WriteLine(ex.StackTrace);
         throw;
     }
 }
        public GhostscriptSession GenerateOutput(IPdfContent pdfInfo)
        {
            CreateEnvironment();

            var inputFilename = Id + ".pdf";
            var inputPath     = Path.Combine(Folder, inputFilename);

            pdfInfo.WriteAllBytes(inputPath);

            var settings = GhostscriptSettingsFactory.Default();

            GhostscriptWrapper.GenerateOutput(inputPath, OutputPattern + settings.GetDeviceExtension(), settings);
            return(this);
        }
Exemple #6
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);
        }
Exemple #7
0
 public static PdfContentInfo ApplyTransformer(IPdfContent pdf, PdfTransformer tx)
 {
     try
     {
         using (var document = new DocumentWrapper())
         {
             document.LoadFrom(pdf, tx);
             var transformed = new byte[document.Content.Length];
             document.Content.CopyTo(transformed, 0);
             return(new PdfContentInfo(pdf.FileName, transformed));
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
         Console.WriteLine(ex.StackTrace);
         throw ex;
     }
 }
Exemple #8
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);
        }
Exemple #9
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());
        }
Exemple #10
0
        public static List <ContentInfo> ExtractPortfolio(IPdfContent pdf)
        {
            try
            {
                using (var reader = pdf.ToPdfContent().GetReader())
                {
                    if (reader.Catalog.IsNullOrEmpty())
                    {
                        return(null);
                    }

                    var catalogNames = reader.Catalog.GetAsDict(PdfName.NAMES);
                    if (catalogNames.IsNullOrEmpty())
                    {
                        return(null);
                    }

                    var embeddedFiles = catalogNames.GetAsDict(PdfName.EMBEDDEDFILES);
                    if (embeddedFiles.IsNullOrEmpty())
                    {
                        return(null);
                    }

                    var embeddedNames = embeddedFiles.GetAsArray(PdfName.NAMES);
                    if (embeddedNames.IsNullOrEmpty())
                    {
                        return(null);
                    }

                    var result = new List <ContentInfo>();
                    for (int i = 1; i < embeddedNames.Size; i += 2)
                    {
                        var name = embeddedNames.GetAsDict(i);
                        if (name.IsNullOrEmpty())
                        {
                            continue;
                        }

                        var files = name.GetAsDict(PdfName.EF);
                        if (files.IsNullOrEmpty())
                        {
                            continue;
                        }

                        foreach (var item in files.Keys)
                        {
                            var indirect = files.GetAsIndirectObject(item);
                            if (indirect == null)
                            {
                                throw new ArgumentNullException("PdfIndirectReference allegato non valido, impossibile procedere.");
                            }
                            var stream = (PRStream)PdfReader.GetPdfObject(indirect);
                            if (stream == null)
                            {
                                throw new ArgumentNullException("PRStream allegato non valido, impossibile procedere.");
                            }
                            var content = PdfReader.GetStreamBytes(stream);
                            if (content.IsNullOrEmpty())
                            {
                                throw new ArgumentNullException("Allegato con dimensione zero, impossibile procedere.");
                            }

                            var fileName    = name.GetAsString(item).ToUnicodeString().Trim();
                            var contentInfo = new ContentInfo(fileName, content);
                            result.Add(contentInfo);

                            if (!contentInfo.Extension.EqualsIgnoreCase(PathUtil.EXTENSIONPDF))
                            {
                                continue;
                            }
                            var recursive = ExtractPortfolio(contentInfo.ToPdfContent());
                            if (recursive.IsNullOrEmpty())
                            {
                                continue;
                            }
                            result.AddRange(recursive);
                        }
                    }
                    return(result);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
                throw;
            }
        }
 private void TeardownContent(IPdfContent content)
 {
     if (content != null)
         content.Teardown();
 }
Exemple #12
0
        public static DocumentWrapper LoadFrom(this DocumentWrapper source, IPdfContent pdf, PdfTransformer tx)
        {
            PdfReader.unethicalreading = tx.UnethicalReading;

            PdfReader    reader = null;
            PdfWriter    writer = null;
            MemoryStream ms     = null;

            try
            {
                reader             = pdf.ToPdfContent().GetReader();
                source.IsEncrypted = reader.IsEncrypted();

                using (ms = new MemoryStream())
                    using (writer = PdfWriter.GetInstance(source, ms))
                    {
                        if (tx.PdfA)
                        {
                            writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_7);
                            writer.PDFXConformance = PdfWriter.PDFX1A2001;
                            writer.CreateXmpMetadata();
                        }

                        source.Open();
                        foreach (var p in reader.PageNumbers())
                        {
                            PdfImportedPage sourcePage = null;
                            try
                            {
                                sourcePage = writer.GetImportedPage(reader, p);
                            }
                            catch (ArgumentException)
                            {
                                PdfReader.unethicalreading = true;
                                sourcePage = writer.GetImportedPage(reader, p);
                                PdfReader.unethicalreading = tx.UnethicalReading;
                            }

                            var sourcePageSize = reader.GetPageSizeWithRotation(p);
                            var template       = tx;
                            template.SetOrigin(sourcePage, sourcePageSize);

                            if (reader.HasAnnotations(p))
                            {
                                Debug.WriteLine("Trovate annotazioni a pagina {0}, lo scaling del contenuto verrà ignorato.", p);
                                template.ClearScaling();
                            }

                            source.NewPage(template.DestinationPageSize);
                            writer.DirectContent.TransformTo(template);
                        }
                        source.Close();
                        source.Content = ms.ToDeepCopyArray();
                        return(source);
                    }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                Debug.WriteLine(ex.StackTrace);
                throw ex;
            }
            finally
            {
                source.CloseQuietly();
                ms.CloseQuietly();
                writer.CloseQuietly();
                reader.CloseQuietly();
            }
        }
Exemple #13
0
 public static DocumentWrapper LoadFrom(this DocumentWrapper source, IPdfContent pdf)
 {
     return(source.LoadFrom(pdf, PdfTransformerFactory.Default()));
 }