📄 pdfacroform.java
字号:
tp.showText(text); tp.endText(); tp.restoreState(); tp.endVariableText(); field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp); } /** * @param field * @param text * @param font * @param fontSize * @param llx * @param lly * @param urx * @param ury */ public void drawMultiLineOfText(PdfFormField field, String text, BaseFont font, float fontSize, float llx, float lly, float urx, float ury) { PdfAppearance tp = PdfAppearance.createAppearance(writer, urx - llx, ury - lly); PdfAppearance tp2 = (PdfAppearance)tp.getDuplicate(); tp2.setFontAndSize(font, fontSize); tp2.resetRGBColorFill(); field.setDefaultAppearanceString(tp2); tp.drawTextField(0f, 0f, urx - llx, ury - lly); tp.beginVariableText(); tp.saveState(); tp.rectangle(3f, 3f, urx - llx - 6f, ury - lly - 6f); tp.clip(); tp.newPath(); tp.beginText(); tp.setFontAndSize(font, fontSize); tp.resetRGBColorFill(); tp.setTextMatrix(4, 5); java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(text, "\n"); float yPos = ury - lly; while (tokenizer.hasMoreTokens()) { yPos -= fontSize * 1.2f; tp.showTextAligned(PdfContentByte.ALIGN_LEFT, tokenizer.nextToken(), 3, yPos, 0); } tp.endText(); tp.restoreState(); tp.endVariableText(); field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp); } /** * @param name * @param value * @param status * @param llx * @param lly * @param urx * @param ury * @return a PdfFormField */ public PdfFormField addCheckBox(String name, String value, boolean status, float llx, float lly, float urx, float ury) { PdfFormField field = PdfFormField.createCheckBox(writer); setCheckBoxParams(field, name, value, status, llx, lly, urx, ury); drawCheckBoxAppearences(field, value, llx, lly, urx, ury); addFormField(field); return field; } /** * @param field * @param name * @param value * @param status * @param llx * @param lly * @param urx * @param ury */ public void setCheckBoxParams(PdfFormField field, String name, String value, boolean status, float llx, float lly, float urx, float ury) { field.setWidget(new Rectangle(llx, lly, urx, ury), PdfAnnotation.HIGHLIGHT_TOGGLE); field.setFieldName(name); if (status) { field.setValueAsName(value); field.setAppearanceState(value); } else { field.setValueAsName("Off"); field.setAppearanceState("Off"); } field.setFlags(PdfAnnotation.FLAGS_PRINT); field.setPage(); field.setBorderStyle(new PdfBorderDictionary(1, PdfBorderDictionary.STYLE_SOLID)); } /** * @param field * @param value * @param llx * @param lly * @param urx * @param ury */ public void drawCheckBoxAppearences(PdfFormField field, String value, float llx, float lly, float urx, float ury) { BaseFont font = null; try { font = BaseFont.createFont(BaseFont.ZAPFDINGBATS, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED); } catch(Exception e) { throw new ExceptionConverter(e); } float size = (ury - lly); PdfAppearance tpOn = PdfAppearance.createAppearance(writer, urx - llx, ury - lly); PdfAppearance tp2 = (PdfAppearance)tpOn.getDuplicate(); tp2.setFontAndSize(font, size); tp2.resetRGBColorFill(); field.setDefaultAppearanceString(tp2); tpOn.drawTextField(0f, 0f, urx - llx, ury - lly); tpOn.saveState(); tpOn.resetRGBColorFill(); tpOn.beginText(); tpOn.setFontAndSize(font, size); tpOn.showTextAligned(PdfContentByte.ALIGN_CENTER, "4", (urx - llx) / 2, (ury - lly) / 2 - (size * 0.3f), 0); tpOn.endText(); tpOn.restoreState(); field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, value, tpOn); PdfAppearance tpOff = PdfAppearance.createAppearance(writer, urx - llx, ury - lly); tpOff.drawTextField(0f, 0f, urx - llx, ury - lly); field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, "Off", tpOff); } /** * @param name * @param defaultValue * @param noToggleToOff * @return a PdfFormField */ public PdfFormField getRadioGroup(String name, String defaultValue, boolean noToggleToOff) { PdfFormField radio = PdfFormField.createRadioButton(writer, noToggleToOff); radio.setFieldName(name); radio.setValueAsName(defaultValue); return radio; } /** * @param radiogroup */ public void addRadioGroup(PdfFormField radiogroup) { addFormField(radiogroup); } /** * @param radiogroup * @param value * @param llx * @param lly * @param urx * @param ury * @return a PdfFormField */ public PdfFormField addRadioButton(PdfFormField radiogroup, String value, float llx, float lly, float urx, float ury) { PdfFormField radio = PdfFormField.createEmpty(writer); radio.setWidget(new Rectangle(llx, lly, urx, ury), PdfAnnotation.HIGHLIGHT_TOGGLE); String name = ((PdfName)radiogroup.get(PdfName.V)).toString().substring(1); if (name.equals(value)) { radio.setAppearanceState(value); } else { radio.setAppearanceState("Off"); } drawRadioAppearences(radio, value, llx, lly, urx, ury); radiogroup.addKid(radio); return radio; } /** * @param field * @param value * @param llx * @param lly * @param urx * @param ury */ public void drawRadioAppearences(PdfFormField field, String value, float llx, float lly, float urx, float ury) { PdfAppearance tpOn = PdfAppearance.createAppearance(writer, urx - llx, ury - lly); tpOn.drawRadioField(0f, 0f, urx - llx, ury - lly, true); field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, value, tpOn); PdfAppearance tpOff = PdfAppearance.createAppearance(writer, urx - llx, ury - lly); tpOff.drawRadioField(0f, 0f, urx - llx, ury - lly, false); field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, "Off", tpOff); } /** * @param name * @param options * @param defaultValue * @param font * @param fontSize * @param llx * @param lly * @param urx * @param ury * @return a PdfFormField */ public PdfFormField addSelectList(String name, String[] options, String defaultValue, BaseFont font, float fontSize, float llx, float lly, float urx, float ury) { PdfFormField choice = PdfFormField.createList(writer, options, 0); setChoiceParams(choice, name, defaultValue, llx, lly, urx, ury); StringBuffer text = new StringBuffer(); for (int i = 0; i < options.length; i++) { text.append(options[i]).append('\n'); } drawMultiLineOfText(choice, text.toString(), font, fontSize, llx, lly, urx, ury); addFormField(choice); return choice; } /** * @param name * @param options * @param defaultValue * @param font * @param fontSize * @param llx * @param lly * @param urx * @param ury * @return a PdfFormField */ public PdfFormField addSelectList(String name, String[][] options, String defaultValue, BaseFont font, float fontSize, float llx, float lly, float urx, float ury) { PdfFormField choice = PdfFormField.createList(writer, options, 0); setChoiceParams(choice, name, defaultValue, llx, lly, urx, ury); StringBuffer text = new StringBuffer(); for (int i = 0; i < options.length; i++) { text.append(options[i][1]).append('\n'); } drawMultiLineOfText(choice, text.toString(), font, fontSize, llx, lly, urx, ury); addFormField(choice); return choice; } /** * @param name * @param options * @param defaultValue * @param editable * @param font * @param fontSize * @param llx * @param lly * @param urx * @param ury * @return a PdfFormField */ public PdfFormField addComboBox(String name, String[] options, String defaultValue, boolean editable, BaseFont font, float fontSize, float llx, float lly, float urx, float ury) { PdfFormField choice = PdfFormField.createCombo(writer, editable, options, 0); setChoiceParams(choice, name, defaultValue, llx, lly, urx, ury); if (defaultValue == null) { defaultValue = options[0]; } drawSingleLineOfText(choice, defaultValue, font, fontSize, llx, lly, urx, ury); addFormField(choice); return choice; } /** * @param name * @param options * @param defaultValue * @param editable * @param font * @param fontSize * @param llx * @param lly * @param urx * @param ury * @return a PdfFormField */ public PdfFormField addComboBox(String name, String[][] options, String defaultValue, boolean editable, BaseFont font, float fontSize, float llx, float lly, float urx, float ury) { PdfFormField choice = PdfFormField.createCombo(writer, editable, options, 0); setChoiceParams(choice, name, defaultValue, llx, lly, urx, ury); String value = null; for (int i = 0; i < options.length; i++) { if (options[i][0].equals(defaultValue)) { value = options[i][1]; break; } } if (value == null) { value = options[0][1]; } drawSingleLineOfText(choice, value, font, fontSize, llx, lly, urx, ury); addFormField(choice); return choice; } /** * @param field * @param name * @param defaultValue * @param llx * @param lly * @param urx * @param ury */ public void setChoiceParams(PdfFormField field, String name, String defaultValue, float llx, float lly, float urx, float ury) { field.setWidget(new Rectangle(llx, lly, urx, ury), PdfAnnotation.HIGHLIGHT_INVERT); if (defaultValue != null) { field.setValueAsString(defaultValue); field.setDefaultValueAsString(defaultValue); } field.setFieldName(name); field.setFlags(PdfAnnotation.FLAGS_PRINT); field.setPage(); field.setBorderStyle(new PdfBorderDictionary(2, PdfBorderDictionary.STYLE_SOLID)); } /** * @param name * @param llx * @param lly * @param urx * @param ury * @return a PdfFormField */ public PdfFormField addSignature(String name, float llx, float lly, float urx, float ury) { PdfFormField signature = PdfFormField.createSignature(writer); setSignatureParams(signature, name, llx, lly, urx, ury); drawSignatureAppearences(signature, llx, lly, urx, ury); addFormField(signature); return signature; } /** * @param field * @param name * @param llx * @param lly * @param urx * @param ury */ public void setSignatureParams(PdfFormField field, String name, float llx, float lly, float urx, float ury) { field.setWidget(new Rectangle(llx, lly, urx, ury), PdfAnnotation.HIGHLIGHT_INVERT); field.setFieldName(name); field.setFlags(PdfAnnotation.FLAGS_PRINT); field.setPage(); field.setMKBorderColor(java.awt.Color.black); field.setMKBackgroundColor(java.awt.Color.white); } /** * @param field * @param llx * @param lly * @param urx * @param ury */ public void drawSignatureAppearences(PdfFormField field, float llx, float lly, float urx, float ury) { PdfAppearance tp = PdfAppearance.createAppearance(writer, urx - llx, ury - lly); tp.setGrayFill(1.0f); tp.rectangle(0, 0, urx - llx, ury - lly); tp.fill(); tp.setGrayStroke(0); tp.setLineWidth(1); tp.rectangle(0.5f, 0.5f, urx - llx - 0.5f, ury - lly - 0.5f); tp.closePathStroke(); tp.saveState(); tp.rectangle(1, 1, urx - llx - 2, ury - lly - 2); tp.clip(); tp.newPath(); tp.restoreState(); field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -