元の質問へのコメントによると、知りたいのは
ページの上、左、右などに署名を入れるようにプログラムに指示する方法。
次のようなルーチンを使用すると仮定します。
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);
}
( Bruno Lowagie (iText Software) によるPDF ドキュメントのデジタル署名に関するホワイト ペーパーのコード サンプル 2.1 )
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");