2011-02-15 89 views
2

我有一些用戶提供的pdf文檔存在問題。它們是從3d軟件包創建的,基本上是一個巨大的矢量線列表,需要時間和渲染時間(超過60秒)。獲取PDF文檔中的文檔向量計數?

如何使用iTextSharp (5.0.5)生成PDF文檔中存在的向量行數的報告?

我可以獲取文本和圖像數據,但無法看到哪裏得到處理向量。他們似乎並不像一個形象。

回答

1

iText的[夏普]的解析器包中尚未辦理了lineTo或curveTo命令中有用的博客文章。這是一個目標,但目前還沒有足夠重要的目標。其他的事情正在得到關注。

如果你覺得冒險,你應該檢查出PdfContentStreamProcessor。在一個私有函數populateOperators中,有一長串當前處理的命令(以某種方式或另一種方式)。

您需要爲所有線條藝術命令(moveTo,lineTo,rect,stroke,fill,clip)編寫類似的命令類,並以某種方式公開它們。實際上,如果你想要做的只是COUNT路徑的數量,你可以實現筆畫並填充以增加一些靜態整數[s],然後在解析後檢查它們。應該相當簡單(我用Java編寫,但翻譯起來很簡單):

private static class CountOps implements ContentOperator { 
    public static int operationCount = 0; 
    public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList<PdfObject> operands) { 
    ++operationCount; 
    } 
} 

啊! registerContentOperator是一個公共職能。您根本不需要更改iText的源代碼:

PdfContentStreamProcessor proc = new PdfContentStreamProcessor(null); 
CountOps counter = new CountOps(); 
proc.registerContentOperator("S", countOps); // stroke the path 
proc.registerContentOperator("s", countOps); // close & stroke 
proc.registerContentOperator("F", countOps); // fill, backward compat 
proc.registerContentOperator("f", countOps); // fill 
proc.registerContentOperator("f*", countOps); // fill with event-odd winding rule 
proc.registerContentOperator("B", countOps); // fill & stroke 
proc.registerContentOperator("B*", countOps); // fill & stroke with even-odd 
proc.registerContentOperator("b", countOps); // close, fill, & stroke 
proc.registerContentOperator("b*", countOps); // close, fill, & stroke with even-odd 

proc.processContent(contentBytes, pageResourceDict); 

int totalStrokesAndFills = CountOps.operationCount; // note that stroke&fill operators will be counted once, not twice. 

類似的東西。如果遇到任何文本或圖像,只有空RenderListener會導致空指針異常。您可以自己鞭策一個無操作監聽器,或者使用現有的監聽器並忽略其輸出。

PS:iTextSharp 5.0.6現在應該在任何一天發佈,如果它還沒有出來的話。

+0

嗨,我想出了一條快速的方法沿着同樣的路線。在while(tokenizer.NextToken())循環中,我可以查找tontntype「OTHER」,並將標記器字符串值與列表或矢量操作值進行比較(包括上面但也包含「l」,「c」,「v」 「y」,「h」,「re」。它似乎工作得很好,因爲我的目標主要是識別需要一段時間才能渲染的文檔。iText in Action,第二版非常有幫助 – 2011-02-15 23:39:03