Сохранение.xfdf как.pdf
В настоящее время я использую Excel для заполнения файла PDF с полями формы. Это все работает, но экспортирует его в формате.xfdf. Кто-нибудь знает, как я могу сохранить его в формате PDF вместо?
FullFileName = FilePath & "Requisition - " & Trim(MyRecord.CompanyName) & " - " & _
Year & "-" & Month & "-" & Day & "-" & Hour & "-" & Minute & "-" & Seconds & ".xfdf"
Open FullFileName For Output As #1
Print #1, "<?xml version=""1.0"" encoding=""ISO-8859-1""?>"
Print #1, "<xfdf xmlns=""http://ns.adobe.com/xfdf/"" xml:space=""preserve"">"
Print #1, "<fields>"
Print #1, "<field name=""Submitted by""><value>" + Trim(MyRecord.RequestedBy) + "</value></field>"
Print #1, "<field name=""Job Name""><value>" + "Auto Cards" + "</value></field>"
Print #1, "<field name=""Shipping address""><value>" + Trim(MyRecord.StreetNumber) & " " & Trim(MyRecord.StreetName) & ", Unit " & Trim(MyRecord.Suite) & ", " & Trim(MyRecord.City) & ", " & Trim(MyRecord.Province) & ", " & Trim(MyRecord.PostalCode) + "</value></field>"
Print #1, "<field name=""Special Instructions""><value>" + "Print" + "</value></field>"
Print #1, "</fields>"
Print #1, "<f href=""..\Requisition_Fillable.pdf""/>"
Print #1, "</xfdf>"
Close #1 ' Close file.
1 ответ
XFDF - это разновидность XML FDF. FDF обозначает формат данных форм. Это формат файла для хранения данных без фактического содержания PDF. FDF использует синтаксис PDF для хранения этих данных. XFDF использует XML.
Вы не можете "преобразовать" файл FDF или XFDF в PDF, потому что слишком много информации отсутствует. Вы можете импортировать (X) файл FDF в PDF-файл с соответствующими полями AcroForm.
Пожалуйста, посмотрите на пример ImportXFDF. Для этого примера я написал простой файл XFDF: data.xfdf:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<fields>
<field name="Submitted by"><value>Santaaimonce</value></field>
<field name="Job name"><value>Developer</value></field>
<field name="Shipping address"><value>Alphabet Street
Minneapolis
Minnesota</value></field>
<field name="Special instructions"><value>Use iText to fill out interactive form using data stored in XFDF file.
If you are a C# developer, use iTextSharp.</value></field>
</fields>
<f href="Requisition_Fillable.pdf"/>
</xfdf>
Этой информации недостаточно для создания PDF, но, как вы можете видеть, есть ссылка на файл шаблона PDF: Requisition_Fillable.pdf.
Если вы положите data.xfdf
а также Requisition_Fillable.pdf
в том же каталоге, и вы открываете data.xfdf
, вы увидите следующее сообщение:
Adobe Reader открыл файл XFDF, нашел ссылку на шаблон PDF, открыл шаблон и теперь спросит вас, хотите ли вы импортировать данные. Если вы нажмете кнопку "Параметры" и разрешите импорт, вы получите следующий результат:
Проблема, с которой вы столкнулись, проста: у вас нет файла Requisition_Fillable.pdf. Вы также можете избежать того, чтобы люди могли изменять заполненные данные.
Вы можете решить эту проблему путем программного слияния файла XFDF и его шаблона:
protected void fillXfdf(String SRC, String XFDF, String DEST) throws IOException, DocumentException {
// We receive the XML bytes
XfdfReader xfdf = new XfdfReader(new FileInputStream(XFDF));
// We get the corresponding form
PdfReader reader = new PdfReader(SRC);
// We create an OutputStream for the new PDF
FileOutputStream baos = new FileOutputStream(DEST);
// Now we create the PDF
PdfStamper stamper = new PdfStamper(reader, baos);
// We alter the fields of the existing PDF
AcroFields fields = stamper.getAcroFields();
fields.setFields(xfdf);
// take away all interactivity
stamper.setFormFlattening(true);
// close the stamper
stamper.close();
reader.close();
}
Обратите внимание на следующую строку:
stamper.setFormFlattening(true);
Это сгладит форму: поля больше не будут полями, они будут просто как любой другой контент. В итоге вы получите обычный PDF: xfdf_merged.pdf
Очевидно, это будет работать только в том случае, если форма (в этом случае Requisition_Fillable.pdf
) соответствует данным в потоке XFDF. Например: мой шаблон будет работать с вашими данными для полей "Submitted by"
а также "Shipping address"
, Это не будет работать для полей "Job Name"
а также "Special Instructions"
потому что эти поля не существуют в моем шаблоне. В моем шаблоне эти поля названы "Job name"
а также "Special instructions"
; Вы видите строчные буквы вместо прописных?
Если вы хотите использовать мой шаблон, вам придется изменить эти два имени поля, либо в вашем файле XFDF, либо в шаблоне PDF. Также: мой пример написан на Java. Поскольку вы работаете в VB, вам придется использовать.NET-версию iText, которая называется iTextSharp. У опытного разработчика VBA не должно возникнуть никаких проблем при переносе моего примера с Java на VB. Просто думайте о Java как о псевдокоде.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: приведенный выше пример требует iText. Я являюсь генеральным директором группы iText, и этот пример взят из моей книги "iText in action - второе издание".