【问题标题】:Android fill PDF formAndroid填写PDF表格
【发布时间】:2012-07-28 23:59:26
【问题描述】:
我有 .pdf 文件和多个表格。
我想打开我的 .pdf 文件,填写表格并将其从 Android 开发中保存。
是否有任何用于 Android 渲染的 API。
我找到了 iText,但我只是设法创建新的 pdf,然后我可以填写表格。表示我创建的将填写哪个 .pdf 文件。我需要用自己的 .pdf 格式填写表格。
在此先感谢...任何帮助将不胜感激...
【问题讨论】:
标签:
android
pdf
pdf-generation
【解决方案1】:
当前 Android 平台(包括 Android P)上的原生 PDF 支持不公开任何用于填写表单的控件。 PSPDFKit 等 3rd-party PDF SDK 填补了这一空白并允许programmatic PDF form filling:
List<FormField> formFields = document.getFormProvider().getFormFields();
for (FormField formField : formFields) {
if (formField.getType() == FormType.TEXT) {
TextFormElement textFormElement = (TextFormElement) formField.getFormElement();
textFormElement.setText("Test " + textFormElement.getName());
} else if (formField.getType() == FormType.CHECKBOX) {
CheckBoxFormElement checkBoxFormElement = (CheckBoxFormElement)formField.getFormElement();
checkBoxFormElement.toggleSelection();
}
}
(如果您点击上面的链接,还有一个 Kotlin PDF 表单填写示例。)
请注意,市场上的大多数 SDK 都专注于 PDF AcroForms,而不是 XFA 规范,后者在 PDF 2.0 规范中是 deprecated。
【解决方案2】:
DynamicPDF Merger for Java 允许您这样做。您可以获取现有的 PDF 文档,填写表单字段值,然后输出新填写的 PDF。
dynamicpdf.com 上最近有一篇关于在 Android 应用程序中设置 DynamicPDF for Java 并从中创建简单 PDF 的博文,http://www.dynamicpdf.com/Blog/post/2012/06/15/Generating-PDFs-Dynamically-on-Android.aspx。
您可以轻松地将该示例更进一步,并使用它来完成您的表单填写任务。以下(未经测试)代码是使用 DynamicPDF Merger for Java 在 Android 设备上填充现有 PDF 的示例:
InputStream inputStream = this.getAssets().open("PDFToFill.pdf");
long avail = inputStream.available();
byte[] samplePDF = new byte[(int) avail];
inputStream.read(samplePDF , 0, (int) avail);
inputStream.close();
PdfDocument objPDF = new PdfDocument(samplePDF);
MergeDocument document = new MergeDocument(objPDF);
document.getForm().getFields().getFormField("FormField1").setValue("My Text");
document.draw("[PhysicalPath]/FilledPDF.pdf");