困ったこと

JavaでPDFファイルを扱うライブラリとしてPDFBoxを使ったが、単位系がよくわからない

そもそもポイント(pt)とは

Point (typography)
https://en.wikipedia.org/wiki/Point_(typography)

を読む限りは1ptは1/72inch, つまり0.35277777777777775 mmらしい
ちなみにポイント(pt)は更に複数の種類が存在するみたいだが、PDFやIllustlatorで扱うptはDTP Pointだったので、これからポイント(pt)といえばDTP Ptを指すことにする

実際に座標変換のコードを書く

以上を踏まえた上で、mm/inch,pt/inch,pt/mmを定義してやればあとは相互変換は"四則演算"で済む(キリッ

とりあえず今回はkotlinでミリからポイントへの変換とポイントからミリへの変換を提供することにした
あとはinch系やpx系も用意しようかと思ったが、今回は画像は扱わなかったので用意していない
これも同じようにpx/inchとか出せば簡単にできると思う


class MeasureUtil {
    companion object {
        private const val MM_PER_INCH = 25.4
        private const val POINTS_PER_INCH  = 72.0
        private const val POINTS_PER_MM    = 1 / MM_PER_INCH * POINTS_PER_INCH

        fun mm2pt(mm:Double):Double {
            return mm * POINTS_PER_MM
        }

        fun pt2mm(pt:Double):Double {
            return pt / POINTS_PER_INCH * MM_PER_INCH
        }
    }
}

ちなみに

PDFBoxというかPDFの座標系って、Xは左が0はじまりでYは下が0はじまりです
つまりY=0に印字すると一番上ではなくて一番下側に印字されるので割と混乱します
まぁこれは慣れなんですが何も考えずに上から順に描画しようとしてY=0とすると期待通りの描画にならないです