Search in sources :

Example 1 with PDNonTerminalField

use of com.tom_roush.pdfbox.pdmodel.interactive.form.PDNonTerminalField in project PdfBox-Android by TomRoush.

the class PDFMergerUtility method mergeFields.

private void mergeFields(PDFCloneUtility cloner, PDField destField, PDField srcField) {
    if (destField instanceof PDNonTerminalField && srcField instanceof PDNonTerminalField) {
        Log.i("PdfBox-Android", "Skipping non terminal field " + srcField.getFullyQualifiedName());
        return;
    }
    if (destField.getFieldType() == "Tx" && destField.getFieldType() == "Tx") {
        // if the field already has multiple widgets we can add to the array
        if (destField.getCOSObject().containsKey(COSName.KIDS)) {
            COSArray widgets = destField.getCOSObject().getCOSArray(COSName.KIDS);
            for (PDAnnotationWidget srcWidget : srcField.getWidgets()) {
                try {
                    widgets.add(cloner.cloneForNewDocument(srcWidget.getCOSObject()));
                } catch (IOException ioe) {
                    Log.w("PdfBox-Android", "Unable to clone widget for source field " + srcField.getFullyQualifiedName());
                }
            }
        } else {
            COSArray widgets = new COSArray();
            try {
                COSDictionary widgetAsCOS = (COSDictionary) cloner.cloneForNewDocument(destField.getWidgets().get(0));
                cleanupWidgetCOSDictionary(widgetAsCOS, true);
                widgetAsCOS.setItem(COSName.PARENT, destField);
                widgets.add(widgetAsCOS);
                for (PDAnnotationWidget srcWidget : srcField.getWidgets()) {
                    try {
                        widgetAsCOS = (COSDictionary) cloner.cloneForNewDocument(srcWidget.getCOSObject());
                        cleanupWidgetCOSDictionary(widgetAsCOS, false);
                        widgetAsCOS.setItem(COSName.PARENT, destField);
                        widgets.add(widgetAsCOS);
                    } catch (IOException ioe) {
                        Log.w("PdfBox-Android", "Unable to clone widget for source field " + srcField.getFullyQualifiedName());
                    }
                }
                destField.getCOSObject().setItem(COSName.KIDS, widgets);
                cleanupFieldCOSDictionary(destField.getCOSObject());
            } catch (IOException ioe) {
                Log.w("PdfBox-Android", "Unable to clone widget for destination field " + destField.getFullyQualifiedName());
            }
        }
    } else {
        Log.i("PdfBox-Android", "Only merging two text fields is currently supported");
        Log.i("PdfBox-Android", "Skipping merging of " + srcField.getFullyQualifiedName() + " into " + destField.getFullyQualifiedName());
    }
}
Also used : COSArray(com.tom_roush.pdfbox.cos.COSArray) COSDictionary(com.tom_roush.pdfbox.cos.COSDictionary) PDAnnotationWidget(com.tom_roush.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget) PDNonTerminalField(com.tom_roush.pdfbox.pdmodel.interactive.form.PDNonTerminalField) IOException(java.io.IOException)

Aggregations

COSArray (com.tom_roush.pdfbox.cos.COSArray)1 COSDictionary (com.tom_roush.pdfbox.cos.COSDictionary)1 PDAnnotationWidget (com.tom_roush.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget)1 PDNonTerminalField (com.tom_roush.pdfbox.pdmodel.interactive.form.PDNonTerminalField)1 IOException (java.io.IOException)1