PDF BOXで任意の場所にOverlayする

最近、PDFをプログラムからいじいじしてます。
使用言語はKotlinで、ApachのPdfBoxを使ってます。

その中で、PDFとPDF同士を合成したいという要件あったんです。 どう実装しようかと、わーとドキュメント見るとOverlay ってクラスあるじゃん、これで合成できる! と思ってたんですが、よくよく見るとsetOverlayPosition(Overlay.Position overlayPosition) となっていて、 Overlay.Position も定数だぞ??
どうやって位置指定するんだ?となったので、その方法を残しときます。

Overlay Classを継承して、calculateAffineTransformをOverrideしたクラスを作るです。

calculateAffineTransformの実装を見てみると

    protected AffineTransform calculateAffineTransform(PDPage page, PDRectangle overlayMediaBox) {
        AffineTransform at = new AffineTransform();
        PDRectangle pageMediaBox = page.getMediaBox();
        float hShift = (pageMediaBox.getWidth() - overlayMediaBox.getWidth()) / 2.0F;
        float vShift = (pageMediaBox.getHeight() - overlayMediaBox.getHeight()) / 2.0F;
        at.translate((double)hShift, (double)vShift);
        return at;
    }

AffineTransform を生成して、ページの中央に配置するという処理が入っているのがわかるかと思います。 このAffine変換を独自で実装するとPDFを任意の場所に配置できるってことですね。