使用 Apache PDFBox 访问 PDF 字段的 COSArray
Accessing a COSArray for PDF fields with Apache PDFBox
我正在尝试访问 PDF 文件中的所有表单域 - 所以我可以使用代码来填写它们 - 这是我所获得的:
PDDocumentCatalog pdCatalog = pdf.getDocumentCatalog();
PDAcroForm pdAcroForm = pdCatalog.getAcroForm();
List<PDField> fieldList = pdAcroForm.getFields(); // fieldList.size() = 1
PDField field = fieldList.get(0);
COSDictionary dictionary = field.getCOSObject();
System.out.println("dictionary size = " + dictionary.size());
// my attempt to iterate through fields
for ( Map.Entry<COSName,COSBase> entry : dictionary.entrySet() )
{
COSName key = entry.getKey();
COSBase val = entry.getValue();
if ( val instanceof COSArray )
{
System.out.println("COSArray size = " + ((COSArray)val).size());
}
System.out.println("key = " + key);
System.out.println("val = " + val);
}
输出为:
dictionary size = 3
COSArray size = 2
key = COSName{Kids}
val = COSArray{[COSObject{110, 0}, COSObject{108, 0}]}
key = COSName{T}
val = COSString{form1[0]}
key = COSName{V}
val = COSString{}
有谁知道如何访问 COSArray 中的两个 COSObject?我也不知道符号 COSObject{x, y} 是什么意思,也找不到任何相关文档。如果那些是字典或数组值元素,我也想知道如何访问它们。
您使用 get(index)
获取对象以获取 COSObject
(间接引用)或使用 getObject(index)
获取由 COSObject
引用的取消引用对象。
COSObject{110, 0}
是对象编号和世代编号(通常为0)。使用 NOTEPAD++ 打开您的 PDF 文件并查找“110 0 obj”以找到它,或查找“110 0 R”以查看谁引用了该对象。
我正在尝试访问 PDF 文件中的所有表单域 - 所以我可以使用代码来填写它们 - 这是我所获得的:
PDDocumentCatalog pdCatalog = pdf.getDocumentCatalog();
PDAcroForm pdAcroForm = pdCatalog.getAcroForm();
List<PDField> fieldList = pdAcroForm.getFields(); // fieldList.size() = 1
PDField field = fieldList.get(0);
COSDictionary dictionary = field.getCOSObject();
System.out.println("dictionary size = " + dictionary.size());
// my attempt to iterate through fields
for ( Map.Entry<COSName,COSBase> entry : dictionary.entrySet() )
{
COSName key = entry.getKey();
COSBase val = entry.getValue();
if ( val instanceof COSArray )
{
System.out.println("COSArray size = " + ((COSArray)val).size());
}
System.out.println("key = " + key);
System.out.println("val = " + val);
}
输出为:
dictionary size = 3
COSArray size = 2
key = COSName{Kids}
val = COSArray{[COSObject{110, 0}, COSObject{108, 0}]}
key = COSName{T}
val = COSString{form1[0]}
key = COSName{V}
val = COSString{}
有谁知道如何访问 COSArray 中的两个 COSObject?我也不知道符号 COSObject{x, y} 是什么意思,也找不到任何相关文档。如果那些是字典或数组值元素,我也想知道如何访问它们。
您使用 get(index)
获取对象以获取 COSObject
(间接引用)或使用 getObject(index)
获取由 COSObject
引用的取消引用对象。
COSObject{110, 0}
是对象编号和世代编号(通常为0)。使用 NOTEPAD++ 打开您的 PDF 文件并查找“110 0 obj”以找到它,或查找“110 0 R”以查看谁引用了该对象。