2011-06-22 65 views
1

我有任務在預檢以下參數現有的PDF文件:預檢PDF的文件

  1. 按照嵌入字體和文本層中使用的字體;
  2. 文件的物理尺寸(寬度和高度,以毫米爲單位)。
  3. 每個圖像層和整個文檔的顏色配置文件。
  4. 文件的出血/修剪/藝術框。

我需要用.net框架來做到這一點。 有什麼建議嗎?

回答

0

看一看iText或者您可以根據poppler實施您自己的解決方案,它可以讓您真正對pdf文檔進行低級訪問。

+0

iText爲您提供了「真正低級別的pdf文檔訪問」。 –

+0

@Mark Ok,很高興知道,我確實玩過一點點,但沒有想出所有問題。 – p4553d

0

我很有偏見(提交者),但我建議你使用iText。

您對「圖層」這個詞的使用使我相信您並不是指(或理解)「圖層」在PDF中的含義。

在PDF中,圖層也被稱爲「可選內容組」。可以使用各種邏輯位(例如當前縮放級別)來打開和關閉給定頁面的部分。

PDF中的文本和圖像可以具有任意深度/ Z順序。文字可以位於圖像的頂部,可以與其他文字重疊,可以在其他圖像上繪製這些文字,這可以讓您明白。它不經常發生(如果有的話),但它可能是

但是我對想要問什麼的理解是,您希望座標&圖形狀態的每個文本和圖像在給定的頁面上。

iText可以做到這一點,這要感謝相當新的parser包。特別是,PdfReaderContentParser與自定義RenderListener

在renderText和renderImage的實現中,您可以存儲/檢查所需的所有內容。

這會讓你大部分時間到1和3.挖掘顏色/嵌入信息將需要一些低水平的PdfDictionary等,以及一些關於PDF Specification的知識。

2號和4號根據你如何描述它們而有點時髦,但實際情況非常簡單。

PDF頁面可以有5個不同的盒子:

  1. 媒體專欄:頁面的初始大小。必需
  2. 裁切框:完成頁面的大小。可選,如果未明確定義,則默認爲媒體框。
  3. 修剪框:某些其他打印機整理不是裁剪框的東西。可選,默認爲裁剪框。
  4. 藝術框:包含頁面上可見內容的邊界框(或其他),默認爲裁剪框。
  5. 出血框:其他一些印刷物,默認爲(你猜對了!)裁剪框。

所有這些「默認爲X」是隱含的。如果您要求裝飾框,我可能會得到「空白」,在這種情況下,我的責任是檢查裁剪框。如果我再次得到空,那麼我需要檢查媒體框。因此,當您詢問物理尺寸時,您可能指的是媒體盒或裁剪框......或者甚至可能是裁切框(雖然我懷疑它是因爲您稍後明確提及它)。

而當你想知道其中一個盒子時,你需要知道它是什麼時候該值不存在。

好吧,這就是理論。螺紋和螺栓時間(以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

如果唯一可以訪問輸出的人是內部人員,那麼您的金錢。如果不是... welll ...不是那麼多。 –