【问题标题】:Identify rgb and cmyk color from pdf从 pdf 中识别 rgb 和 cmyk 颜色
【发布时间】:2013-04-18 07:16:33
【问题描述】:

我有一个包含不同颜色文本和背景颜色的 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

【问题讨论】:

  • 你用的是哪个版本的PDFbox?
  • 如果您使用的是 PDFBox,为什么要将问题标记为“itextsharp”?
  • @Bruno Lowagie 我想知道是否可以在 itextsharp 中进行操作。因为我无法使用 pdfbox 获得价值。对于 PDF 的文本提取,我使用了 itextsharp
  • @Pragya 目前 iText 的解析器包确实忽略了文本颜色。扩展它以提供着色信息是相当容易的。话虽这么说,您的 PDFBox 代码似乎只在页面描述的开头或结尾检查图形状态(我不知道在调用 engine.processStream 之后,engine 处于哪个状态),而您需要您要检查的文本呈现的那一刻。此外,您必须考虑文本渲染模式,以查看是描边颜色、非描边颜色、两者都适用还是都不适用。
  • @mkl 还有其他获取颜色值的方法吗?

标签: c# pdfbox


【解决方案1】:
 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;

}

【讨论】:

    猜你喜欢
    • 2015-09-20
    • 2017-08-20
    • 2011-01-26
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2013-01-28
    相关资源
    最近更新 更多