예제 #1
0
파일: TedaSign.cs 프로젝트: page2me/TeDA
        public byte[] importXml(byte[] inputPdf, Stream xmlData, Boolean isSign)
        {
            Console.WriteLine("Read PDF");
            PdfReader    reader  = new PdfReader(inputPdf);
            MemoryStream output  = new MemoryStream();
            PdfStamper   stamper = new PdfStamper(reader, output, '\0', false);

            AcroFields form = stamper.AcroFields;
            XfaForm    xfa  = form.Xfa;

            Console.WriteLine("Fill Data");
            xfa.FillXfaForm(xmlData);
            Console.WriteLine("Set fields to read only");
            if (!isSign)
            {
                foreach (string key in form.Fields.Keys)
                {
                    form.SetFieldProperty(key, "setfflags", PdfFormField.FF_READ_ONLY, null);
                }
            }

            stamper.Close();
            reader.Close();
            return(output.ToArray());
        }
예제 #2
0
// ---------------------------------------------------------------------------

        /**
         * Reads the XML that makes up an XFA form.
         * @param reader the original PDF file
         * @param dest the resulting XML file
         */
        public string ReadXfa(PdfReader reader)
        {
            XfaForm     xfa = new XfaForm(reader);
            XmlDocument doc = xfa.DomDocument;

            reader.Close();

            // remove the namespace for pretty-formatted XML;
            // .NET DOM API doesn't support modifying namespace
            // it looks so easy in Java...
            if (!string.IsNullOrEmpty(doc.DocumentElement.NamespaceURI))
            {
                doc.DocumentElement.SetAttribute("xmlns", "");
                // so we need to create a new XmlDocument...
                XmlDocument new_doc = new XmlDocument();
                new_doc.LoadXml(doc.OuterXml);
                doc = new_doc;
            }

            var sb        = new StringBuilder(4000);
            var Xsettings = new XmlWriterSettings()
            {
                Indent = true
            };

            using (var writer = XmlWriter.Create(sb, Xsettings)) {
                doc.WriteTo(writer);
            }
            return(sb.ToString());
        }
예제 #3
0
        public void GetPDFValues(string fileName)
        {
            PdfReader reader = new PdfReader(fileName);
            //Grabs the forms
            XfaForm xfa = new XfaForm(reader);

            //Grab the dataset noe
            XmlNode node = xfa.DatasetsNode;

            reader.Close();

            //Write the dataset node into a string builder and store it into a ViewBag
            var sb        = new StringBuilder(4000);
            var Xsettings = new XmlWriterSettings()
            {
                Indent = true
            };
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(node.OuterXml);
            using (var writer = XmlWriter.Create(sb, Xsettings))
            {
                doc.WriteTo(writer);
            }

            string pdfValues = sb.ToString();
        }
예제 #4
0
        public static string ReadXfa(PdfReader reader)
        {
            XfaForm     xfa = new XfaForm(reader);
            XmlDocument doc = xfa.DomDocument;

            reader.Close();

            if (!string.IsNullOrEmpty(doc.DocumentElement.NamespaceURI))
            {
                doc.DocumentElement.SetAttribute("xmlns", "");
                XmlDocument new_doc = new XmlDocument();
                new_doc.LoadXml(doc.OuterXml);
                doc = new_doc;
            }

            var sb        = new StringBuilder(4000);
            var Xsettings = new XmlWriterSettings()
            {
                Indent = true
            };

            using (var writer = XmlWriter.Create(sb, Xsettings)) {
                doc.WriteTo(writer);
            }
            return(sb.ToString());
        }
예제 #5
0
        public void ManipulatePdf()
        {
            // Create a pdf document instance
            PdfDocument pdfDoc = new PdfDocument(new PdfReader(INPUT_PDF), new PdfWriter(DEST));

            // Load the DOM Document
            XfaForm   xfa    = PdfAcroForm.GetAcroForm(pdfDoc, false).GetXfaForm();
            XDocument domDoc = xfa.GetDomDocument();

            // This works for the specific document
            // Generate the list of calculate amount Nodes
            IEnumerable <XElement> calcElements = findCalc(domDoc);

            // Update calculate value
            foreach (XElement element in calcElements)
            {
                XElement calc   = element.Descendants().First();
                String   curVal = calc.Value;
                calc.Value = "2*" + curVal;
                Console.WriteLine(calc.Value);
            }

            // Write XFA back to PDF Document
            xfa.SetDomDocument(domDoc);
            xfa.Write(pdfDoc);
            pdfDoc.Close();
        }
예제 #6
0
        public static bool GetXFAfieldValue(String path, String FieldName)
        {
            if (!File.Exists(path))
            {
                Report.Warn("File " + path + " does not exist, please check file path!");
                return(false);
            }

            PdfReader   newreader = new PdfReader(path);
            PdfDocument pdfDoc    = new PdfDocument(newreader);

            XfaForm xfa = new XfaForm(pdfDoc);

            if (xfa.IsXfaPresent())
            {
                XDocument myXMLDoc             = xfa.GetDomDocument();
                IEnumerable <XElement> mylist  = myXMLDoc.Descendants(FieldName);
                List <XElement>        mylistt = mylist.ToList <XElement>();
                Report.Info(mylistt[0].Value);
                // or if more than one, you can cycle through:

                /***
                 * foreach (XElement theEl in mylist){
                 *      Report.Info(theEl.Value);
                 * }
                 ***/
                return(true);
            }
            else
            {
                Report.Warn("This is not an XFA document");
                return(false);
            }
        }
