我正在尝试使用pdfbox从pdf中提取包含所有信息的文本。我获得了我想要的所有信息,除了颜色。我尝试了多种获取fontcolor的方法(包括使用PDFBox获取文本颜色)。但是没有用。现在,我从pdfBox的PageDrawer类复制了代码。但是,RGB值也不正确。
protected void processTextPosition(TextPosition text) {
Composite com;
Color col;
html" target="_blank">switch(this.getGraphicsState().getTextState().getRenderingMode()) {
case PDTextState.RENDERING_MODE_FILL_TEXT:
com = this.getGraphicsState().getNonStrokeJavaComposite();
int r = this.getGraphicsState().getNonStrokingColor().getJavaColor().getRed();
int g = this.getGraphicsState().getNonStrokingColor().getJavaColor().getGreen();
int b = this.getGraphicsState().getNonStrokingColor().getJavaColor().getBlue();
int rgb = this.getGraphicsState().getNonStrokingColor().getJavaColor().getRGB();
float []cosp = this.getGraphicsState().getNonStrokingColor().getColorSpaceValue();
PDColorSpace pd = this.getGraphicsState().getNonStrokingColor().getColorSpace();
break;
case PDTextState.RENDERING_MODE_STROKE_TEXT:
System.out.println(this.getGraphicsState().getStrokeJavaComposite().toString());
System.out.println(this.getGraphicsState().getStrokingColor().getJavaColor().getRGB());
break;
case PDTextState.RENDERING_MODE_NEITHER_FILL_NOR_STROKE_TEXT:
//basic support for text rendering mode "invisible"
Color nsc = this.getGraphicsState().getStrokingColor().getJavaColor();
float[] components = {Color.black.getRed(),Color.black.getGreen(),Color.black.getBlue()};
Color c1 = new Color(nsc.getColorSpace(),components,0f);
System.out.println(this.getGraphicsState().getStrokeJavaComposite().toString());
break;
default:
System.out.println(this.getGraphicsState().getNonStrokeJavaComposite().toString());
System.out.println(this.getGraphicsState().getNonStrokingColor().getJavaColor().getRGB());
}
我正在使用上面的代码。得到的值是r = 0,g = 0,b = 0,内部cosp对象值为[0.0],内部pd对象数组= null,而colorSpace =
null。并且RGB值始终为-16777216。请帮我。提前致谢。
我尝试了您发布的链接中的代码,它对我有用。我得到的颜色是148.92、179.0010.1和214.965。我希望我可以给您我的PDF,如果我可以将其存储在SO外部呢?我的PDF使用了一种淡蓝色,看起来很匹配。它只是在Word
2010中创建并导出的文本的一页,没有什么太紧张了。
一些建议....
这就是我现在能想到的,否则我将拥有pdfbox和fontbox的1.7.1版本,就像我说的那样,我几乎遵循了您提供的链接。
编辑
根据我的评论,这也许是针对pdf文件的微创方法,例如color.pdf
?
在PDFStreamEngine.java
的processOperator
方法可以try块内做
if (operation.equals("RG")) {
// stroking color space
System.out.println(operation);
System.out.println(arguments);
} else if (operation.equals("rg")) {
// non-stroking color space
System.out.println(operation);
System.out.println(arguments);
} else if (operation.equals("BT")) {
System.out.println(operation);
} else if (operation.equals("ET")) {
System.out.println(operation);
}
这将向您显示信息,然后由您根据需要处理每个部分的颜色信息。这是在color.pdf
…上运行时上述代码的输出开头的摘录
BT rG [COSInt(1), COSInt(0), CosInt(0)] RG [COSInt(1), COSInt(0), CosInt(0)] ET BT ET BT rG [COSFloat{0.573}, COSFloat{0.816}, COSFloat{0.314}] RG [COSFloat{0.573}, COSFloat{0.816}, COSFloat{0.314}] ET ......
您会在上面的输出中看到一个空的BT ET部分,该部分标记为DEVICEGRAY。其他所有参数都为您提供R,G和B分量的[0,1]值
如果你需要更多的背景,我在下面补充了整个故事: 我试图替换PDF中的一些字符串。这将成功(只要所有文本都存储在一个令牌中)。为了保持格式,我喜欢重新居中的文本。据我所知,我可以通过得到新旧字符串的宽度,做一些琐碎的计算,并设置新的位置来做到这一点。 我在stackoverflow上找到了一些灵感,用来替换https://stackoverflow.com/a/36404377(是的,它有一些问题,
PDF内容流 表示pdf使用F1字体,设置fontsize 40.959999。 我有一个关于实际字体大小是否为40.959999的问题。因为字体大小40太大了,但是在adobe arcrobat pro中显示的文本没有那么大。 在此pdf中没有意义
问题内容: 如何提取指定为“ #rrggbb”的颜色的色相成分? 问题答案: 如果您搜索如何将RGB转换为HSL,则会发现许多算法,包括Sergey链接的Wikipedia文章。 首先,提取十六进制颜色表示法的RGB分量。 这将使您获得颜色的字节(0-255)表示形式。在这种情况下为199、217、44。 然后,您可以使用Wikipedia文章中的公式来计算色相,或无耻地窃取他人的代码: 现在,我
我们从1.8迁移到PDFBox 2.0.1,在字体方面存在一些问题。我们尽量不嵌入它们,并尽可能使用默认字体。 这在1.8中运行得很好,但在2.0.1中,在Amazon Linux上运行时会出现一些错误,例如。 PDType1字体:对基本字体Times Roman使用fallback font LiberationSans 由于在我的Mac上一切正常,问题的原因是,无论亚马逊Linux上没有什么字
PDFBox的字体类PDFont中有一个名为getFontHeight的方法,听起来很简单。然而,我不太理解文档和参数代表什么。 这将获得字符的字体宽度。 参数: c-要获取宽度的字符代码。 偏移量-数组中的偏移量。长度 数据的长度。 返回:宽度为1000个文本空间单位,即333或777 在PDFBox中,这个方法是用来获取角色高度的正确方法吗?如果是的话,如何获取?字体高度和字体大小之间是否存在
早上好 我有一个新手PDFbox的问题,我希望一些帮助... 我刚刚(上周)从github下载了最新的PDFbox源代码,正在尝试创建HelloWorldOTF。java,基于HelloWorldTTF。java示例,希望创建一个PDF文件,该文件使用OTF字体(本例中为Adobe Caslon Pro Regular)将文本添加到输出PDF中。 到目前为止,我有以下信息: 我可以使用以下代码加载