1

だから私はこの状況にあります:

pdftoxml.exesourceforge.netから使用して、テキストトークンとその座標を取得しました。pdfファイルが回転した場合(つまり/Rotate 90、ソースに書き込まれている場合)、pdftoxml.exeは、指定されたページの高さと幅、および指定されたオブジェクトのx座標とy座標を交換します。それが私が理解していることです。

re太い線を描いていたPDFファイルに出くわすまでは満足していました。つまり、太い線の場合は、この図のように4本の細い線が引かれ、スペースが埋められます。左側には、大きな長方形の一部である2本の細い線(色なし)が表示されます(大きく拡大されています)。私は実際に黒で満たされたその間のスペースを空にして、線を確認しました。

ここに画像の説明を入力してください

さらに、上記のpdfが回転します。したがってB、最終的に直立させるために、このtextmatrixが使用され0 1 -1 0 90.72 28.3705 Tmました。細い線はこのように描かれて83.04 27.891 0.48 0.48 reいます(座標はここでは異なる場合がありますが、それはそのような再操作でした。操作は次のようx y width height reになり、 adobeのpdf 1.7ページ133のre長方形用です)。ここで関連するのは、浮動小数点の問題のために丸められたり変更されたりしない計算です。これは行のxの正確な値であり、残念ながら、ハードコードされた'sxよりも大きくなります。27.891 + 0.48 = 28.371B28.3705

83.52 27.891 m 92.39999999999999 27.891 l s

92.39999999999999 27.891 m 92.39999999999999 28.371 l s

92.39999999999999 28.371 m 83.52 28.371 l s

83.52 28.371 m 83.52 27.891 l s

ページの座標は842 x 595,2、左上隅のPDFXChangeビューアに従って次のようになります。ページが回転しているので、これは自然なことのようです。回転していない場合は左下隅になるので、問題ないはずです。


テキストを1 0 0 1 90.72 28.3705 Tm元の方向に変更すると、下の行が折りたたまれて左側の線が表示されます。

ここに画像の説明を入力してください

B'syは28.3705andであり、行の水平位置は28.371(上記のコード行の2行目に見られるように)であるため、これは私が期待することです。したがって、probabylyBの収益はそれを超えて28.371いますが、ズームできませんでした。

Bさて、最初の写真の線と線の間のギャップはどこから来ていますか?これは私にとって重要です。なぜなら、左側の最も近い行をB見つけようとしていて、2つの値、つまりpdftoxml.exeから取得したテキストのsuppsed x値28.3705と、行の水平方向の値に驚いたからです。 28.371。私は線が実際には正しくない左をはるかに超えていることを知っていたのでB、少なくとも「線のx位置を取り、Bのx位置を取り、比較し、線のxがB「sx、線は左側にあります」。

x値で正しい行を見つけることができません。代わりに、左端にもう1行が表示されます...まるでテキストが2つの間にあるかのように。

これはテキスト描画コードです:

BT
%0 7.5 -7.5 0 90.72 28.3705 Tm
0 1 -1 0 90.72 28.3705 Tm
%1 0 0 1 90.72 28.3705 Tm
/F1 1 Tf
1 Tr
q
0.01 w
(B) Tj
Q
ET

したがって、Bのサイズや線の太さには何の問題もありません。

私が理解するのを手伝ってくれませんか?


Iこれは、同じページに2つが描かれた更新された画像で、上部は(数学的に90度回転)Iを使用し、下部は使用しています。わかりませんが、下部がどのように回転して上部になってしまうのでしょうか。0 1 -1 0 90.72 28.3705 Tm1 0 0 1 90.72 28.3705 TmI+90

これがPDFコードです。かなり大きいですが、ファイルにコピーしてsth.pdfという名前を付けることができるはずです。

ここに画像の説明を入力してください

PDFサンプル(実際に表示するには、左上隅を実際に大きく拡大する必要がありますI

編集私は実際にグリフバウンディングボックスを見つけることについていくつかの興味深い情報を見つけましたが、まだそれらをまとめることができませんでした。

4

1 に答える 1

2

をご覧ください

グリフ メトリック

グリフの原点は、グリフ座標系の点 (0, 0) です。Tj およびその他のテキスト表示演算子は、描画される最初のグリフの原点をテキスト スペースの原点に配置する必要があります。

(図 39、ISO 32000-1 のセクション 9.2.4から恥知らずにコピー)。

ご覧のとおり、グリフが配置されている座標 (グリフ原点) は、必ずしも実際のグリフ バウンディング ボックスの開始位置ではありません。これは、最初の画像のギャップを説明している可能性があります。

したがって、視覚的に B に最も近い左側の線を見つけようとしている場合、線の x 位置を取得し、B の x 位置を取得して比較し、線の x が B の x よりも小さい場合は十分ではありません。 x、行は左側にあります。代わりに、フォントデータ自体も考慮に入れ、グリフ原点とBで表されるグリフのグリフバウンディングボックスとの間のギャップを考慮する必要があります。

より詳細な分析を行うには、フォント データを提供してください。

double-I の質問に関する編集...上記のコメントでは、両方の I 文字で共通点 (回転点) が実際に表示されることを期待していると述べているため、左側のバウンディング ボックス側の信頼できる水平座標を取得できますキャラクターの。

ダブルIの状況

赤い線が交差する点があなたの回転点ではありませんか?これは両方の Tj 操作のグリフ起点である必要があり、I グリフの起点はそこにあります。これで、そこから測定できます。

于 2013-01-30T08:09:16.463 に答える