Immaginiamo un file .aspx con due soli campi: una listbox e un pulsante.
All'evento click del pulsante alcuni "campi testo" di un documento pdf "example.pdf" verranno popolati con dei valori presenti in un file xml "example.xml" e verrà creato su di un path (ad esempio c:\).
La listbox è per il tracciamento delle operazioni.
Tool/ambienti utilizzati: .Net 2005, Acrobat Professional e SDK 9 di Adobe.
Sorgente e immagini:
protected void btnExample_Click(object sender, EventArgs e) { Object newDoc = new Object(); string sourceDocument = @"" + Server.HtmlEncode(Request.PhysicalApplicationPath) + "example.pdf"; //where is pdf string outputString = @"c:\\"; //path output pdf string pathXmlToMerge = @"C:\example.xml";//is file temp //create a file xml to merge CreateXmlFileNamePdf(pathXmlToMerge, ddlist.Text); bool booleOpenDocument; AcroAVDoc avDoc = new AcroAVDoc(); CAcroApp acroApp = new AcroAppClass(); booleOpenDocument = avDoc.Open(sourceDocument, ""); if (!booleOpenDocument) listOperation.Items.Add("Failed to open source document."); CAcroPDDoc pdDoc = (CAcroPDDoc)avDoc.GetPDDoc(); Object jsObj = pdDoc.GetJSObject(); object[] getTemplateParam = { "Templates:1" }; Object template = new Object(); Type T = jsObj.GetType(); template = T.InvokeMember( "getTemplate", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, jsObj, getTemplateParam); if (template == null) { template = T.InvokeMember( "createTemplate", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, jsObj, getTemplateParam); } if (template == null) { listOperation.Items.Add("Failed to acquire form template."); avDoc.Close(1); acroApp.CloseAllDocs(); acroApp.Exit(); } object[] spawnParam = { 1, false, false }; try { for (int i = 0; i < 1; i++) { Type templateType = template.GetType(); templateType.InvokeMember( "spawn", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, template, spawnParam); object[] extractPagesParam = { 1 }; newDoc = T.InvokeMember( "extractPages", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, jsObj, extractPagesParam); //merge xml to pdf object[] importTextDataParam = { pathXmlToMerge, 0 }; T.InvokeMember( "importXFAData", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, newDoc, importTextDataParam); //save pdf object[] saveAsParam = { outputString + "example_" + nameFilePdf + ".pdf" }; T.InvokeMember( "saveAs", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, newDoc, saveAsParam); bool formDataExists = true; object[] closeDocParam = { !formDataExists }; T.InvokeMember( "closeDoc", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, newDoc, closeDocParam); } avDoc.Close(1); acroApp.CloseAllDocs(); acroApp.Exit(); listOperation.Items.Add("File PDF created."); } catch (Exception ex) { listOperation.Items.Add("Error: " + ex.Message); } }
Configurazione progetto:
Operazioni:
Output su pdf: