3

私はたくさんのPDFファイルを持っています-私はこれらを要求に応じてバイト配列に読み込み、それをiTextSharpPdfReaderインスタンスに渡します。次に、各ページのサイズをピクセル単位で取得します。私がこれまで読んだことから、PDFファイルはポイントで機能しているように見えます。ポイントは、UserUnitと呼ばれる要素のある種の辞書に格納されている構成可能なユニットです。

PDFファイルをPdfReaderにロードし、各ページのUserUnitを取得するために何をする必要がありますか(明らかにページごとに異なる可能性があります)、ページのサイズをピクセル単位で取得できます。

現在、私はこのコードを持っています。これは、各ページの寸法を「ポイント」で取得します。UerUnitが必要なだけだと思います。次に、これらの寸法にそれを掛けて、ピクセルなどを取得できます。

//Create an object to read the PDF
PdfReader reader = new iTextSharp.text.pdf.PdfReader(file_content);

for (int i = 1; i <= reader.NumberOfPages; i++)
{
  Rectangle dim = reader.GetPageSize(i);
  int[] xy = new int[] { (int)dim.Width, (int)dim.Height };  // returns page size in "points"
  page_data[objectid + '-' + i] = xy;
}

乾杯!

4

1 に答える 1

5

私の本から引用させてください:

iText in Action - 第 2 版、9 ページ:

FAQ PDF文書の測定単位は何ですか? PDF の測定値のほとんどは、ユーザー空間単位で表されます。ISO-32000-1 (セクション 8.3.2.3) は次のように述べています。業界。まったく同じではありません。点の普遍的な定義はありません。」つまり、1 インチ = 25.4 mm = 72 ユーザー単位 (おおよそ 72 pt に相当) です。

次のページでは、ユーザー単位のデフォルト値を変更できることを説明し、ユーザー単位が異なるページを含むドキュメントを作成する方法の例を追加します。

ここで質問です。既存の PDF があるとします。どのユーザー ユニットが使用されているかをどのように見つけますか? これに答える前に、ISO-32000-1 を確認する必要があります。

セクション 7.7.3.3Page オブジェクトでは、表 30「ページ オブジェクトのエントリ」に UserUnit の説明があります。

(オプション; PDF 1.6) デフォルトのユーザー空間単位のサイズを 1⁄72 インチの倍数で示す正の数。サポートされる値の範囲は、実装に依存するものとします。デフォルト値: 1.0 (ユーザー空間単位は 1⁄72 インチ)。

このキーは PDF 1.6 で導入されました。古いファイルにはありません。これはオプションであるため、すべてのページ辞書で常に見つかるとは限りません。私の著書では、UserUnit キーの最大値が 75,000 であることも説明しています。

iTextSharp でこの値を取得する方法は?

Rectangle dim = reader.GetPageSize(i);MediaBox を返すものは既にあります。これは、ページのビジュアル部分のサイズではない場合があります。ページに CropBox が定義されている場合、ビューアーには現在のサイズよりもはるかに小さいサイズが表示されますxy(ただし、おそらく既にご存じでしょう)。

ここで必要なのは、UserUnit キーの値を取得できるようにするためのページ ディクショナリです。

PdfDictionary pageDict = reader.GetPageN(i);
PdfNumber userUnit = pageDict.GetAsNumber(PdfName.USERUNIT);

ほとんどの場合、userUnit は になりますnullが、そうでない場合は を使用できますuserUnit.FloatValue

于 2013-01-29T17:26:32.367 に答える