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
....
感谢您的回复!
答案 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还有其他产品已经开箱即用吗?