В соответствии с вашими комментариями к первоначальному вопросу, вы хотите знать,
как сказать программе поставить подпись в верхнем, левом, правом ... и т. Д. Страницы.
Я предполагаю, что вы используете процедуру так:
public void sign(String src, String dest,
Certificate[] chain, PrivateKey pk, String digestAlgorithm, String provider,
CryptoStandard subfilter, String reason, String location)
throws GeneralSecurityException, IOException, DocumentException {
// Creating the reader and the stamper
PdfReader reader = new PdfReader(src);
FileOutputStream os = new FileOutputStream(dest);
PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
// Creating the appearance
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
appearance.setReason(reason);
appearance.setLocation(location);
appearance.setVisibleSignature(new Rectangle(36, 748, 144, 780), 1, "sig");
// Creating the signature
ExternalDigest digest = new BouncyCastleDigest();
ExternalSignature signature =
new PrivateKeySignature(pk, digestAlgorithm, provider);
MakeSignature.signDetached(appearance, digest, signature, chain,
null, null, null, 0, subfilter);
}
(код образца 2.1 из Белой книги Digital Signatures for PDF documents Бруно Lowagie (IText Software))
и хотите отрегулировать Rectangle
в строке
appearance.setVisibleSignature(new Rectangle(36, 748, 144, 780), 1, "sig");
в соответствии с вашими требованиями.
Координаты в этом прямоугольнике даны относительно системы координат на странице, которую вы подписываете. Вы можете получить данные, определяющие эту систему координат, используя метод PdfReader
getCropBox(int index)
(index
: номер страницы. Первая страница - 1).
Rectangle cropBox = reader.getCropBox(1);
Кроме того, вам необходимо знать ширину и высоту вашей подписи. Например.
float width = 108;
float height = 32;
С помощью этих данных можно вычислить Rectangle rectangle
например, как это:
// Top left
rectangle = new Rectangle(cropBox.getLeft(), cropBox.getTop(height),
cropBox.getLeft(width), cropBox.getTop());
// Top right
rectangle = new Rectangle(cropBox.getRight(width), cropBox.getTop(height),
cropBox.getRight(), cropBox.getTop());
// Bottom left
rectangle = new Rectangle(cropBox.getLeft(), cropBox.getBottom(),
cropBox.getLeft(width), cropBox.getBottom(height));
// Bottom right
rectangle = new Rectangle(cropBox.getRight(width), cropBox.getBottom(),
cropBox.getRight(), cropBox.getBottom(height));
и использовать его, чтобы определить видимую позицию и размер подписи:
appearance.setVisibleSignature(rectangle, 1, "sig");
Если есть поле для подписи в файле, что поле имеет свойство '/ Rect', но вы не нужно знать это свойство, потому что вы можете использовать * имя * поля подписи, чтобы добавить видимую подпись.Если у вас нет поля подписи, ваш вопрос неясен. Как программа узнает, где вы хотите поставить подпись? Программа не может читать ваши мысли ;-) –
Нет, мой вопрос простыми словами, как я могу определить, где поставить подпись «в код». - У меня нет подписи. – Yassering
Я имею в виду, как сказать программе поставить подпись в верхней, левой, правой ... и т. Д. Страницы? – Yassering