TextRenderInfo
有您正在寻找的方法PathConstructionRenderInfo
才不是。
你从哪里得到这个例子?您使用的版本可能与所使用的版本文档不同。
本文解释了您需要做什么,但它提供了 Java 源代码,应该很容易移植到 C#:http://techqa.info/programming/question/41728853/how-to-extract-the-color-of-a-rectangle-in-a-pdf,-with-itext
为了总结相关部分,它使用GraphicsState
获取填充颜色。要实现此目的,您需要使用以下命令解析 PDF 的所有内容PdfReaderContentParser
传递一个派生的ExtRenderListener
to the processContent
方法如下(摘自上面的Java代码):
PdfReader pdfReader = new PdfReader(resource);
ExtRenderListener extRenderListener = new ExtRenderListener();
for (int page = 1; page <= pdfReader.getNumberOfPages(); page++)
{
PdfReaderContentParser parser = new PdfReaderContentParser(pdfReader);
parser.processContent(page, extRenderListener);
}
ExtRenderListener 需要重写 renderPath:
public override Path renderPath(PathPaintingRenderInfo renderInfo)
{
Field gsField = PathPaintingRenderInfo.class.getDeclaredField("gs");
gsField.setAccessible(true);
GraphicsState graphicsState = (GraphicsState) gsField.get(renderInfo);
if ((renderInfo.getOperation() & PathPaintingRenderInfo.FILL) != 0)
{
var fillColor = graphicsState.getFillColor();
bool filledRect= false;
for (PathConstructionRenderInfo pathConstructionRenderInfo in pathInfos)
{
if(pathConstructionRenderInfo.getOperation()==PathConstructionRenderInfo.RECT)
{
filledRect=true;
break;
}
if (filledRect && fillColor!=null)
Console.WriteLine("{0},{1},{2}",
fillColor.getRed(), fillColor.getGreen(), fillColor.getBlue());
}
}
}