Я сам воспользовался советом Хкремера и создал небольшой exe .net на C # для создания PDF из файла xfdf на основе библиотеки itextsharp. Его все равно нужно будет вызывать с помощью passthru, но это мило и крошечно. Моя версия также имеет возможность вставить скрытое поле в PDF, так как мне понадобились эти функции для моего проекта.
Вам необходимо скачать и добавить ссылку на сборку iTextSharp.text.pdf.
Надеюсь, это поможет!
using System;
using System.IO;
using iTextSharp.text.pdf;
namespace PDFBrain
{
class Program
{
// args:
// 0 => template
// 1 => xfdf
// 2 => outputfile
// 3 => flatten output file?
static void Main(string[] args)
{
if (args == null)
{
Console.Out.WriteLine("No arguments were provided. Exiting.");
return;
}
if (args[0] == "create")
{
if (args.Length != 5)
{
Console.Out.WriteLine("Wrong number of arguments were provided. Exiting.");
return;
}
CreatePDF(args[1], args[2], args[3], args[4]);
}
if (args[0] == "hidden")
{
if (args.Length != 3)
{
Console.Out.WriteLine("Wrong number of arguments were provided. Exiting.");
return;
}
InsertHiddenIdField(args[1], args[2]);
}
}
public static void CreatePDF(string templ, string xfdf, string output, string flatten)
{
PdfReader template = new PdfReader(templ);
XfdfReader xfdfReader = new XfdfReader(xfdf);
PdfStamper stamper = new PdfStamper(template, new FileStream(output, FileMode.Create));
stamper.AcroFields.SetFields(xfdfReader);
stamper.FormFlattening = flatten == "true" ? true : false;
stamper.Writer.CloseStream = false;
stamper.Close();
}
public static void InsertHiddenIdField(string templ, string output)
{
PdfReader template = new PdfReader(templ);
PdfStamper stamper = new PdfStamper(template, new FileStream(output, FileMode.Create));
TextField clientID = new TextField(stamper.Writer, new iTextSharp.text.Rectangle(10,750,60,770), "hdnClientID");
clientID.Visibility = BaseField.HIDDEN;
stamper.AddAnnotation(clientID.GetTextField(),1);
stamper.Close();
}
}
}