PDFパーサーをC#で作成しようとしていますが、仕様の解釈方法がわからない問題があります。PDF仕様 - ポイントでのフォントサイズの取得
特に指定のない限り、PDFドキュメントのユーザースペースは1/72インチ(つまり1pt)です。
Tf
オペレータによって提供されるスケールは、フォントを標準サイズ(通常は1単位のユーザースペース/ 1pt)から正しい表示サイズに調整します。
私は、次のページのコンテンツを持っている:
1 0 0 -1 0 792 cm
q
0 0 612 792 re
W* n
q
.75 0 0 .75 0 0 cm
1 1 1 RG 1 1 1 rg
/G0 gs
0 0 816 1056 re
f
0 0 816 1056 re
f
0 0 816 1056 re
f
Q
Q
q
0 0 612 791.25 re
W* n
q
.75 0 0 .75 0 0 cm
1 1 1 RG 1 1 1 rg
/G0 gs
0 0 816 1055 re
f
0 96 816 960 re
f
0 0 0 RG 0 0 0 rg
BT
/F0 21.33 Tf
1 0 0 -1 0 140 Tm
96 0 Td <0037> Tj
13.0280762 0 Td <004B> Tj
11.8616943 0 Td <004C> Tj
4.7384338 0 Td <0056> Tj
ET
BT
/F1 21.33 Tf
1 0 0 -1 0 140 Tm
136.292267 0 Td <0001> Tj
ET
...
私はサンプルで定義された2つのテキスト操作のポイント単位でのフォントサイズがしかし、Tfの演算子は21.33のサイズを使用している16ポイントであることを知っています。バック私はポイントサイズを作るセンチオペレータの規模(y)を使用するように意図されたポイントにこのフォントサイズから変換するために:私は、この変換をサポートするPDFの仕様では何も見つけることができませんでしたしかし
21.33 * 0.75 = 15.9975
と私がチェックしたライブラリ(PDFBox、iTextSharp、Spire PDF)のどれもが21.33以外のものとしてフォントサイズをリストしていませんでした。
CTM(cm演算子で定義)を使用して、フォントサイズを正しいスケールにスケールするか、これはちょうどいいチャンスですか?
pdfファイルはこちらです:すべてのhttps://github.com/UglyToad/PdfPig/blob/master/src/UglyToad.PdfPig.Tests/Integration/Documents/Single%20Page%20Simple%20-%20from%20google%20drive.pdf
'cm'操作*連結*するので、最初のスケール演算の係数 '0.75'は' Tf'演算子が処理されます。それは実際に変換ではありません。 *すべての*グラフィック操作は行列を使用して行われます。 – usr2564301
フォントサイズのスケーリングを行列演算として表現する方法はありますか?スカラー値なので、行列で乗算することはできません。問題の例ではscaleX = 0.75の値とscaleY = -0.75(負の値)なので、Xスケールで掛けるのが理にかなっていますが、そうすることの正当性を理解することはできません。 – Underscore