예제 #7
0
        protected void ManipulatePdf(string dest)
        {
            PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC));
            PdfAcroForm form   = PdfAcroForm.GetAcroForm(pdfDoc, true);
            XfaForm     xfa    = form.GetXfaForm();

            // Get XFA data under datasets/data.
            XElement            node = xfa.GetDatasetsNode();
            IEnumerable <XNode> list = node.Nodes();

            foreach (XNode item in list)
            {
                if (item is XElement && "data".Equals(((XElement)item).Name.LocalName))
                {
                    node = (XElement)item;
                    break;
                }
            }

            XmlWriterSettings settings = new XmlWriterSettings();

            settings.Indent = true;
            XmlWriter writer = XmlWriter.Create(dest, settings);

            node.WriteTo(writer);
            writer.Close();

            pdfDoc.Close();
        }
예제 #8
0
        public void Open(String filePath)
        {
            try
            {
                PdfReader.unethicalreading = true;
                pdfReader = new PdfReader(filePath);
                //pdfReader.RemoveUsageRights();
            }
            catch (InvalidPdfException e)
            {
                throw new Exception(e.ToString());
            }

            // XFA?
            XfaForm xfa = new XfaForm(pdfReader);

            if (xfa != null && xfa.XfaPresent)
            {
                isXFA = true;

                if (xfa.Reader.AcroFields.Fields.Keys.Count == 0)
                {
                    isDynamicXFA = true;
                }
                else
                {
                    isDynamicXFA = false;
                }
            }
            else
            {
                isXFA = false;
            }
        }
예제 #9
0
        public void Verify_Issue95_XfaForm_SerializeDoc_Does_Not_Add_Xml_Declaration()
        {
            var xmlDoc = new XmlDocument();

            var form1 = xmlDoc.CreateElement(XmlRootElementName);

            xmlDoc.AppendChild(form1);

            // Add some child elements
            form1.AppendChild(xmlDoc.CreateElement(XmlChildElementName));
            form1.AppendChild(xmlDoc.CreateElement(XmlChildElementName));
            form1.AppendChild(xmlDoc.CreateElement(XmlChildElementName));

            var bytes = XfaForm.SerializeDoc(xmlDoc);
            var text  = Encoding.UTF8.GetString(bytes);

            // We check for the presence of the "<?xml ... " fragment in the serialized document.
            // It should not be there, as its presence causes the parsing of the XFA data to fail.
            var containsXmlDeclaration = text.IndexOf(
                XmlDeclarationFragment,
                StringComparison.InvariantCultureIgnoreCase) == 0;

            // We should have the root element at the beginning of the serialized text ; this also
            // makes sure that we're not mstakenly adding the UTF-8 identifier to the beginning of
            // the serialized text
            var startsWithRootelement = text.IndexOf(
                XmlElementRootFragment,
                StringComparison.InvariantCulture) == 0;

            Assert.IsFalse(containsXmlDeclaration);
            Assert.IsTrue(startsWithRootelement);
        }
예제 #10
0
        public void ManipulatePdf()
        {
            // Create a PDF document instance
            PdfDocument pdfDoc = new PdfDocument(new PdfReader(INPUT_PDF), new PdfWriter(DEST));

            // Load the DOM Document
            XfaForm   xfa    = PdfAcroForm.GetAcroForm(pdfDoc, false).GetXfaForm();
            XDocument domDoc = xfa.GetDomDocument();

            // The follwing 2 lines of code only work for the specific document
            // Access the Script Node of the DOM Document
            XElement template = domDoc.Descendants().First().Descendants().First().ElementsAfterSelf().First();
            XElement script   = template.Descendants().First().Descendants().First().ElementsAfterSelf().First()
                                .Descendants().First().ElementsAfterSelf().First().ElementsAfterSelf().First().ElementsAfterSelf()
                                .First().ElementsAfterSelf().First().ElementsAfterSelf().First().Descendants().First();

            // Update the script message
            String message = "xfa.host.messageBox(\"XFA SCRIPT Message!!!\")";

            script.SetValue(message);

            // Write XFA back to PDF Document
            xfa.SetDomDocument(domDoc);
            xfa.Write(pdfDoc);
            pdfDoc.Close();
        }
예제 #11
0
        virtual protected String SaveXmlFromResult(String input)
        {
            PdfReader reader = new PdfReader(input);
            XfaForm   form   = new XfaForm(reader);
            String    output = input.Replace(".pdf", ".xml");

            using (StreamWriter file = new StreamWriter(output))
                file.Write(form.DomDocument.OuterXml);
            reader.Close();
            return(output);
        }
예제 #12
0
// ---------------------------------------------------------------------------
        public byte[] ManipulatePdf(String src, String xml)
        {
            PdfReader reader = new PdfReader(src);

            using (MemoryStream ms = new MemoryStream()) {
                using (PdfStamper stamper = new PdfStamper(reader, ms)) {
                    AcroFields form = stamper.AcroFields;
                    XfaForm    xfa  = form.Xfa;
                    xfa.FillXfaForm(XmlReader.Create(new StringReader(xml)));
                }
                return(ms.ToArray());
            }
        }
예제 #13
0
        protected void ManipulatePdf(string dest)
        {
            PdfDocument pdfdoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
            PdfAcroForm form   = PdfAcroForm.GetAcroForm(pdfdoc, true);

            XfaForm xfa = form.GetXfaForm();

            // Method fills this object with XFA data under datasets/data.
            xfa.FillXfaForm(new FileStream(XML, FileMode.Open, FileAccess.Read));
            xfa.Write(pdfdoc);

            pdfdoc.Close();
        }
