📄 pdftool.java
字号:
t.add(new Integer(getPage(s1, num)-1)); } else { int start = getPage(s1.substring(0, k), num); int end = getPage(s1.substring(k+1), num); if (start<end) { for(int i=start;i<=end;i++) t.add(new Integer(i-1)); } else { for(int i=end;i>=start;i--) t.add(new Integer(i-1)); } } } out = new int[t.size()]; for (int i=0;i<out.length;i++) { out[i] = ((Integer)t.get(i)).intValue(); } } return out; } private static int getPage(String val, int num) { if (val.equals("end")) { return num; } else { try { int i = Integer.parseInt(val); if (i<1 || i>num) { throw new IllegalArgumentException("Page "+i+" outside range 1-"+num); } return i; } catch (NumberFormatException e) { throw new IllegalArgumentException("Invalid page '"+val+"'"); } } } private static PDF form(ListIterator i, PDF pdf) throws IOException, SAXException { Map fields = new HashMap(); boolean flatten = false; String xfa = null, fdf = null; while (i.hasNext()) { String opt = (String)i.next(); if (opt.startsWith("--properties=")) { String filename = getValue(opt); Properties p = new Properties(); p.load(new FileInputStream(filename)); for (Enumeration e = p.propertyNames();e.hasMoreElements();) { String key = (String)e.nextElement(); String value = p.getProperty(key); fields.put(key, value); } } else if (opt.startsWith("--fdf=")) { fdf = getValue(opt); } else if (opt.startsWith("--xfa=")) { String filename = getValue(opt); Reader in = new InputStreamReader(new FileInputStream(filename), "UTF-8"); StringWriter w = new StringWriter(); int c; while ((c=in.read())>=0) w.write(c); xfa = w.toString(); } else if (opt.startsWith("--field=")) { String val = getValue(opt); int x = val.indexOf('='); if (x<0) { throw new IllegalArgumentException("\""+opt+"\" is invalid"); } else { fields.put(val.substring(0, x), val.substring(x+1)); } } else if (opt.equals("--flatten") || opt.equals("--flatten=true")) { flatten = true; } else if (opt.equals("--flatten=false")) { flatten = false; } else if (opt.startsWith("--")) { i.previous(); break; } else { pdf = load(opt); } } if (pdf!=null) { Form form = pdf.getForm(); if (xfa!=null) { form.setXFADatasets(xfa); } else if (fdf!=null) { FDF fdfobject = new FDF(new FileInputStream(fdf)); pdf.importFDF(fdfobject); } else { for (Iterator j = fields.entrySet().iterator();j.hasNext();) { Map.Entry e = (Map.Entry)j.next(); String key = (String)e.getKey(); String val = (String)e.getValue(); FormElement elt = (FormElement)form.getElement(key); if (elt==null) { System.err.println("Unknown field: \""+key+"\""); } else if (elt instanceof FormText) { ((FormText)elt).setValue(val); } else if (elt instanceof FormRadioButton) { ((FormRadioButton)elt).setValue(val); } else if (elt instanceof FormCheckbox) { ((FormCheckbox)elt).setValue(val); } else if (elt instanceof FormChoice) { ((FormChoice)elt).setValue(val); } else { System.err.println("Unable to set "+elt.getClass()+" element"); } } fields.clear(); } if (flatten) form.flatten(); } return pdf; } private static PDF sign(ListIterator i, PDF pdf) throws IOException, GeneralSecurityException { String keypassword=null, password=null, reason=null, location=null, alias=null, keystorefile=null, field=null, name=null, keystoretype="JKS"; int left=0, top=0, right=0, bottom=0, page=0; while (i.hasNext()) { String opt = (String)i.next(); if (opt.startsWith("--keypassword=")) { keypassword = getValue(opt); } else if (opt.startsWith("--password=")) { password = getValue(opt); } else if (opt.startsWith("--reason=")) { reason = getValue(opt); } else if (opt.startsWith("--location=")) { location = getValue(opt); } else if (opt.startsWith("--alias=")) { alias = getValue(opt); } else if (opt.startsWith("--name=")) { name = getValue(opt); } else if (opt.startsWith("--keystore=")) { keystorefile = getValue(opt); } else if (opt.startsWith("--keystoretype=")) { keystoretype = getValue(opt); } else if (opt.startsWith("--field=")) { field = getValue(opt); } else if (opt.startsWith("--left=")) { left = Integer.parseInt(getValue(opt)); } else if (opt.startsWith("--top=")) { top = Integer.parseInt(getValue(opt)); } else if (opt.startsWith("--right=")) { right = Integer.parseInt(getValue(opt)); } else if (opt.startsWith("--bottom=")) { bottom = Integer.parseInt(getValue(opt)); } else if (opt.startsWith("--page=")) { page = Integer.parseInt(getValue(opt)) - 1; } else if (opt.startsWith("--")) { i.previous(); break; } else { pdf = load(opt); } } if (pdf!=null) { Form form = pdf.getForm(); FormSignature sig = null; if (field!=null) sig = (FormSignature)form.getElement(field); if (sig==null) { if (field==null) field = "Signature"; sig = new FormSignature(); if (left!=right && top!=bottom) { sig.addAnnotation(pdf.getPage(page), left, top, right, bottom); } pdf.getForm().addElement(field, sig); } if (keypassword==null) keypassword=password; KeyStore keystore = KeyStore.getInstance(keystoretype); keystore.load(new FileInputStream(keystorefile), password.toCharArray()); sig.sign(keystore, alias, keypassword.toCharArray(), FormSignature.HANDLER_ACROBATSIX); sig.setReason(reason); sig.setLocation(location); if (name==null) { PKCS7SignatureHandler pkcs7 = (PKCS7SignatureHandler)sig.getSignatureHandler(); name = FormSignature.getSubjectField(pkcs7.getCertificates()[0], "CN"); } sig.setName(name); } return pdf; } private static void toimage(ListIterator i, PDF pdf, OutputStream out) throws IOException { java.awt.image.ColorModel cm = PDFParser.getBlackAndWhiteColorModel(128); int dpi = 200; String pages = null; String format = "tiff"; while (i.hasNext()) { String opt = (String)i.next(); if (opt.startsWith("--dpi=")) { dpi = Integer.parseInt(getValue(opt)); if (dpi<=0 || dpi>600) throw new IllegalArgumentException("DPI must be betweeen 1 and 600"); } else if (opt.equals("--model=bw")) { cm = PDFParser.getBlackAndWhiteColorModel(128); } else if (opt.startsWith("--model=bw")) { try { int threshold=Integer.parseInt(opt.substring(10)); cm = PDFParser.getBlackAndWhiteColorModel(threshold); } catch (NumberFormatException e) { throw new IllegalArgumentException("Black and white threshold \""+opt.substring(10)+"\" not between 1 and 255"); } } else if (opt.equals("--model=rgb")) { cm = PDFParser.RGB; } else if (opt.equals("--model=rgba")) { cm = PDFParser.RGBA; } else if (opt.equals("--model=cmyk")) { cm = PDFParser.CMYK; } else if (opt.equals("--model=gray")) { cm = PDFParser.GRAYSCALE; } else if (opt.equals("--format=tiff")) { format="tiff";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -