C# 从pdf中识别rgb和cmyk颜色

C# 从pdf中识别rgb和cmyk颜色,c#,pdfbox,C#,Pdfbox,我有一个由不同颜色的文本和背景色组成的PDF。如何识别CMYK或RGB格式的PDF中使用的颜色 StringBuilder sb_Sourcepdf = new StringBuilder(); PdfReader reader_FirstPdf = new PdfReader(pdf_of_FirstFile); Document document = new Document(); PDFParser parser = new PDFParser(new FileInputStream(

我有一个由不同颜色的文本和背景色组成的PDF。如何识别CMYK或RGB格式的PDF中使用的颜色

StringBuilder sb_Sourcepdf = new StringBuilder();
PdfReader reader_FirstPdf = new PdfReader(pdf_of_FirstFile);

Document document = new Document();

PDFParser parser = new PDFParser(new FileInputStream(pdf_of_FirstFile));
parser.parse();
PDDocument docum = parser.getPDDocument();

PDFStreamEngine engine = new PDFStreamEngine();

PDPage page = (PDPage)docum.getDocumentCatalog().getAllPages().get(0);

engine.processStream(page, page.findResources(), page.getContents().getStream());
PDGraphicsState graphicState = engine.getGraphicsState();
string colorname = graphicState.getStrokingColor().getColorSpace().getName();
graphicState.getTextState().getFont();
int r = graphicState.getNonStrokingColor().getJavaColor().getRed();
int g = graphicState.getNonStrokingColor().getJavaColor().getGreen();
int b = graphicState.getNonStrokingColor().getJavaColor().getBlue();
int rgb = graphicState.getNonStrokingColor().getJavaColor().getRGB();
float[] cosp = graphicState.getNonStrokingColor().getColorSpaceValue();
PDColorSpace pd = graphicState.getNonStrokingColor().getColorSpace();

string re = graphicState.getStrokingColor().toString();
int rgbcolor = graphicState.getStrokingColor().getJavaColor().getRGB();

float[] components = { java.awt.Color.black.getRed(), java.awt.Color.black.getGreen(), java.awt.Color.black.getBlue() };

float[] colorSpaceValues = graphicState.getStrokingColor().getColorSpaceValue();


foreach (float c in colorSpaceValues)
{
    Debug.WriteLine(c * 255.00);
}
我使用了pdfbox,但得到的值为0.0

PdfReader\u FirstPdf=新的PdfReader(pdf\u of_FirstFile);
 PdfReader reader_FirstPdf = new PdfReader(pdf_of_FirstFile);


            for (int i = 1; i <= reader_FirstPdf.NumberOfPages; i++)
            {
 TextWithFont_SourcePdf Sourcepdf = new TextWithFont_SourcePdf();
}
                text_First_File = iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(reader_FirstPdf, i, Sourcepdf);


            public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo)
            {
 int r = renderInfo.GetColorNonStroke().R;
                  int g = renderInfo.GetColorNonStroke().G;
                   int b = renderInfo.GetColorNonStroke().B;

}
对于(inti=1;i
PdfReader\u FirstPdf=新的PdfReader(pdf\u of\u FirstFile);

对于(int i=1;i您使用的是哪个版本的PDFbox?如果您使用的是PDFbox,为什么要将问题标记为“itextsharp”?@Bruno Lowagie我想知道是否可以在itextsharp中执行此操作。因为我无法使用PDFbox获取值。对于PDF的文本提取,我使用了itextsharp@Pragya目前iText的解析器包没有ignore文本颜色。扩展它以提供颜色信息相当容易。也就是说,您的PDFBox代码似乎只在页面描述的开头或结尾检查图形状态(我不知道调用
引擎后
引擎
处于哪个状态。processStream
)当您需要要检查的文本被呈现时的状态时。此外,您必须考虑文本呈现模式,以查看笔划颜色和非笔划颜色是否都适用。@mkl是否有其他方法获取颜色值?您使用的是哪个版本的PDFbox?如果您使用的是PDFbox,为什么u将问题标记为“itextsharp”?@Bruno Lowagie我想知道是否可以在itextsharp中执行此操作。因为我无法使用pdfbox获取值。对于PDF的文本提取,我使用了itextsharp@Pragya目前,iText的解析器包确实忽略了文本颜色。扩展它以提供颜色信息是相当容易的也就是说,您的PDFBox代码似乎只在页面描述的开头或结尾检查图形状态(我不知道调用了
engine.processStream
之后
engine
处于哪个状态)当您需要要检查的文本被呈现时的状态时。此外,您必须考虑文本呈现模式,以查看笔划颜色、非笔划颜色、两者都适用还是两者都不适用。@mkl是否有其他方法来获取颜色值?