Example #1
0
        public virtual void FileSpecCheckTest7()
        {
            FileStream   inPdf = new FileStream(RESOURCES + "fileSpec.pdf", FileMode.Open);
            MemoryStream xml   = new MemoryStream();
            StreamWriter sr    = new StreamWriter(xml);

            sr.Write("<foo><foo2>Hello world</foo2></foo>");
            sr.Close();

            MemoryStream output  = new MemoryStream();
            PdfReader    reader  = new PdfReader(inPdf);
            PdfAStamper  stamper = new PdfAStamper(reader, output, PdfAConformanceLevel.PDF_A_3B);

            stamper.CreateXmpMetadata();

            PdfDictionary embeddedFileParams = new PdfDictionary();

            embeddedFileParams.Put(PdfName.MODDATE, new PdfDate());
            PdfFileSpecification fs = PdfFileSpecification.FileEmbedded(stamper.Writer, "foo", "foo",
                                                                        xml.ToArray(), "text/xml", embeddedFileParams, 0);

            fs.Put(PdfName.AFRELATIONSHIP, AFRelationshipValue.Source);
            stamper.AddFileAttachment("description", fs);

            stamper.Close();
            reader.Close();
        }
Example #2
0
        virtual public void TestPdfAStamper1()
        {
            string     filename = OUT + "TestPdfAStamper1.pdf";
            FileStream fos      = new FileStream(filename, FileMode.Create);

            Document document = new Document();

            PdfAWriter writer = PdfAWriter.GetInstance(document, fos, PdfAConformanceLevel.PDF_A_1B);

            writer.CreateXmpMetadata();

            document.Open();

            Font font = FontFactory.GetFont(RESOURCES + "FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12);

            document.Add(new Paragraph("Hello World", font));

            FileStream  iccProfileFileStream = File.Open(RESOURCES + "sRGB Color Space Profile.icm", FileMode.Open, FileAccess.Read, FileShare.Read);
            ICC_Profile icc = ICC_Profile.GetInstance(iccProfileFileStream);

            iccProfileFileStream.Close();

            writer.SetOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc);
            document.Close();

            PdfReader   reader            = new PdfReader(filename);
            FileStream  stamperFileStream = new FileStream(OUT + "TestPdfAStamper1_.pdf", FileMode.Create);
            PdfAStamper stamper           = new PdfAStamper(reader, stamperFileStream, PdfAConformanceLevel.PDF_A_1B);

            stamper.Close();
            stamperFileStream.Close();
            reader.Close();
        }
Example #3
0
        public string Execute(SingInfo singInfo)
        {
            var certificate = this.certificadoA3.Obter();

            this.cadeiaTempo = this.certificadoA3.CadeiaCertificadoTempo();

            this.MontarEstruturaCertificacao(certificate);

            var pdfAux = Path.Combine(
                Path.GetDirectoryName(singInfo.SourcePdf),
                Path.GetFileNameWithoutExtension(singInfo.SourcePdf) + "-aux.pdf");

            using (var reader = new PdfReader(singInfo.SourcePdf))
            {
                using (var os = new FileStream(pdfAux, FileMode.Create))
                {
                    var stamper = PdfAStamper.CreateSignature(reader, os, '\0', PdfAConformanceLevel.PDF_A_2A);

                    var appearance = stamper.SignatureAppearance;

                    var caminhoFonte2 = @"C:\Windows\Fonts\cour.ttf";
                    appearance.Layer2Font = FontFactory.GetFont(caminhoFonte2, BaseFont.WINANSI, BaseFont.EMBEDDED, 8);
                    appearance.Reason     = singInfo.SignatureReason;
                    appearance.Contact    = singInfo.SignatureContact;
                    appearance.Location   = singInfo.SignatureLocation;

                    appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;

                    var pks = new X509Certificate2Signature(certificate, DigestAlgorithms.SHA256);

                    MakeSignature.SignDetached(
                        appearance,
                        pks,
                        this.chain,
                        this.crlList,
                        this.ocspClient,
                        this.tsaClient,
                        EstimatedSize,
                        CryptoStandard.CMS);
                }
            }

            using (var reader = new PdfReader(pdfAux))
            {
                using (var os = new FileStream(singInfo.TargetPdf, FileMode.Create))
                {
                    var stamper    = PdfStamper.CreateSignature(reader, os, '\0', null, true);
                    var appearance = stamper.SignatureAppearance;

                    this.AdicionarLtv(stamper, appearance);
                }
            }

            this.RemoverArquivoTemporario(pdfAux);

            return(singInfo.TargetPdf);
        }
