2011-02-15 53 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