예제 #14
0
        public List <PDFField> ListFields()
        {
            XfaForm xfa = new XfaForm(pdfReader);

            if (isDynamicXFA)
            {
                var acroFields = pdfReader.AcroFields;
                return(ListDynamicXFAFields(acroFields.Xfa.DatasetsNode.FirstChild));
            }
            else
            {
                return(ListGenericFields());
            }
        }
예제 #15
0
// ---------------------------------------------------------------------------

        /**
         * Checks if a PDF containing an interactive form uses
         * AcroForm technology, XFA technology, or both.
         * Also lists the field names.
         * @param reader the original PDF
         */
        public string ReadFieldnames(PdfReader reader)
        {
            AcroFields    form = reader.AcroFields;
            XfaForm       xfa  = form.Xfa;
            StringBuilder sb   = new StringBuilder();

            sb.Append(xfa.XfaPresent ? "XFA form" : "AcroForm");
            sb.Append(Environment.NewLine);
            foreach (string key in form.Fields.Keys)
            {
                sb.Append(key);
                sb.Append(Environment.NewLine);
            }
            return(sb.ToString());
        }
예제 #16
0
// ---------------------------------------------------------------------------

        /**
         * Fills out a form by replacing the XFA stream.
         * @param src the original PDF
         * @param xml the XML making up the new form
         */
        public byte[] FillData2(String src, String xml)
        {
            PdfReader reader = new PdfReader(src);

            using (MemoryStream ms = new MemoryStream()) {
                using (PdfStamper stamper = new PdfStamper(reader, ms)) {
                    XfaForm     xfa = new XfaForm(reader);
                    XmlDocument doc = new XmlDocument();
                    doc.Load(xml);
                    xfa.DomDocument = doc;
                    xfa.Changed     = true;
                    XfaForm.SetXfa(xfa, stamper.Reader, stamper.Writer);
                }
                return(ms.ToArray());
            }
        }
예제 #17
0
        public List <myKey> getKeys(AcroFields af)
        {
            XfaForm      xfa  = af.Xfa;
            List <myKey> Keys = new List <myKey>();

            foreach (var field in af.Fields)
            {
                Keys.Add(new myKey(field.Key, af.GetField(field.Key)));
            }
            if (xfa.XfaPresent)
            {
                System.Xml.XmlNode n = xfa.DatasetsNode.FirstChild;
                Keys.AddRange(BFS(n));
            }
            return(Keys);
        }
예제 #18
0
        public ActionResult Index()
        {
            //This is jsut a hard coded in path to a XFA based pdf (this should be change to your specific path)
            var src = @"C:\Users\jag27\Documents\Personal\Infosys\AllState\Projects\XmlPdfMapper2\XmlPdfMapper\XmlPdfMapper\Assets\ABJ45A1AL.pdf";

            //Reads the PDF
            PdfReader reader = new PdfReader(src);
            //Grabs the forms
            XfaForm xfa = new XfaForm(reader);

            //Grab the dataset noe
            XmlNode node = xfa.DatasetsNode;

            reader.Close();

            //Write the dataset node into a string builder and store it into a ViewBag
            var sb        = new StringBuilder(4000);
            var Xsettings = new XmlWriterSettings()
            {
                Indent = true
            };
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(node.OuterXml);
            using (var writer = XmlWriter.Create(sb, Xsettings))
            {
                doc.WriteTo(writer);
            }
            ViewBag.Form = sb.ToString();


            //---------------------------------------------------------------------------------------------------------------------------------------------------------
            //Loads a XML document(hard coded right now) and split them by new line
            //This is jsut a hard coded in path to a XFA based pdf (this should be change to your specific path)
            XDocument x = XDocument.Load(@"C:\Users\jag27\Documents\Personal\Infosys\AllState\Projects\XmlPdfMapper2\XmlPdfMapper\XmlPdfMapper\Assets\XmlExample.xml");

            var xmlArr = x.ToString().Split('\n');

            ViewBag.Xml = xmlArr;



            return(View());
        }
예제 #19
0
// ---------------------------------------------------------------------------

        /**
         * Reads the data from a PDF containing an XFA form.
         * @param src the original PDF
         */
        public string ReadData(byte[] src)
        {
            PdfReader   reader = new PdfReader(src);
            XfaForm     xfa    = new XfaForm(reader);
            XmlNode     node   = xfa.DatasetsNode;
            XmlNodeList list   = node.ChildNodes;

            for (int i = 0; i < list.Count; i++)
            {
                if ("data".Equals(list.Item(i).LocalName))
                {
                    node = list.Item(i);
                    break;
                }
            }
            list = node.ChildNodes;
            for (int i = 0; i < list.Count; i++)
            {
                if ("movies".Equals(list.Item(i).LocalName))
                {
                    node = list.Item(i);
                    break;
                }
            }
            reader.Close();

            var sb        = new StringBuilder(4000);
            var Xsettings = new XmlWriterSettings()
            {
                Indent = true
            };
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(node.OuterXml);
            using (var writer = XmlWriter.Create(sb, Xsettings)) {
                doc.WriteTo(writer);
            }
            return(sb.ToString());
        }
