2011-06-22 6 views
1

私は、次のパラメータに既存のPDFファイルをプリフライトするタスクがあります。プリフライトPDF-ファイル

  1. 従っ埋め込みフォントとテキストレイヤーで使用されるフォントを。
  2. ドキュメントの物理的なサイズ(幅と高さ(mm))。
  3. 各画像レイヤーおよびドキュメント全体のカラープロファイル。
  4. 文書のブリード/トリム/アートボックス。

私はそれを.netフレームワークで行う必要があります。 提案がありますか?

答えて

0

iTextをご覧になるか、popplerに基づいて独自のソリューションを実装してください。これにより、実際に低レベルのpdfドキュメントにアクセスできます。

+0

iTextは、「本当に低レベルのpdfドキュメントへのアクセス」も提供します。 –

+0

@マーク良いことを知って、私は少しそれを演奏したが、すべての問題を把握していない。 – p4553d

0

私はバイアスされています(コミッター)が、私はiTextを使用することをお勧めします。

「レイヤー」という言葉を使用すると、PDFで通常「レイヤー」が意味することを意味するわけではありません。

PDFでは、レイヤーは「オプションのコンテンツグループ」とも呼ばれます。与えられたページの一部で、ロジックのさまざまなビット(現在のズームレベルなど)を使用してオンとオフを切り替えることができます。

PDFのテキストと画像は、任意の深度/ Zの順序を持​​つことができます。テキストはイメージの上に置くことができます。これは他のテキストと重なり合うことがあり、他のイメージに上書きすることができます。そのようなことはあまり頻繁に起こることはありませんが、が可能です。です。

私が理解しているのはです。座標&は、すべてのテキストと指定されたページの画像の状態をグラフィックにします。

かなり新しいparserパッケージのおかげで、iTextはこれを行うことができます。特に、RenderListenerPdfReaderContentParserがあります。

あなたのrenderTextとrenderImageの実装では、必要なものすべてを保存/検査します。

これは、1と3の方法のほとんどを得ます。色/埋め込み情報を掘り起こすには、PdfDictionaryなどの低レベルの切り取りと、PDF Specificationの知識が必要です。

数字2と4は、あなたの言い方に基づいてちょっとファンキーですが、現実はかなり単純です。

  1. メディアボックス:ページの初期サイズ

    PDFページは、5つの箱を持つことができます。必須

  2. クロップボックス:完成したページのサイズ。オプションで、明示的に定義されていない場合は、メディアボックスがデフォルトになります。
  3. トリムボックス:トリミングボックスではない他のプリンタ仕上げのもの。オプションで、デフォルトではクロップボックスになります。
  4. アートボックス:ページ(または何か)に表示されるすべてを含む境界ボックスは、デフォルトではクロップボックスになります。
  5. 裁断されたボックス:他の印刷物は、(あなたが推測した!)クロップボックスにデフォルト設定されています。

これらの「Xへのデフォルト」はすべて暗黙的です。トリムボックスを要求すると、 "null"が表示されることがあります。この場合、トリミングボックスを確認するのは自分の責任です。もう一度ヌルを取得したら、メディアボックスをチェックする必要があります。

物理的な寸法を尋ねるときには、メディアボックス、クロップボックス、またはトリムボックスを意味する可能性があります(ただし、明示的に後で言及するので疑いがあります)。

これらの他のボックスの1つを知りたいときは、その値が存在しないときの状態を知る必要があります。

これは理論です。ナットとボルトの時間(Java):

Rectangle[] getBoxen(PdfReader reader, int pageINDEX) { 
    Rectangle retRects[] = new Rectangle[5]; 
    retRects[0] = reader.getBoxSize(pageINDEX, "media"); 
    retRects[1] = reader.getBoxSize(pageINDEX, "crop"); 
    retRects[2] = reader.getBoxSize(pageINDEX, "trim"); 
    retRects[3] = reader.getBoxSize(pageINDEX, "art"); 
    retRects[4] = reader.getBoxSize(pageINDEX, "bleed"); 

    // handle defaults 

    // crop box defaults to media box 
    if (retRects[1] == null) { 
    retRects[1] = retRects[0]; 
    } 

    // everything else defaults to the crop box 
    for (int i = 2; i < 4; ++i) { 
    if (retRects[i] == null) { 
     retRects[i] = retRects[1]; 
    } 
    } 

    return retRects; 
} 
+0

あなたの答えをありがとうございますが、iTextは商用のSaaSアプリケーションには高価です。 QuickPDFやPDFClownのようなロイヤリティフリーのコンポーネントが必要です。 – Victor

+0

出力にアクセスできるのは内部だけです。そうでなければ...ウェルル...あまりそうではありません。 –