org.jpedal.objects.acroforms.creation.GenericFormFactory Maven / Gradle / Ivy
/*
* ===========================================
* Java Pdf Extraction Decoding Access Library
* ===========================================
*
* Project Info: http://www.idrsolutions.com
* Help section for developers at http://www.idrsolutions.com/support/
*
* (C) Copyright 1997-2017 IDRsolutions and Contributors.
*
* This file is part of JPedal/JPDF2HTML5
*
@LICENSE@
*
* ---------------
* GenericFormFactory.java
* ---------------
*/
package org.jpedal.objects.acroforms.creation;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
import org.jpedal.io.PdfObjectReader;
import org.jpedal.objects.Javascript;
import org.jpedal.objects.PdfPageData;
import org.jpedal.objects.acroforms.actions.ActionHandler;
import org.jpedal.objects.raw.FormObject;
import org.jpedal.objects.raw.FormStream;
import org.jpedal.objects.raw.PdfDictionary;
import org.jpedal.objects.raw.PdfObject;
import org.jpedal.render.DynamicVectorRenderer;
public abstract class GenericFormFactory {
public final Map groups = new HashMap();
public final Map firstButtons = new HashMap();
/**
* handle on Resources if exists
*/
public PdfObject AcroRes;
public Object[] CO;
public PdfPageData pageData;
public PdfObjectReader currentPdfFile;
/**
* handle on AcroRenderer needed for adding mouse listener
*/
protected ActionHandler formsActionHandler;
@SuppressWarnings("UnusedDeclaration")
public void setDVR(final DynamicVectorRenderer htmLoutput, final Javascript javaScript) {
//only used in HTML
}
public void reset(final Object[] resources, final ActionHandler actionHandler, final PdfPageData pageData, final PdfObjectReader currentPdfFile) {
this.AcroRes = (PdfObject) resources[0];
this.CO = (Object[]) resources[1];
formsActionHandler = actionHandler;
this.pageData = pageData;
this.currentPdfFile = currentPdfFile;
groups.clear();
firstButtons.clear();
}
protected String readAPimagesForText(final FormObject form) {
final PdfObject xobj = form.getDictionary(PdfDictionary.AP).getDictionary(PdfDictionary.N);
if (xobj != null) {
return FormStream.decipherTextFromAP(currentPdfFile, xobj);
}
return null;
}
/**
* create a pressed look of the image and return it
*/
@SuppressWarnings("UnusedDeclaration")
protected BufferedImage createPressedLook(final Image image) {
if (image == null) {
return null;
}
final BufferedImage pressedImage = new BufferedImage(image.getWidth(null) + 2, image.getHeight(null) + 2, BufferedImage.TYPE_INT_ARGB);
final Graphics2D g = (Graphics2D) pressedImage.getGraphics();
g.drawImage(image, 1, 1, null);
g.dispose();
return pressedImage;
}
/**
* does nothing (overriden by HTML implementation)
*/
@SuppressWarnings("UnusedDeclaration")
public void indexAllKids() {
}
/**
* public method to allow user to replace Popup with their own implementation
*
* @param form
* @param popupObj
* @return Swing component to use as popup (see org.jpedal.objects.acroforms.overridingImplementations.PdfSwingPopup)
*/
@SuppressWarnings({"UnusedParameters", "MethodMayBeStatic"})
public Object getPopupComponent(final FormObject form, final PdfObject popupObj, final int cropBoxWith) {
return null;
}
public Object generateBorderfromForm(final FormObject form, final float scaling) {
throw new RuntimeException("generateBorderfromForm(final FormObject " + form + ", final float " + scaling + ") called in GenericFormFactory - not implemented in " + this);
}
public void setOptions(final EnumSet formSettings) {
throw new RuntimeException("setOptions(EnumSet formSettings) called in GenericFormFactory - not implemented in " + this);
}
public static boolean isTextForm(final int formType) {
return formType == FormFactory.SINGLELINEPASSWORD || formType == FormFactory.MULTILINEPASSWORD || formType == FormFactory.SINGLELINETEXT || formType == FormFactory.MULTILINETEXT;
}
public static boolean isButtonForm(final int formType) {
return formType == FormFactory.RADIOBUTTON || formType == FormFactory.CHECKBOXBUTTON;
}
/**
* used in HTML modes to signal if forms rasterized
*
* @return
*/
public boolean flattenForms() {
return false;
}
}