예제 #20
0
        public void ManipulatePdf()
        {
            // Create a pdf document instance
            PdfDocument pdfDoc = new PdfDocument(new PdfReader(INPUT_PDF), new PdfWriter(DEST));

            // Load the DOM Document
            XfaForm   xfa    = PdfAcroForm.GetAcroForm(pdfDoc, false).GetXfaForm();
            XDocument domDoc = xfa.GetDomDocument();

            // The follwing 2 lines of code only work for the specific document
            // Access the Script Node of the DOM Document
            XElement template = domDoc.Descendants().First().Descendants().First().ElementsAfterSelf().First();
            XElement script   = template.Descendants().First().Descendants().First().ElementsAfterSelf().First()
                                .Descendants().First().ElementsAfterSelf().First().ElementsAfterSelf().First().ElementsAfterSelf()
                                .First().ElementsAfterSelf().First().ElementsAfterSelf().First().Descendants().First();

            // Remove the Script from the Node
            script.SetValue("");

            // Write XFA back to the PDF Document
            xfa.SetDomDocument(domDoc);
            xfa.Write(pdfDoc);
            pdfDoc.Close();
        }
예제 #21
0
        /// <summary>
        /// Performs the playback of actions in this module.
        /// </summary>
        /// <remarks>You should not call this method directly, instead pass the module
        /// instance to the <see cref="TestModuleRunner.Run(ITestModule)"/> method
        /// that will in turn invoke this method.</remarks>
        void ITestModule.Run()
        {
            Mouse.DefaultMoveTime        = 300;
            Keyboard.DefaultKeyPressTime = 100;
            Delay.SpeedFactor            = 1.0;

            // This is dependent on the itext 7 community NuGet package reference

            string src = @"C:\Users\edgewords\Documents\czechexamples\Property_contract_sample.pdf";

            //Read PDF
            PdfReader   reader = new PdfReader(src);
            PdfDocument pdf    = new PdfDocument(reader);
            string      text   = string.Empty;

            //Iterate over all pages
            for (int page = 1; page <= pdf.GetNumberOfPages(); page++)
            {
                PdfPage myPage = pdf.GetPage(page);
                //Extract plain text
                text += PdfTextExtractor.GetTextFromPage(myPage);
            }
            reader.Close();

            //Find specific text
            int pos = text.IndexOf("Spoluúčast") + 10;

            //Get next 10 characters
            Ranorex.Report.Info(text.Substring(pos, 10));



            //*************************//
            // Now for the word document. Open the word document, then save as text only, you could then open it and read from it
            // using normal System.IO library

            Microsoft.Office.Interop.Word.Application application = new Microsoft.Office.Interop.Word.Application();
            Document document = null;

            application.Visible = false;
            object missing  = System.Reflection.Missing.Value;
            object readOnly = false;

            document = application.Documents.Open(@"C:\Users\edgewords\Documents\czechexamples\Property_policy_sample.doc", ref missing, ref readOnly);
            //document.ExportAsFixedFormat(@"C:\Users\edgewords\Documents\czechexamples\Property_policy_sample.pdf", WdExportFormat.wdExportFormatPDF);
            document.SaveAs(@"C:\Users\edgewords\Documents\czechexamples\Property_policy_sample.txt", 2);
            Ranorex.Report.Info(document.Range(1, document.Characters.Count).Text);
            application.ActiveDocument.Close();
            application.Quit();



            // Try to open the Xfa dynamic acrobat form as xml document

            // https://csharp.hotexamples.com/examples/iTextSharp.text.pdf/XfaForm/-/php-xfaform-class-examples.html


            PdfReader   newreader = new PdfReader(@"C:\Users\edgewords\Documents\czechexamples\eForm_example.pdf");
            PdfDocument pdfDoc    = new PdfDocument(newreader);

            XfaForm xfa = new XfaForm(pdfDoc);

            if (xfa.IsXfaPresent())
            {
                XDocument myXMLDoc             = xfa.GetDomDocument();
                IEnumerable <XElement> mylist  = myXMLDoc.Descendants("CONTRACT_ID");
                List <XElement>        mylistt = mylist.ToList <XElement>();
                Report.Info(mylistt[0].Value);

                // or if more than one, you can cycle through:

                /***
                 * foreach (XElement theEl in mylist){
                 *      Report.Info(theEl.Value);
                 * }
                 *
                 ***/
            }

            else
            {
                PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, false);
                IDictionary <String, PdfFormField> fields = form.GetFormFields();
                PdfFormField toSet;
                fields.TryGetValue("CONTRACT_ID", out toSet);

                Report.Info(toSet.GetValueAsString());
            }

            //reader.Close();
        }
