我有任務在預檢以下參數現有的PDF文件:預檢PDF的文件
- 按照嵌入字體和文本層中使用的字體;
- 文件的物理尺寸(寬度和高度,以毫米爲單位)。
- 每個圖像層和整個文檔的顏色配置文件。
- 文件的出血/修剪/藝術框。
我需要用.net框架來做到這一點。 有什麼建議嗎?
我有任務在預檢以下參數現有的PDF文件:預檢PDF的文件
我需要用.net框架來做到這一點。 有什麼建議嗎?
我很有偏見(提交者),但我建議你使用iText。
您對「圖層」這個詞的使用使我相信您並不是指(或理解)「圖層」在PDF中的含義。
在PDF中,圖層也被稱爲「可選內容組」。可以使用各種邏輯位(例如當前縮放級別)來打開和關閉給定頁面的部分。
PDF中的文本和圖像可以具有任意深度/ Z順序。文字可以位於圖像的頂部,可以與其他文字重疊,可以在其他圖像上繪製這些文字,這可以讓您明白。它不經常發生(如果有的話),但它可能是。
但是我對想要問什麼的理解是,您希望座標&圖形狀態的每個文本和圖像在給定的頁面上。
iText可以做到這一點,這要感謝相當新的parser包。特別是,PdfReaderContentParser與自定義RenderListener。
在renderText和renderImage的實現中,您可以存儲/檢查所需的所有內容。
這會讓你大部分時間到1和3.挖掘顏色/嵌入信息將需要一些低水平的PdfDictionary
等,以及一些關於PDF Specification的知識。
2號和4號根據你如何描述它們而有點時髦,但實際情況非常簡單。
PDF頁面可以有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;
}
謝謝您的回答,但是iText對於商業Saas應用程序來說是昂貴的。我需要免版稅的組件,如QuickPDF或PDFClown。 – Victor
如果唯一可以訪問輸出的人是內部人員,那麼您的金錢。如果不是... welll ...不是那麼多。 –
iText爲您提供了「真正低級別的pdf文檔訪問」。 –
@Mark Ok,很高興知道,我確實玩過一點點,但沒有想出所有問題。 – p4553d