1

PDFドキュメントのページを前提として、objetive-Cを使用してテキストの余白を見つけられるようにしたいと思います。

に関連する質問はすでにたくさんあるCGPDF...と思いますが、役に立つものは何も見つかりませんでした。PDF仕様書もご覧になりました。どこかにあるはずなのに、まだ見つけられません。

左右の余白がそれぞれ2.5cmのWord文書を作成します。次に、PDFに印刷します。このPDFを使用して、テキストの幅(つまり、左右のページ余白)を把握する方法はありますか?

バックグラウンド

私が間違った木を吠えている場合、私がこの質問をしている理由は、iBooksのズームのようにズームできるようにするためです。iBooksをダブルタップすると、本体の幅にズームします。これは、Macのプレビューアプリケーションでも同じです([ズームして合わせる]を押す)。

最初の考え

私は最初、多分PDF BoxesCGPDFPage)likekCGPDFBleedBoxが役立つかもしれないと思いましたが、私の場合は役に立たないようです。

アップデート

私はページの本文だけに関心があります。これの外にあるかもしれない画像などは、私を悩ませません。

関連記事

iPhone / iPad / iOS用の高速で無駄のないPDFビューア-ヒントとヒント?

4

3 に答える 3

4

私はAppleの「ZoomtoFit」機能とその正確な動作に精通していません(ただし、その最も重要な特性は想像できます)...

MediaBox異なる*Box値( 、、、、および(非推奨))に依存する場合の潜在的な欠点の1つは、CropBox実際のTrimBox空白戻り値とは異なる(ほとんどの場合は大きい)可能性があることです。BleedBoxArtBox

Ghostscriptには、bboxすべてのページのレンダリングされたコンテンツの「バウンディングボックス」を返すという特別なデバイスがあります。例:

gswin32c.exe ^
   -o nul: ^
   -sDEVICE=bbox ^
    input.pdf

戻り値(ランダムな3ページの例では、このコマンドを試してみました):

%%BoundingBox: 86 122 509 719
%%HiResBoundingBox: 86.993997 122.993996 508.013984 718.001978
%%BoundingBox: 103 199 152 271
%%HiResBoundingBox: 103.408098 199.998064 151.107956 270.897953
%%BoundingBox: 103 195 185 271
%%HiResBoundingBox: 103.208059 195.000041 184.000002 270.897953

高精度のHiResBoundingBox値はおそらく無視してかまいません。これにより、次のことが可能になります。

%%BoundingBox: 86 122 509 719
%%BoundingBox: 103 199 152 271
%%BoundingBox: 103 195 185 271

これらの4つの値は、左下隅と右上隅の座標、またはレンダリングされたすべてのピクセルを囲む長方形を表します。単位はPostScriptポイント(72 points == 1 inch)です。

これを:*Boxによって返される値と比較します。pdfinfo.exe

pdfinfo ^
  -f 1 ^
  -l 3 ^
  -box ^
   input.pdf
 [....]
 Page    1 size: 421 x 595 pts (A5)
 Page    2 size: 421 x 595 pts (A5)
 Page    3 size: 92 x 80 pts

 Page    1 MediaBox:     0.00     0.00   595.00   842.00
 Page    1 CropBox:     87.00   123.00   508.00   718.00
 Page    1 BleedBox:    87.00   123.00   508.00   718.00
 Page    1 TrimBox:     87.00   123.00   508.00   718.00
 Page    1 ArtBox:      87.00   123.00   508.00   718.00

 Page    2 MediaBox:     0.00     0.00   595.00   842.00
 Page    2 CropBox:     87.00   123.00   508.00   718.00
 Page    2 BleedBox:    87.00   123.00   508.00   718.00
 Page    2 TrimBox:     87.00   123.00   508.00   718.00
 Page    2 ArtBox:      87.00   123.00   508.00   718.00

 Page    3 MediaBox:     0.00     0.00   595.00   842.00
 Page    3 CropBox:     92.00   194.00   184.00   274.00
 Page    3 BleedBox:    92.00   194.00   184.00   274.00
 Page    3 TrimBox:     92.00   194.00   184.00   274.00
 Page    3 ArtBox:      92.00   194.00   184.00   274.00
 [...]

更新:これは、上記の違いを示すために使用したPDFドキュメントの3ページのサムネイルを示すスクリーンショットです。

ページサイズと*ボックスが異なる3ページのPDF

于 2011-06-20T13:04:26.440 に答える
1

PDFページをビットマップとしてレンダリングし、そのピクセルステータスを検出して、白い余白を取得できます。Skimからのこの優れた実装を見てください:http ://skim-app.svn.sourceforge.net/viewvc/skim-app/trunk/NSBitmapImageRep_SKExtensions.m?revision = 7036&content-type = text%2Fplain

于 2011-06-19T10:51:35.260 に答える
0

CGPDFのドキュメントによると、コンテンツの保持、印刷、トリミング、トリミングなどの領域を定義する最大4つのコンテンツボックスを取得できます。CGPDFPageGetBoxRect()これらのボックスを取得するには、関数を使用します。それらの正確な目的がわからないので、これはあなたが必要とするボックスについての私の推測です:

CGRect mediaBox = CGPDFPageGetBoxRect(pageRef, kCGPDFMediaBox);
CGRect cropBox = CGPDFPageGetBoxRect(pageRef, kCGPDFCropBox);
CGFloat leftMargin = CGRectGetMinX(cropBox) - CGRectGetMinX(mediaBox);

言い換えると、ページの境界とコンテンツの長方形の境界を取得し、それらに対して計算を行います。各ボックスが何を表しているのかがわかったら、それほど難しくはありません。

于 2011-06-20T12:21:51.920 に答える