Java >> Java tutorial >  >> Java

Adgang til et COSArray til PDF-felter med Apache PDFBox

Jeg forsøger at få adgang til alle formularfelter i en PDF-fil – så jeg kan bruge kode til at udfylde dem – og dette er så vidt jeg har nået:

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);
}

som giver et output på:

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{}

Er der nogen, der ved, hvordan jeg kan få adgang til de to COSObjects i COSArray'et? Jeg ved heller ikke, hvad notationen COSObject{x, y} betyder, og kan ikke finde nogen dokumentation om dette. Hvis det er ordbogs- eller matrixværdielementer, vil jeg også gerne vide, hvordan man får adgang til dem.

Svar

Du får objektet med get(index) for at få COSObject (en indirekte reference) eller getObject(index) for at få det dereferencede objekt refereret af COSObject .

COSObject{110, 0} er objektnummeret og generationsnummeret (normalt 0). Åbn din PDF-fil med NOTEPAD++ og se efter "110 0 obj" for at finde den, eller "110 0 R" for at se, hvem der refererer til dette objekt.


Java tag