⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdfsignatureappearance.java

📁 处理PDF
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
        PdfArray loc = new PdfArray();        loc.add(new PdfNumber(0));        loc.add(new PdfNumber(0));        reference.put(new PdfName("DigestLocation"), loc);        reference.put(new PdfName("DigestMethod"), new PdfName("MD5"));        reference.put(PdfName.DATA, writer.reader.getTrailer().get(PdfName.ROOT));        PdfArray types = new PdfArray();        types.add(reference);        crypto.put(PdfName.REFERENCE, types);    }        /**     * Gets the document bytes that are hashable when using external signatures. The general sequence is:     * preClose(), getRangeStream() and close().     * <p>     * @return the document bytes that are hashable     */        public InputStream getRangeStream() {        return new PdfSignatureAppearance.RangeStream(raf, bout, range);    }        /**     * Gets the user made signature dictionary. This is the dictionary at the /V key.     * @return the user made signature dictionary     */        public com.lowagie.text.pdf.PdfDictionary getCryptoDictionary() {        return cryptoDictionary;    }        /**     * Sets a user made signature dictionary. This is the dictionary at the /V key.     * @param cryptoDictionary a user made signature dictionary     */        public void setCryptoDictionary(com.lowagie.text.pdf.PdfDictionary cryptoDictionary) {        this.cryptoDictionary = cryptoDictionary;    }        /**     * Gets the <CODE>PdfStamper</CODE> associated with this instance.     * @return the <CODE>PdfStamper</CODE> associated with this instance     */        public com.lowagie.text.pdf.PdfStamper getStamper() {        return stamper;    }        void setStamper(com.lowagie.text.pdf.PdfStamper stamper) {        this.stamper = stamper;    }        /**     * Checks if the document is in the process of closing.     * @return <CODE>true</CODE> if the document is in the process of closing,     * <CODE>false</CODE> otherwise     */        public boolean isPreClosed() {        return preClosed;    }        /**     * Gets the instance of the standard signature dictionary. This instance     * is only available after pre close.     * <p>     * The main use is to insert external signatures.     * @return the instance of the standard signature dictionary     */        public com.lowagie.text.pdf.PdfSigGenericPKCS getSigStandard() {        return sigStandard;    }        /**     * Gets the signing contact.     * @return the signing contact     */    public String getContact() {        return this.contact;    }        /**     * Sets the signing contact.     * @param contact the signing contact     */    public void setContact(String contact) {        this.contact = contact;    }        /**     * Gets the n2 and n4 layer font.     * @return the n2 and n4 layer font     */    public Font getLayer2Font() {        return this.layer2Font;    }        /**     * Sets the n2 and n4 layer font. If the font size is zero, auto-fit will be used.     * @param layer2Font the n2 and n4 font     */    public void setLayer2Font(Font layer2Font) {        this.layer2Font = layer2Font;    }        /**     * Gets the Acrobat 6.0 layer mode.     * @return the Acrobat 6.0 layer mode     */    public boolean isAcro6Layers() {        return this.acro6Layers;    }        /**     * Acrobat 6.0 and higher recommends that only layer n2 and n4 be present. This method sets that mode.     * @param acro6Layers if <code>true</code> only the layers n2 and n4 will be present     */    public void setAcro6Layers(boolean acro6Layers) {        this.acro6Layers = acro6Layers;    }        /** Sets the run direction in the n2 and n4 layer.      * @param runDirection the run direction     */        public void setRunDirection(int runDirection) {        if (runDirection < PdfWriter.RUN_DIRECTION_DEFAULT || runDirection > PdfWriter.RUN_DIRECTION_RTL)            throw new RuntimeException("Invalid run direction: " + runDirection);        this.runDirection = runDirection;    }        /** Gets the run direction.     * @return the run direction     */        public int getRunDirection() {        return runDirection;    }        /**     * Getter for property signatureEvent.     * @return Value of property signatureEvent.     */    public SignatureEvent getSignatureEvent() {        return this.signatureEvent;    }        /**     * Sets the signature event to allow modification of the signature dictionary.     * @param signatureEvent the signature event     */    public void setSignatureEvent(SignatureEvent signatureEvent) {        this.signatureEvent = signatureEvent;    }        /**     * Gets the background image for the layer 2.     * @return the background image for the layer 2     */    public Image getImage() {        return this.image;    }        /**     * Sets the background image for the layer 2.     * @param image the background image for the layer 2     */    public void setImage(Image image) {        this.image = image;    }        /**     * Gets the scaling to be applied to the background image.     * @return the scaling to be applied to the background image     */    public float getImageScale() {        return this.imageScale;    }        /**     * Sets the scaling to be applied to the background image. If it's zero the image     * will fully fill the rectangle. If it's less than zero the image will fill the rectangle but     * will keep the proportions. If it's greater than zero that scaling will be applied.     * In any of the cases the image will always be centered. It's zero by default.     * @param imageScale the scaling to be applied to the background image     */    public void setImageScale(float imageScale) {        this.imageScale = imageScale;    }        /**     * Commands to draw a yellow question mark in a stream content     */        public static final String questionMark =         "% DSUnknown\n" +        "q\n" +        "1 G\n" +        "1 g\n" +        "0.1 0 0 0.1 9 0 cm\n" +        "0 J 0 j 4 M []0 d\n" +        "1 i \n" +        "0 g\n" +        "313 292 m\n" +        "313 404 325 453 432 529 c\n" +        "478 561 504 597 504 645 c\n" +        "504 736 440 760 391 760 c\n" +        "286 760 271 681 265 626 c\n" +        "265 625 l\n" +        "100 625 l\n" +        "100 828 253 898 381 898 c\n" +        "451 898 679 878 679 650 c\n" +        "679 555 628 499 538 435 c\n" +        "488 399 467 376 467 292 c\n" +        "313 292 l\n" +        "h\n" +        "308 214 170 -164 re\n" +        "f\n" +        "0.44 G\n" +        "1.2 w\n" +        "1 1 0.4 rg\n" +        "287 318 m\n" +        "287 430 299 479 406 555 c\n" +        "451 587 478 623 478 671 c\n" +        "478 762 414 786 365 786 c\n" +        "260 786 245 707 239 652 c\n" +        "239 651 l\n" +        "74 651 l\n" +        "74 854 227 924 355 924 c\n" +        "425 924 653 904 653 676 c\n" +        "653 581 602 525 512 461 c\n" +        "462 425 441 402 441 318 c\n" +        "287 318 l\n" +        "h\n" +        "282 240 170 -164 re\n" +        "B\n" +        "Q\n";        /**     * Holds value of property contact.     */    private String contact;        /**     * Holds value of property layer2Font.     */    private Font layer2Font;        /**     * Holds value of property layer4Text.     */    private String layer4Text;        /**     * Holds value of property acro6Layers.     */    private boolean acro6Layers;        /**     * Holds value of property runDirection.     */    private int runDirection = PdfWriter.RUN_DIRECTION_NO_BIDI;        /**     * Holds value of property signatureEvent.     */    private SignatureEvent signatureEvent;        /**     * Holds value of property image.     */    private Image image;        /**     * Holds value of property imageScale.     */    private float imageScale;        /**     *     */        private static class RangeStream extends InputStream {        private byte b[] = new byte[1];        private RandomAccessFile raf;        private byte bout[];        private int range[];        private int rangePosition = 0;                private RangeStream(RandomAccessFile raf, byte bout[], int range[]) {            this.raf = raf;            this.bout = bout;            this.range = range;        }                /**         * @see java.io.InputStream#read()         */        public int read() throws IOException {            int n = read(b);            if (n != 1)                return -1;            return b[0] & 0xff;        }                /**         * @see java.io.InputStream#read(byte[], int, int)         */        public int read(byte[] b, int off, int len) throws IOException {            if (b == null) {                throw new NullPointerException();            } else if ((off < 0) || (off > b.length) || (len < 0) ||            ((off + len) > b.length) || ((off + len) < 0)) {                throw new IndexOutOfBoundsException();            } else if (len == 0) {                return 0;            }            if (rangePosition >= range[range.length - 2] + range[range.length - 1]) {                return -1;            }            for (int k = 0; k < range.length; k += 2) {                int start = range[k];                int end = start + range[k + 1];                if (rangePosition < start)                    rangePosition = start;                if (rangePosition >= start && rangePosition < end) {                    int lenf = Math.min(len, end - rangePosition);                    if (raf == null)                        System.arraycopy(bout, rangePosition, b, off, lenf);                    else {                        raf.seek(rangePosition);                        raf.readFully(b, off, lenf);                    }                    rangePosition += lenf;                    return lenf;                }            }            return -1;        }    }        /**     * An interface to retrieve the signature dictionary for modification.     */        public interface SignatureEvent {        /**         * Allows modification of the signature dictionary.         * @param sig the signature dictionary         */                public void getSignatureDictionary(PdfDictionary sig);    }    private int certificationLevel = NOT_CERTIFIED;    /**     * Gets the certified status of this document.     * @return the certified status     */    public int getCertificationLevel() {        return this.certificationLevel;    }    /**     * Sets the document type to certified instead of simply signed.     * @param certificationLevel the values can be: <code>NOT_CERTIFIED</code>, <code>CERTIFIED_NO_CHANGES_ALLOWED</code>,     * <code>CERTIFIED_FORM_FILLING</code> and <code>CERTIFIED_FORM_FILLING_AND_ANNOTATIONS</code>     */    public void setCertificationLevel(int certificationLevel) {        this.certificationLevel = certificationLevel;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -