L'esempio seguente permette di fare un binding tra un file xml e un pdf in ambiente .Net con linguaggio c#.
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: