Как управлять отображением цифровой подписи PDF?

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

Решение:

            PdfStamper pdfStamper;
            pdfStamper = PdfStamper.createSignature(pdfReader, null, '\0',
                        outputFile);

            // appearance
            PdfSignatureAppearance appearance = pdfStamper
                        .getSignatureAppearance();
            appearance .setReason("Test");
            appearance .setLocation("Location");                                                                                                                                 
            appearance .setSignatureGraphic(Image.getInstance(RESOURCE)); 
            appearance.setRenderingMode(RenderingMode.GRAPHIC_AND_DESCRIPTION); appearance.setVisibleSignature(new Rectangle(420, 732, 512, 780), 1,"sign");

Ссылаясь на эту интересную книгу, теперь я могу создать две области для описания и графики.

1 ответ

Решение

Пожалуйста, прочитайте Цифровые подписи для документов PDF, раздел 2.4 "Создание различных подписей". Вы узнаете о слоях с n0 по n4 и обнаружите, что использование слоев n1, n3 и n4 больше не рекомендуется с 2003 года (другими словами: не используйте их).

Вы можете использовать слой n0, известный как фоновый слой следующим образом:

PdfTemplate n0 = appearance.getLayer(0);
float x = n0.getBoundingBox().getLeft();
float y = n0.getBoundingBox().getBottom();
float width = n0.getBoundingBox().getWidth();
float height = n0.getBoundingBox().getHeight();
n0.setColorFill(BaseColor.LIGHT_GRAY);
n0.rectangle(x, y, width, height);
n0.fill();

Это простой пример из книги, нарисованный светло-серым прямоугольником.

Вы можете использовать слой n 2 следующим образом:

PdfTemplate n2 = appearance.getLayer(2);
ColumnText ct = new ColumnText(n2);
ct.setSimpleColumn(n2.getBoundingBox());
Paragraph p = new Paragraph("This document was signed by Bruno Specimen.");
ct.addElement(p);
ct.go();

Если "рисование текста" слишком сложно, вы также можете использовать удобные методы, такие как:

appearance.setLayer2Text("This document was signed by Bruno Specimen");
appearance.setLayer2Font(new Font(FontFamily.TIMES_ROMAN));

Примеры из книги доступны на SourceForge.

Используя вышеперечисленные методы, создается внешний вид "трудным путем". Есть также разные способы, позволяющие iText выполнять свою работу:

Снимок экрана цифровой книги подписей

Другие вопросы по тегам