Example #4
0
        virtual public void ManipulatePdfAutomaticTest()
        {
            String     fileName = "xmp_metadata_updated.pdf";
            PdfReader  reader   = new PdfReader(CMP_FOLDER + "pdf_metadata.pdf");
            PdfStamper stamper  = new PdfAStamper(reader, new FileStream(OUT_FOLDER + fileName, FileMode.Create),
                                                  PdfAConformanceLevel.PDF_A_1A);

            stamper.Close();
            reader.Close();
            CompareResults(fileName, fileName);
        }
Example #5
0
        public void TestPdfAStamper2()
        {
            string     filename = OUT + "TestPdfAStamper2.pdf";
            FileStream fos      = new FileStream(filename, FileMode.Create);

            Document document = new Document();

            PdfAWriter writer = PdfAWriter.GetInstance(document, fos, PdfAConformanceLevel.PDF_A_2B);

            writer.CreateXmpMetadata();

            document.Open();

            Font font = FontFactory.GetFont(RESOURCES + "FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12);

            document.Add(new Paragraph("Hello World", font));

            FileStream  iccProfileFileStream = new FileStream(RESOURCES + "sRGB Color Space Profile.icm", FileMode.Open);
            ICC_Profile icc = ICC_Profile.GetInstance(iccProfileFileStream);

            iccProfileFileStream.Close();

            writer.SetOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc);
            document.Close();

            PdfReader reader          = new PdfReader(filename);
            bool      exceptionThrown = false;

            try
            {
                FileStream  stamperFileStream = new FileStream(OUT + "TestPdfAStamper2_.pdf", FileMode.Create);
                PdfAStamper stamper           = new PdfAStamper(reader, stamperFileStream, PdfAConformanceLevel.PDF_A_1B);
                stamper.Close();
                stamperFileStream.Close();
            }
            catch (PdfAConformanceException)
            {
                exceptionThrown = true;
            }
            reader.Close();
            if (!exceptionThrown)
            {
                Assert.Fail("PdfAConformance exception should be thrown");
            }
        }
Example #6
0
        virtual public void ManipulatePdfTest()
        {
            String     fileName = "xmp_metadata_added.pdf";
            PdfReader  reader   = new PdfReader(CMP_FOLDER + "pdf_metadata.pdf");
            PdfStamper stamper  = new PdfAStamper(reader, new FileStream(OUT_FOLDER + fileName, FileMode.Create),
                                                  PdfAConformanceLevel.PDF_A_1A);

            stamper.CreateXmpMetadata();
            XmpWriter xmp = stamper.XmpWriter;

            DublinCoreProperties.AddSubject(xmp.XmpMeta, "Hello World");
            DublinCoreProperties.AddSubject(xmp.XmpMeta, "XMP & Metadata");
            DublinCoreProperties.AddSubject(xmp.XmpMeta, "Metadata");

            PdfProperties.SetVersion(xmp.XmpMeta, "1.4");
            stamper.Close();
            reader.Close();
            CompareResults(fileName, fileName);
        }
