使用iTextSharp提取路径和形状

时间:2013-06-06 11:20:53

标签: c# graphics itextsharp

iTextSharp支持使用PdfContentByte类创建形状和路径,在那里你可以设置颜色和绘制曲线和基本元素......是否有一种机制可以做另一种方式?我可以通过致电PdfReader.GetPageContent(...)来获取内容,但我找不到"解析器"阅读这些操作,将它们应用于图形上下文,例如在面板上绘制它。

示例:

1 1 1 RG
1 1 1 rg
0.12 0 0 0.12 16 31 cm

q
480 421 m
4318 421 l
4318 5459 l
480 5459 l
480 421 l W n
0.074509806931 0.074509806931 0.074509806931 RG
0.074509806931 0.074509806931 0.074509806931 rg /OC /oc1 BDC
....

感谢您的回复!

2 个答案:

答案 0 :(得分:2)

以下是提取页面不同命令的起点:

    var file = "test.pdf";
    var reader = new PdfReader(file);

    var streamBytes = reader.GetPageContent(2);
    var tokenizer = new PRTokeniser(new RandomAccessFileOrArray(streamBytes));
    var ps = new PdfContentParser(tokenizer);

    List<PdfObject> operands = new List<PdfObject>();
    while (ps.Parse(operands).Count > 0)
    {
        PdfLiteral oper = (PdfLiteral)operands[operands.Count - 1];
        var cmd = oper.ToString();

        switch (cmd)
        {
            case "q":
                Console.WriteLine("SaveGraphicsState(); //q");
                break;

            case "Q":
                Console.WriteLine("RestoreGraphicsState(); //Q");
                break;

           // good luck with the rest!

        }
    }

答案 1 :(得分:1)

iTextSharp不支持。原因是:解析文本会返回TextRenderInfo个对象,解析图像会返回ImageRenderInfo个对象,但是我们应该以哪种形式返回GraphicsRenderInfo?很难找到通用的东西,而绘制到图形上下文太具体了。

我的想法是你编写自己的解析器,就像我删除OCG层一样:OCGParser。 iText的这部分还没有被移植到iTextSharp,但也许你可以用它来获取灵感。

请注意,您实际上正在构建PDF到图像功能。 Aren还有其他产品已经开箱即用吗?