📄 acrofields.java
字号:
PdfAppearance cb = new PdfAppearance();
if (dao[DA_FONT] != null) {
BaseFont bf = (BaseFont)value;
PdfName psn = (PdfName)PdfAppearance.stdFieldFontNames.get(bf.getPostscriptFontName());
if (psn == null) {
psn = new PdfName(bf.getPostscriptFontName());
}
PdfDictionary fonts = (PdfDictionary)PdfReader.getPdfObject(dr.get(PdfName.FONT));
if (fonts == null) {
fonts = new PdfDictionary();
dr.put(PdfName.FONT, fonts);
}
PdfIndirectReference fref = (PdfIndirectReference)fonts.get(psn);
PdfDictionary top = (PdfDictionary)PdfReader.getPdfObject(reader.getCatalog().get(PdfName.ACROFORM));
markUsed(top);
dr = (PdfDictionary)PdfReader.getPdfObject(top.get(PdfName.DR));
if (dr == null) {
dr = new PdfDictionary();
top.put(PdfName.DR, dr);
}
markUsed(dr);
PdfDictionary fontsTop = (PdfDictionary)PdfReader.getPdfObject(dr.get(PdfName.FONT));
if (fontsTop == null) {
fontsTop = new PdfDictionary();
dr.put(PdfName.FONT, fontsTop);
}
markUsed(fontsTop);
PdfIndirectReference frefTop = (PdfIndirectReference)fontsTop.get(psn);
if (frefTop != null) {
if (fref == null)
fonts.put(psn, frefTop);
}
else if (fref == null) {
FontDetails fd;
if (bf.getFontType() == BaseFont.FONT_TYPE_DOCUMENT) {
fd = new FontDetails(null, ((DocumentFont)bf).getIndirectReference(), bf);
}
else {
bf.setSubset(false);
fd = writer.addSimple(bf);
localFonts.put(psn.toString().substring(1), bf);
}
fontsTop.put(psn, fd.getIndirectReference());
fonts.put(psn, fd.getIndirectReference());
}
ByteBuffer buf = cb.getInternalBuffer();
buf.append(psn.getBytes()).append(' ').append(((Float)dao[DA_SIZE]).floatValue()).append(" Tf ");
if (dao[DA_COLOR] != null)
cb.setColorFill((Color)dao[DA_COLOR]);
PdfString s = new PdfString(cb.toString());
((PdfDictionary)item.merged.get(k)).put(PdfName.DA, s);
((PdfDictionary)item.widgets.get(k)).put(PdfName.DA, s);
markUsed((PdfDictionary)item.widgets.get(k));
}
}
}
}
}
else if (name.equalsIgnoreCase("textcolor")) {
for (int k = 0; k < item.merged.size(); ++k) {
if (hit.isHit(k)) {
PdfString da = (PdfString)PdfReader.getPdfObject(((PdfDictionary)item.merged.get(k)).get(PdfName.DA));
if (da != null) {
Object dao[] = splitDAelements(da.toUnicodeString());
PdfAppearance cb = new PdfAppearance();
if (dao[DA_FONT] != null) {
ByteBuffer buf = cb.getInternalBuffer();
buf.append(new PdfName((String)dao[DA_FONT]).getBytes()).append(' ').append(((Float)dao[DA_SIZE]).floatValue()).append(" Tf ");
cb.setColorFill((Color)value);
PdfString s = new PdfString(cb.toString());
((PdfDictionary)item.merged.get(k)).put(PdfName.DA, s);
((PdfDictionary)item.widgets.get(k)).put(PdfName.DA, s);
markUsed((PdfDictionary)item.widgets.get(k));
}
}
}
}
}
else if (name.equalsIgnoreCase("textsize")) {
for (int k = 0; k < item.merged.size(); ++k) {
if (hit.isHit(k)) {
PdfString da = (PdfString)PdfReader.getPdfObject(((PdfDictionary)item.merged.get(k)).get(PdfName.DA));
if (da != null) {
Object dao[] = splitDAelements(da.toUnicodeString());
PdfAppearance cb = new PdfAppearance();
if (dao[DA_FONT] != null) {
ByteBuffer buf = cb.getInternalBuffer();
buf.append(new PdfName((String)dao[DA_FONT]).getBytes()).append(' ').append(((Float)value).floatValue()).append(" Tf ");
if (dao[DA_COLOR] != null)
cb.setColorFill((Color)dao[DA_COLOR]);
PdfString s = new PdfString(cb.toString());
((PdfDictionary)item.merged.get(k)).put(PdfName.DA, s);
((PdfDictionary)item.widgets.get(k)).put(PdfName.DA, s);
markUsed((PdfDictionary)item.widgets.get(k));
}
}
}
}
}
else if (name.equalsIgnoreCase("bgcolor") || name.equalsIgnoreCase("bordercolor")) {
PdfName dname = (name.equalsIgnoreCase("bgcolor") ? PdfName.BG : PdfName.BC);
for (int k = 0; k < item.merged.size(); ++k) {
if (hit.isHit(k)) {
PdfObject obj = PdfReader.getPdfObject(((PdfDictionary)item.merged.get(k)).get(PdfName.MK));
markUsed(obj);
PdfDictionary mk = (PdfDictionary)obj;
if (mk == null) {
if (value == null)
return true;
mk = new PdfDictionary();
((PdfDictionary)item.merged.get(k)).put(PdfName.MK, mk);
((PdfDictionary)item.widgets.get(k)).put(PdfName.MK, mk);
markUsed((PdfDictionary)item.widgets.get(k));
}
if (value == null)
mk.remove(dname);
else
mk.put(dname, PdfFormField.getMKColor((Color)value));
}
}
}
else
return false;
return true;
}
catch (Exception e) {
throw new ExceptionConverter(e);
}
}
/**
* Sets a field property. Valid property names are:
* <p>
* <ul>
* <li>flags - a set of flags specifying various characteristics of the field's widget annotation.
* The value of this entry replaces that of the F entry in the form's corresponding annotation dictionary.<br>
* <li>setflags - a set of flags to be set (turned on) in the F entry of the form's corresponding
* widget annotation dictionary. Bits equal to 1 cause the corresponding bits in F to be set to 1.<br>
* <li>clrflags - a set of flags to be cleared (turned off) in the F entry of the form's corresponding
* widget annotation dictionary. Bits equal to 1 cause the corresponding
* bits in F to be set to 0.<br>
* <li>fflags - a set of flags specifying various characteristics of the field. The value
* of this entry replaces that of the Ff entry in the form's corresponding field dictionary.<br>
* <li>setfflags - a set of flags to be set (turned on) in the Ff entry of the form's corresponding
* field dictionary. Bits equal to 1 cause the corresponding bits in Ff to be set to 1.<br>
* <li>clrfflags - a set of flags to be cleared (turned off) in the Ff entry of the form's corresponding
* field dictionary. Bits equal to 1 cause the corresponding bits in Ff
* to be set to 0.<br>
* </ul>
* @param field the field name
* @param name the property name
* @param value the property value
* @param inst an array of <CODE>int</CODE> indexing into <CODE>AcroField.Item.merged</CODE> elements to process.
* Set to <CODE>null</CODE> to process all
* @return <CODE>true</CODE> if the property exists, <CODE>false</CODE> otherwise
*/
public boolean setFieldProperty(String field, String name, int value, int inst[]) {
if (writer == null)
throw new RuntimeException("This AcroFields instance is read-only.");
Item item = (Item)fields.get(field);
if (item == null)
return false;
InstHit hit = new InstHit(inst);
if (name.equalsIgnoreCase("flags")) {
PdfNumber num = new PdfNumber(value);
for (int k = 0; k < item.merged.size(); ++k) {
if (hit.isHit(k)) {
((PdfDictionary)item.merged.get(k)).put(PdfName.F, num);
((PdfDictionary)item.widgets.get(k)).put(PdfName.F, num);
markUsed((PdfDictionary)item.widgets.get(k));
}
}
}
else if (name.equalsIgnoreCase("setflags")) {
for (int k = 0; k < item.merged.size(); ++k) {
if (hit.isHit(k)) {
PdfNumber num = (PdfNumber)PdfReader.getPdfObject(((PdfDictionary)item.widgets.get(k)).get(PdfName.F));
int val = 0;
if (num != null)
val = num.intValue();
num = new PdfNumber(val | value);
((PdfDictionary)item.merged.get(k)).put(PdfName.F, num);
((PdfDictionary)item.widgets.get(k)).put(PdfName.F, num);
markUsed((PdfDictionary)item.widgets.get(k));
}
}
}
else if (name.equalsIgnoreCase("clrflags")) {
for (int k = 0; k < item.merged.size(); ++k) {
if (hit.isHit(k)) {
PdfNumber num = (PdfNumber)PdfReader.getPdfObject(((PdfDictionary)item.widgets.get(k)).get(PdfName.F));
int val = 0;
if (num != null)
val = num.intValue();
num = new PdfNumber(val & (~value));
((PdfDictionary)item.merged.get(k)).put(PdfName.F, num);
((PdfDictionary)item.widgets.get(k)).put(PdfName.F, num);
markUsed((PdfDictionary)item.widgets.get(k));
}
}
}
else if (name.equalsIgnoreCase("fflags")) {
PdfNumber num = new PdfNumber(value);
for (int k = 0; k < item.merged.size(); ++k) {
if (hit.isHit(k)) {
((PdfDictionary)item.merged.get(k)).put(PdfName.FF, num);
((PdfDictionary)item.values.get(k)).put(PdfName.FF, num);
markUsed((PdfDictionary)item.values.get(k));
}
}
}
else if (name.equalsIgnoreCase("setfflags")) {
for (int k = 0; k < item.merged.size(); ++k) {
if (hit.isHit(k)) {
PdfNumber num = (PdfNumber)PdfReader.getPdfObject(((PdfDictionary)item.values.get(k)).get(PdfName.FF));
int val = 0;
if (num != null)
val = num.intValue();
num = new PdfNumber(val | value);
((PdfDictionary)item.merged.get(k)).put(PdfName.FF, num);
((PdfDictionary)item.values.get(k)).put(PdfName.FF, num);
markUsed((PdfDictionary)item.values.get(k));
}
}
}
else if (name.equalsIgnoreCase("clrfflags")) {
for (int k = 0; k < item.merged.size(); ++k) {
if (hit.isHit(k)) {
PdfNumber num = (PdfNumber)PdfReader.getPdfObject(((PdfDictionary)item.values.get(k)).get(PdfName.FF));
int val = 0;
if (num != null)
val = num.intValue();
num = new PdfNumber(val & (~value));
((PdfDictionary)item.merged.get(k)).put(PdfName.FF, num);
((PdfDictionary)item.values.get(k)).put(PdfName.FF, num);
markUsed((PdfDictionary)item.values.get(k));
}
}
}
else
return false;
return true;
}
/**
* Merges an XML data structure into this form.
* @param n the top node of the data structure
* @throws java.io.IOException on error
* @throws com.lowagie.text.DocumentException o error
*/
public void mergeXfaData(Node n) throws IOException, DocumentException {
XfaForm.Xml2SomDatasets data = new XfaForm.Xml2SomDatasets(n);
for (Iterator it = data.getOrder().iterator(); it.hasNext();) {
String name = (String)it.next();
String text = XfaForm.getNodeText((Node)data.getName2Node().get(name));
setField(name, text);
}
}
/** Sets the fields by FDF merging.
* @param fdf the FDF form
* @throws IOException on error
* @throws DocumentException on error
*/
public void setFields(FdfReader fdf) throws IOException, DocumentException {
HashMap fd = fdf.getFields();
for (Iterator i = fd.keySet().iterator(); i.hasNext();) {
String f = (String)i.next();
String v = fdf.getFieldValue(f);
if (v != null)
setField(f, v);
}
}
/** Sets the fields by XFDF merging.
* @param xfdf the XFDF form
* @throws IOException on error
* @throws DocumentException on error
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -