iTextPDF Подпись: как не показывать поля подписи, а показывать изображение - PullRequest
0 голосов
/ 18 октября 2019

Я использую itextpdf-5 для подписи на PDF. Я хотел бы подписать документ, но сделать невидимыми все поля (причина, местоположение), кроме изображения. Я могу сделать это в сторонней программе (прилагаю пример такого PDF: подпись хранит все данные, но не отображает). Я не нашел ничего подобного в документации, чтобы сделать это в моей программе (я прилагаю пример кода)

Пример PDF со скрытыми данными

 private static void emptySignature(String src, String dest, String sigName, int page, int x, int y) {
    try {
        Image image = Image.getInstance(new File(currentPatient.getCurrentSign().getLocalFilePath()).toURL());;
        PdfReader reader = new PdfReader(src);
        FileOutputStream os = new FileOutputStream(dest);
        PdfStamper stamper = PdfStamper.createSignature(reader,os,'\0',new File("data/results/temp"),true);

        PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
        appearance.setVisibleSignature(new Rectangle(x,y,x+80,y-60),page,sigName); 
        //Hide it!
        appearance.setReason("Nikita");
        appearance.setLocation("Sanitas");
        //No hide
        appearance.setImage(image);

        ExternalSignatureContainer external = new ExternalBlankSignatureContainer(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED);
        MakeSignature.signExternalContainer(appearance,external,8192);
        os.close();
        reader.close();
        stamper.close();
    } catch (Exception ex) {}
}

1 Ответ

0 голосов
/ 18 октября 2019

PdfSignatureAppearance имеет установщик setRenderingMode с параметром RenderingMode. RenderingMode - это перечисление со следующими значениями:

public enum RenderingMode {
    /**
     * The rendering mode is just the description.
     */
    DESCRIPTION,
    /**
     * The rendering mode is the name of the signer and the description.
     */
    NAME_AND_DESCRIPTION,
    /**
     * The rendering mode is an image and the description.
     */
    GRAPHIC_AND_DESCRIPTION,
    /**
     * The rendering mode is just an image.
     */
    GRAPHIC
}

Чтобы сделать невидимыми все поля (причина, местоположение), кроме изображения, , поэтому просто установите режим рендеринга на GRAPHIC:

appearance.setRenderingMode(RenderingMode.GRAPHIC);
...