Example #7
0
        virtual public void TestPdfAStamper3()
        {
            string     filename = OUT + "TestPdfAStamper3.pdf";
            FileStream fos      = new FileStream(filename, FileMode.Create);

            Document document = new Document();

            PdfWriter writer = PdfWriter.GetInstance(document, fos);

            writer.CreateXmpMetadata();

            document.Open();

            Font font = FontFactory.GetFont(RESOURCES + "FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12);

            document.Add(new Paragraph("Hello World", font));
            document.Close();

            PdfReader reader          = new PdfReader(filename);
            bool      exceptionThrown = false;

            try
            {
                FileStream  stamperFileStream = new FileStream(OUT + "TestPdfAStamper3_.pdf", FileMode.Create);
                PdfAStamper stamper           = new PdfAStamper(reader, stamperFileStream, PdfAConformanceLevel.PDF_A_1A);
                stamper.Close();
                stamperFileStream.Close();
            }
            catch (PdfAConformanceException)
            {
                exceptionThrown = true;
            }
            reader.Close();
            if (!exceptionThrown)
            {
                Assert.Fail("PdfAConformance exception should be thrown");
            }
        }
Example #8
0
        public void Sign(SingInfo singInfo)
        {
            try
            {
                var metaData = new MetaData
                {
                    Author   = singInfo.Author,
                    Title    = singInfo.Title,
                    Subject  = singInfo.Subject,
                    Keywords = singInfo.Keywords,
                    Creator  = singInfo.Creator,
                    Producer = singInfo.Producer
                };

                var store = new X509Store(StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly);

                if (store.Certificates.Count == 0)
                {
                    Log.Application.Error("Certificados Locais do usuario indisponiveis.");
                }

                var posicaoCertificado = 0;

                var cert = store.Certificates[posicaoCertificado];

                Log.Application.InfoFormat(
                    "Certificado Selecionado {0} Serial {1} Subject {2}",
                    cert.IssuerName.Name,
                    cert.SerialNumber,
                    cert.SubjectName);

                var cp = new Org.BouncyCastle.X509.X509CertificateParser();

                var chain = new[]
                {
                    cp.ReadCertificate(cert.RawData)
                };

                IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA-1");

                var rsa = (RSACryptoServiceProvider)cert.PrivateKey;

                var secureString = new SecureString();

                secureString.AppendChar(char.Parse("1"));
                secureString.AppendChar(char.Parse("2"));
                secureString.AppendChar(char.Parse("3"));
                secureString.AppendChar(char.Parse("4"));

                var cspp = new CspParameters();
                cspp.KeyContainerName = rsa.CspKeyContainerInfo.KeyContainerName;
                cspp.ProviderName     = rsa.CspKeyContainerInfo.ProviderName;
                cspp.Flags            = CspProviderFlags.UseUserProtectedKey;
                cspp.KeyPassword      = secureString;

                cspp.ProviderType = rsa.CspKeyContainerInfo.ProviderType;

                cspp.Flags = CspProviderFlags.NoPrompt;

                RSACryptoServiceProvider rsa2 = new RSACryptoServiceProvider(cspp);

                rsa.PersistKeyInCsp = true;

                PdfReader   reader  = new PdfReader(singInfo.SourcePdf);
                PdfAStamper stamper = PdfAStamper.CreateSignature(
                    reader,
                    new FileStream(singInfo.TargetPdf, FileMode.Create, FileAccess.Write),
                    '\0',
                    PdfAConformanceLevel.PDF_A_2A);

                PdfSignatureAppearance appearance = stamper.SignatureAppearance;

                var caminhoFonte2  = @"C:\Windows\Fonts\cour.ttf";
                var caminhoGrafico = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources", "key.jpg");

                appearance.Layer2Font             = FontFactory.GetFont(caminhoFonte2, BaseFont.WINANSI, BaseFont.EMBEDDED, 8);
                appearance.Reason                 = singInfo.SignatureReason;
                appearance.Contact                = singInfo.SignatureContact;
                appearance.Location               = singInfo.SignatureLocation;
                appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;
                appearance.CertificationLevel     = PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED;
                appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(600, 100, 0, 0), 1, "Assinatura");

                MakeSignature.SignDetached(appearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
                stamper.Close();
            }
            catch (Exception exception)
            {
                Log.Application.Error("Falha ao assinar! ", exception);
                throw;
            }
        }