예제 #22
0
        static void Main()
        {
            // directory object for searching through files in the current directory
            string dir = Directory.GetCurrentDirectory();

            // gets array listing files starting with rfq and ending in .pdf
            string[] files = Directory.GetFiles(dir, "rfq*.pdf", SearchOption.TopDirectoryOnly);


            for (int n = 0; n < files.Count(); n++)
            {
                if (files[n] != null && files[n].Length >= 0)
                {
                    if (File.Exists(files[n]))
                    {
                        using (FileStream t = new FileStream(@"C:\User Programs\Pdf Template\rfq_template.xml", FileMode.Open, FileAccess.ReadWrite))

                        {
                            PdfReader   reader = new PdfReader(files[n]);
                            XfaForm     xfa    = new XfaForm(reader);
                            XmlDocument doc    = xfa.DomDocument;
                            // template is the xml document from Pdf Template folder doc is the xml document pulled from the pdf being altered
                            XmlDocument template = new XmlDocument();
                            template.Load(t);

                            XmlNodeList partNum         = doc.GetElementsByTagName("PartNumDrawNum");
                            XmlNodeList partNumTemplate = template.GetElementsByTagName("PartNumDrawNum");
                            //Exit the program if there are too many part number lines.
                            if (partNum.Count > 2)
                            {
                                for (int i = 0; i < partNum.Count - 3; i++)
                                {
                                    // Create new body row section to expand part number table
                                    XmlNodeList sfDynTable = template.GetElementsByTagName("sfDynTable");
                                    XmlNode     tbl        = sfDynTable[0].FirstChild;
                                    XmlElement  bodyRow    = (XmlElement)template.CreateElement("BodyRow");
                                    bodyRow.AppendChild(template.CreateElement("PartNumDrawNum"));
                                    bodyRow.AppendChild(template.CreateElement("Qty"));
                                    bodyRow.AppendChild(template.CreateElement("UnitPrice"));
                                    bodyRow.AppendChild(template.CreateElement("DelDatetoBuyDock"));
                                    tbl.AppendChild(bodyRow);
                                }
                            }


                            for (int i = 0; i < partNum.Count - 1; i++)
                            {
                                partNumTemplate[i].InnerText = partNum[i].InnerText;
                            }

                            Console.WriteLine("Enter delivery lead time:");
                            string userLeadTime = Console.ReadLine();

                            XmlNodeList leadTime         = doc.GetElementsByTagName("DelLeadTime");
                            XmlNodeList leadTimeTemplate = template.GetElementsByTagName("DelLeadTime");
                            for (int i = 0; i < leadTime.Count; i++)
                            {
                                if (leadTime[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    leadTimeTemplate[0].InnerText = userLeadTime + " WEEKS ARO";
                                }
                            }

                            XmlNodeList delDate         = doc.GetElementsByTagName("DelDatetoBuyDock");
                            XmlNodeList delDateTemplate = template.GetElementsByTagName("DelDatetoBuyDock");

                            // Commented out for Andrew, activate this and remove next block for normal

                            /*for (int i = 0; i < partNum.Count; i++)
                             * {
                             *  if (partNum[i].InnerText == ("")) { }
                             *  else
                             *  {
                             *      delDateTemplate[i].InnerText = userLeadTime + " WEEKS ARO";
                             *  }
                             * }*/

                            // Changed this to userLeadTime from delDate
                            for (int i = 0; i < delDate.Count; i++)
                            {
                                if (partNum[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    delDateTemplate[0].InnerText = userLeadTime + " WEEKS ARO";
                                }
                            }


                            //Return Request for Quote No Later Than:
                            XmlNodeList returnDate         = doc.GetElementsByTagName("returnDate");
                            XmlNodeList returnDateTemplate = template.GetElementsByTagName("returnDate");
                            for (int i = 0; i < returnDate.Count; i++)
                            {
                                if (returnDate[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    returnDateTemplate[0].InnerText = returnDate[i].InnerText;
                                }
                            }


                            XmlNodeList qtyList         = doc.GetElementsByTagName("Qty");
                            XmlNodeList qtyListTemplate = template.GetElementsByTagName("Qty");

                            for (int i = 0; i < qtyList.Count - 1; i++)
                            {
                                if (qtyList[i].InnerText == "")
                                {
                                }
                                else
                                {
                                    qtyListTemplate[i].InnerText = qtyList[i].InnerText;
                                }
                            }

                            XmlNodeList date         = doc.GetElementsByTagName("date");
                            XmlNodeList dateTemplate = template.GetElementsByTagName("date");

                            for (int i = 0; i < date.Count; i++)
                            {
                                if (date[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    dateTemplate[0].InnerText = date[i].InnerText;
                                }
                            }

                            XmlNodeList email         = doc.GetElementsByTagName("email");
                            XmlNodeList emailTemplate = template.GetElementsByTagName("email");
                            for (int i = 0; i < email.Count; i++)
                            {
                                if (email[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    emailTemplate[0].InnerText = email[i].InnerText;
                                }
                            }

                            XmlNodeList BuyerFillin         = doc.GetElementsByTagName("Buyer_Fillin");
                            XmlNodeList BuyerFillinTemplate = template.GetElementsByTagName("Buyer_Fillin");
                            for (int i = 0; i < BuyerFillin.Count; i++)
                            {
                                if (BuyerFillin[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    BuyerFillinTemplate[0].InnerText = BuyerFillin[i].InnerText;
                                }
                            }

                            XmlNodeList mat         = doc.GetElementsByTagName("matSizeAndLength");
                            XmlNodeList matTemplate = template.GetElementsByTagName("matSizeAndLength");
                            for (int i = 0; i < mat.Count; i++)
                            {
                                if (mat[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    matTemplate[0].InnerText = mat[i].InnerText;
                                }
                            }

                            XmlNodeList sincerely         = doc.GetElementsByTagName("sincerely");
                            XmlNodeList sincerelyTemplate = template.GetElementsByTagName("sincerely");
                            for (int i = 0; i < sincerely.Count; i++)
                            {
                                if (sincerely[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    sincerelyTemplate[0].InnerText = sincerely[i].InnerText;
                                }
                            }

                            XmlNodeList title         = doc.GetElementsByTagName("title");
                            XmlNodeList titleTemplate = template.GetElementsByTagName("title");
                            for (int i = 0; i < title.Count; i++)
                            {
                                if (title[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    titleTemplate[0].InnerText = title[i].InnerText;
                                }
                            }


                            XmlNodeList org         = doc.GetElementsByTagName("org");
                            XmlNodeList orgTemplate = template.GetElementsByTagName("org");
                            for (int i = 0; i < org.Count; i++)
                            {
                                if (org[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    orgTemplate[0].InnerText = org[i].InnerText;
                                }
                            }

                            XmlNodeList phone         = doc.GetElementsByTagName("phone");
                            XmlNodeList phoneTemplate = template.GetElementsByTagName("phone");
                            for (int i = 0; i < phone.Count; i++)
                            {
                                if (phone[i].InnerText == (""))
                                {
                                }

                                else
                                {
                                    phoneTemplate[i].InnerXml = phone[i].InnerXml;
                                }
                            }


                            /*Block for the make stamp
                             * XmlNodeList comments = doc.GetElementsByTagName("addComments");
                             * XmlNodeList commentsTemplate = template.GetElementsByTagName("addComments");
                             * for (int i = 0; i < comments.Count; i++)
                             * {
                             *  if (i==0 && comments[i].InnerText ==(""))
                             *  {
                             *      commentsTemplate[i].InnerText = "Best manufacturing practices.";
                             *  }
                             *  else if (comments[i].InnerText == ("")) { }
                             *  else if (comments[i].InnerText.Contains("Best manufacturing practices."))
                             *  {
                             *      commentsTemplate[i].InnerText = comments[i].InnerText;
                             *  }
                             *  else
                             *  {
                             *      commentsTemplate[i].InnerText = comments[i].InnerText + " Best manufacturing practices.";
                             *  }
                             * }*/

                            // Block for design
                            XmlNodeList comments         = doc.GetElementsByTagName("addComments");
                            XmlNodeList commentsTemplate = template.GetElementsByTagName("addComments");
                            for (int i = 0; i < comments.Count; i++)
                            {
                                //Console.WriteLine("number of comment lines = " + i);
                                if (comments[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    commentsTemplate[i].InnerText = comments[i].InnerText;
                                }
                            }

                            XmlNodeList text1         = doc.GetElementsByTagName("TextField1");
                            XmlNodeList text1Template = template.GetElementsByTagName("TextField1");
                            for (int i = 0; i < text1.Count; i++)
                            {
                                if (text1[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    text1Template[i].InnerText = text1[i].InnerText;
                                }
                            }

                            XmlNodeList text2         = doc.GetElementsByTagName("TextField2");
                            XmlNodeList text2Template = template.GetElementsByTagName("TextField2");
                            for (int i = 0; i < text2.Count; i++)
                            {
                                if (text2[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    text2Template[i].InnerText = text2[i].InnerText;
                                }
                            }

                            XmlNodeList phoneNum         = doc.GetElementsByTagName("PhoneNum");
                            XmlNodeList phoneNumTemplate = template.GetElementsByTagName("PhoneNum");
                            for (int i = 0; i < phoneNum.Count; i++)
                            {
                                if (phoneNum[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    phoneNumTemplate[i].InnerXml = phoneNum[i].InnerXml;
                                }
                            }



                            XmlNodeList unitPrice         = doc.GetElementsByTagName("UnitPrice");
                            XmlNodeList unitPriceTemplate = template.GetElementsByTagName("UnitPrice");
                            for (int i = 0; i < unitPrice.Count; i++)
                            {
                                if (unitPrice[i].InnerText == (""))
                                {
                                }
                                else
                                {
                                    unitPriceTemplate[i].InnerText = unitPrice[i].InnerText;
                                }
                            }
                            Console.WriteLine("Enter Unit Price:");
                            string userPrice = Console.ReadLine();
                            unitPriceTemplate[0].InnerText = userPrice;



                            XmlNodeList sellDateTemplate = template.GetElementsByTagName("selldate");
                            sellDateTemplate[0].InnerText = (DateTime.Today.ToString("M/d/yyyy"));

                            template.Save(dir + "/test.xml");
                            reader.Close();



                            using (FileStream existingPdf = new FileStream(files[n], FileMode.Open, FileAccess.ReadWrite))
                                using (FileStream xml = new FileStream(dir + "/test.xml", FileMode.Open, FileAccess.ReadWrite))
                                    using (FileStream filledPdf = new FileStream(dir + "/newPdf.pdf", FileMode.Create, FileAccess.ReadWrite))
                                    {
                                        PdfReader.unethicalreading = true;
                                        PdfReader  reader1 = new PdfReader(existingPdf);
                                        PdfStamper stamper = new PdfStamper(reader1, filledPdf, '\0', true);

                                        stamper.AcroFields.Xfa.FillXfaForm(xml);
                                        stamper.Close();
                                        reader1.Close();
                                    }

                            //Lines added to create small business classification paperwork

                            /*FileInfo check = new FileInfo(dir + "/J-3.1 NAICS 333514.pdf");
                             * if (check.Exists)
                             * { }
                             * else
                             * {
                             *  using (FileStream src = new FileStream(@"C:\User Programs\Pdf Template\small_business_template.pdf", FileMode.Open, FileAccess.Read))
                             *  using (FileStream newFile = new FileStream(dir + "/J-3.1 NAICS 333514.pdf", FileMode.Create, FileAccess.ReadWrite))
                             *  {
                             *      PdfReader reader2 = new PdfReader(src);
                             *      PdfStamper stamper2 = new PdfStamper(reader2, newFile, '\0', true);
                             *
                             *      stamper2.RotateContents.Equals(false);
                             *      PdfContentByte canvas = stamper2.GetOverContent(1);
                             *
                             *      // Write part number & date
                             *      ColumnText.ShowTextAligned(canvas, Element.ALIGN_LEFT, new Phrase(partNumTemplate[0].InnerText), 240, 685, 0);
                             *      ColumnText.ShowTextAligned(canvas, Element.ALIGN_LEFT, new Phrase(DateTime.Today.ToString("M/dd/yyyy")), 180, 88, 0);
                             *
                             *      stamper2.Close();
                             *      reader2.Close();
                             *  }
                             * }*/
                        }

                        string fileName = (files[n]);
                        File.Delete(files[n]);
                        File.Move(dir + "/newPdf.pdf", fileName);
                        File.Delete(dir + "/test.xml");
                    }
                }
                else
                {
                    Console.WriteLine("Can't find a file to stamp");
                    Console.ReadLine();
                }
            }
        }
예제 #23
0
        public ActionResult Index()
        {
            List <Mapper> result = new List <Mapper>();

            if (String.IsNullOrEmpty(pdfPath))
            {
                ViewBag.Pdf = new string[0];
            }
            else
            {
                //Reads the PDF
                PdfReader reader = new PdfReader(pdfPath);

                //Grabs the xfa forms
                XfaForm xfa = new XfaForm(reader);

                //Grab the dataset node
                string    xmllist = xfa.DatasetsNode.InnerXml;
                XDocument doc     = XDocument.Parse(xmllist);

                //grab the name of all the dataset nodes
                var pdfNodes = doc.Descendants().Select(x => x.Name.ToString()).ToList();

                reader.Close();


                foreach (var node in pdfNodes)
                {
                    result.Add(new Mapper()
                    {
                        FileName = Path.GetFileName(pdfPath),
                        PdfName  = node,
                    });
                }

                ViewBag.Pdf = result;
            }


            //---------------------------------------------------------------------------------------------------------------------------------------------------------
            //Loads a XML document(hard coded right now) and split them by new line

            if (String.IsNullOrEmpty(xmlPath))
            {
                ViewBag.Presentation = new string[0];
            }
            else
            {
                XDocument xml = XDocument.Load(xmlPath);

                string[] pres = xml.ToString().Split('\n');

                ViewBag.Presentation = pres;

                List <Node> nodeList = new List <Node>();

                foreach (XElement node in xml.Descendants())
                {
                    Node n = new Node()
                    {
                        Name  = node.Name.ToString(),
                        Xpath = findPath(node)
                    };
                    nodeList.Add(n);
                }

                Debug.WriteLine(pres.Length + " : " + nodeList.Count);
                ViewBag.Xml = JsonConvert.SerializeObject(nodeList);
            }


            return(View(result));
        }
예제 #24
0
        public ActionResult PreviewPDFWithMappedFields(List <PDFMapping> PDFMapping)
        {
            //THIS SHOULD BE REMOVED EVENTUALLY
            //I am assuming that this method is going to receive a list of string that represent Xpaths found in the PDF nodes' name attribute

            List <string> paths = new List <string>()
            {
                "Case_Location_Address_City", "Case_location_application_people_person_IsDependent", "Case_location_application_people_person_employee_monthlysalary",
                "Case_Location_CallCenter"
            };

            List <string> xmlpath = new List <string>()
            {
                "Case_Location_Address_City", "Case_Location_Application_People_Person_IsDependent", "Case_Location_Application_People_Person_Employee_MonthlySalary",
                "Case_Location_CallCenter"
            };


            PdfReader reader = new PdfReader(PDFPath);

            using (PdfStamper stamper = new PdfStamper(reader, new FileStream(outputPdf, FileMode.Create)))
            {
                XfaForm form = new XfaForm(reader);

                XElement xmlDoc = XElement.Load(XMLPath);

                string    xmllist = form.DomDocument.InnerXml;
                XDocument doc     = XDocument.Parse(xmllist);


                for (var field = 0; field < paths.Count - 1; field++)
                {
                    //Steps to find the node from the data xml file using its xPath
                    var arr = xmlpath[field].Split('_');

                    var realPath = String.Join("/", arr);

                    XElement data = xmlDoc.XPathSelectElement("//" + realPath);

                    //Determine the type of input the

                    XElement pdfNode = (from elem in doc.Descendants()
                                        where elem.Attribute("name") != null &&
                                        elem.Attribute("name").Value.Contains(paths[field])
                                        select elem).First();

                    string val;

                    if (pdfNode.Name.ToString().Contains("field"))
                    {
                        //Is the field node a checkbox
                        List <XElement> ckButton = (from elem in pdfNode.Descendants()
                                                    where elem.Name.ToString().Contains("checkButton")
                                                    select elem).ToList();
                        if (ckButton.Count > 0)
                        {
                            //Is the value stored in the xml data node written true/false(incorrect format) or 1/0 (correct format)
                            if (data.Value.ToUpper() == "FALSE")
                            {
                                val = "0";
                            }
                            else if (data.Value.ToUpper() == "TRUE")
                            {
                                val = "1";
                            }
                            else
                            {
                                val = data.Value;
                            }
                        }

                        else// then it is a normal field
                        {
                            //Is the field node an numeric input or text input
                            List <XElement> numField = (from elem in pdfNode.Descendants()
                                                        where elem.Name.ToString().Contains("numericEdit")
                                                        select elem).ToList();

                            //Im not sure what to put in here, bc I am able to fill in numeric fields without any issues
                            if (numField.Count > 0) //Its a numeric field
                            {
                            }

                            else //Its a text field
                            {
                            }

                            val = data.Value;
                        }
                    }
                    else //then it must be a exclGroup
                    {
                        //I need to think about this more, since this node is an exclGroup and not a field node
                        //I have to match of the xml node value with the fields stored in the exclGroup
                        val = data.Value;
                    }

                    form.FindDatasetsNode(paths[field]).InnerXml = val;
                }

                form.Changed = true;



                XfaForm.SetXfa(form, stamper.Reader, stamper.Writer);
            }

            return(Json("success", JsonRequestBehavior.AllowGet));
            //TempData["OutputPDF"] = outputPdf;

            //return PartialView("_PreviewPDF");

            //PdfStamper stamper = new PdfStamper(reader, new FileStream(Temp_PDF_Copy_Path, FileMode.CreateNew, FileAccess.ReadWrite));
            //AcroFields form = stamper.AcroFields;
            //XfaForm xfa = form.Xfa;

            //XmlDocument xmldoc = new XmlDocument();
            //xmldoc.LoadXml(form.Xfa.DatasetsNode.FirstChild.OuterXml);

            ////Load the existing PDF document
            //Syncfusion.Pdf.Parsing.PdfLoadedXfaDocument loadedDocument = new PdfLoadedXfaDocument("input.pdf");
            ////Load the existing XFA form
            //PdfLoadedXfaForm loadedForm = loadedDocument.XfaForm;
            ////Get the loaded text box field.
            //PdfLoadedXfaTextBoxField loadedTextBox = (loadedForm.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["text[0]"] as PdfLoadedXfaTextBoxField;
            ////fill the text box
            //loadedTextBox.Text = "First Name";
            ////Save the document
            //loadedDocument.Save("output.pdf");
            ////Close the document
            //loadedDocument.Close();

            //FileStream pdfTemplate = new FileStream(PDFPath, FileMode.Open, FileAccess.Read);
            //FileStream xmlFormData = new FileStream(XMLPath, FileMode.Open, FileAccess.Read);
            //FileStream outputStream = new FileStream(outputPdf, FileMode.Create, FileAccess.Write);

            //using (iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(pdfTemplate))
            //{
            //    using (iTextSharp.text.pdf.PdfStamper stamper = new iTextSharp.text.pdf.PdfStamper(reader, outputStream))
            //    {
            //        stamper.Writer.CloseStream = false;
            //        stamper.AcroFields.Xfa.FillXfaForm(xmlFormData);
            //    }
            //}

            //outputStream.Close();
            //xmlFormData.Close();
            //pdfTemplate.Close();

            //pdfTemplate = null;
            //xmlFormData = null;
            //outputPdf = null;
        }
예제 #25
0
        public static bool XfaPresent(this PdfReader source)
        {
            var xfa = new XfaForm(source);

            return(xfa.XfaPresent);
        }
예제 #26
0
        public List <string> ReadPdfFile(string fileName)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                PdfReader  pdfReader = new PdfReader(fileName);
                PdfStamper pdfStamp  = new PdfStamper(pdfReader, ms);
                AcroFields fields    = pdfStamp.AcroFields;

                //List<myKey> Keys1 = new List<myKey>();
                //Boolean empty = true;
                //foreach (var field in fields.Fields)
                //{
                //    empty = false;
                //    Keys.Add(RemoveLastWords(field.Key, 2, ' '));
                //}
                //if (empty) return Keys;
                //foreach (string k in Keys)
                //{
                //    fields.SetField(k, "Testing");
                //}

                XfaForm   xfa    = fields.Xfa;
                string    xmllst = xfa.DomDocument.InnerXml;
                XDocument doc    = XDocument.Parse(xmllst);

                List <string>   Keys = new List <string>();
                List <XElement> list = new List <XElement>();

                var             tableCell  = getTableCells(doc);
                var             checkBoxes = getCheckBoxes(doc);
                List <XElement> result     = new List <XElement>();

                result.AddRange(tableCell[1]);
                result.AddRange(checkBoxes[1]);

                list.AddRange(tableCell[0]);
                list.AddRange(checkBoxes[0]);

                result.AddRange(getRemainingFields(doc, list));

                foreach (var item in result)
                {
                    Keys.Add(item.Attribute("name").Value);
                }

                //Keys = (from el in doc.Descendants()
                //             where el.Name.ToString().Contains("text") && el.Value != ""
                //             select el.Value).ToList();



                //-----------------------------------------------------------------------------------

                //List<XElement> childList= (from el in doc.Descendants()
                //                            where el.Name.ToString().Contains("subform") && el.Value != ""
                //                            select el).ToList();

                //foreach (XElement item in childList)
                //{
                //    XAttribute att = item.Attribute("name");
                //    if (att.Value.ToLower() == "tbcoverageinfo")
                //    {
                //        Keys =
                //                 (from el in item.Descendants()
                //                  where el.Name.ToString().Contains("text") && el.Value != ""
                //                  select el.Value).Distinct().ToList();

                //        break;
                //    }

                //}

                //-------------------------------------------------------------------------------------

                //List<string> childList =
                //            (from el in doc.Descendants()
                //             where el.Name.ToString().Contains("text") && el.Value != ""
                //             select el.Value).ToList();

                //var results = doc.Descendants().Select(x => new
                //{
                //    name = x.Name,
                //    va = x.Value
                //}).ToList();

                //List<myKey> keyValues = getKeys(fields);

                //if (xfa.XfaPresent)
                //{
                //    System.Xml.XmlNode n = xfa.DatasetsNode.FirstChild;
                //    Keys1.AddRange(BFS(n));
                //}
                //return Keys;

                pdfReader.Close();
                pdfStamp.FormFlattening     = true;
                pdfStamp.FreeTextFlattening = true;
                pdfStamp.Writer.CloseStream = false;

                return(Keys);
            }
        }