2015-01-23 3 views
1

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

Solution :

  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"); 

Отсносящийся к этой интересной book, теперь я могу создать две области для описания и графики.

ответ

1

Прочтите Digital Signatures for PDF documents, раздел 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(); 

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

Вы можете использовать п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 сделать работу:

Screen shot digital signatures book

+0

Спасибо вам мистер Lowagie, на самом деле Цель состоит в том, чтобы получить дисплей подписи так: http://oi59.tinypic.com/2418k03.jpg – Angelika

+0

Это не ваш вопрос, но, к счастью, это также рассматривается в книге, на которую я ссылаюсь в своем ответе. –

+0

Было очень полезно г-н Лоуджи Спасибо! – Angelika