JavaでPDFを出力する場合に、iTextというライブラリを使用することがあるかと思います。
iTextを使用してサーバ側でPDFを作成し、そのPDFをクライアント側にダウンロードするというのが定番ですが、このPDFに点線を描画する方法がなかなか見つからず困っていました。
結果的にはキャンバスで描画するという手法になりますが、ネットになかなか情報が載っていなかったので共有しておこうと思います。
iTextで点線を描画する方法
以下がソースコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/** * iTextで点線を描画する * @param canvas キャンバス * @param ablPositionXFrom X軸の始点 * @param ablPositionXEnd X軸の終点 * @param ablPositionY Y軸 * @param rowCount 行数(何行描画するか) * @param radius 半径 * @param dotPadding 点線の間 * @param rowPadding 行間 * @throws BadElementException */ public void createDottedLine(PdfContentByte canvas, float ablPositionXFrom, float ablPositionXEnd, float ablPositionY, int rowCount, float radius, float dotPadding, float rowPadding) throws BadElementException { for(int i = 0; i < rowCount; i++) { for(float width = ablPositionXFrom; width < ablPositionXEnd;) { canvas.circle(width, ablPositionY, radius); width += dotPadding; } ablPositionY += rowPadding; } canvas.fill(); } |
解説
基本的には指定された行数分ループし、点線を描画するだけです。
以下で点線をひたすら描画していきます。
1 |
canvas.circle(width, ablPositionY, radius); |
描画した結果、最後にキャンバスの埋め込みを行ないます。
1 |
canvas.fill(); |
まとめ
コード自体は簡単なのですが、iTextの情報が少ないので痒い所に手が届かない事が多いですね。
仕事の現場で点線を記述したいけどどうしたらいいか分からんと困っていたので、他にも困っている人もいるかと思います。
少しでも共有できることがあればどんどん載せていきますね。