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()); }
// --------------------------------------------------------------------------- /** * 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()); }
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(); }
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()); }
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(); }
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); } }
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(); }
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; } }
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); }
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(); }
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); }
// --------------------------------------------------------------------------- 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()); } }
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(); }
public List <PDFField> ListFields() { XfaForm xfa = new XfaForm(pdfReader); if (isDynamicXFA) { var acroFields = pdfReader.AcroFields; return(ListDynamicXFAFields(acroFields.Xfa.DatasetsNode.FirstChild)); } else { return(ListGenericFields()); } }
// --------------------------------------------------------------------------- /** * 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()); }
// --------------------------------------------------------------------------- /** * 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()); } }
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); }
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()); }
// --------------------------------------------------------------------------- /** * 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()); }
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(); }
/// <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(); }
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(); } } }
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)); }
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; }
public static bool XfaPresent(this PdfReader source) { var xfa = new XfaForm(source); return(xfa.XfaPresent); }
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); } }