繁体   English   中英

使用java Itext获取字体颜色

[英]Get font color with java Itext

我正在使用Itext,我需要提取PDF中特定标题的字体颜色,有关如何执行此操作的任何想法?

在使用iTextSharp(iText的.NET端口)过去6个月后,我将尝试解释如何实现您想要的功能。 虽然这不是一个精确的答案,但它可能会很好地引导您到一个可以做其他功课来实现它的地方。

PDF格式保持内存中的“图形状态”,这大致是一组指定当前颜色,笔厚度,线条样式等的值。所有渲染操作(包括文本渲染)都使用此图形状态来确定该操作将输出的内容生产。 例如,您可以将当前颜色设置为蓝色,然后绘制几行,所有这些行将为蓝色。 因此,您不必为每个线条绘制操作指定线条颜色。

对于着色,我们在图形状态中有两个变量:当前描边颜色和当前非描边颜色。 抚摸颜色用于一维绘制,如线条,边框等(如果您使用过GDI +,这大致是一个System.Drawing.Pen),而非抚摸颜色则用于2D操作,如填充(在GDI +,一个System.Drawing.Brush)。 我相信文本着色是使用非抚摸颜色完成的,因为字形是2D对象。

是的,现在您已经了解了理论部分,这就是您需要做的事情。 在iText源代码中找到PdfContentStreamProcessor类。 在这里,您将找到PopulateOperators() ,其中列出了iText当前可以解析的所有运算符。 有很多与着色相关的运算符,其细节在这里无法总结(详见PDF规范),但简而言之, CScs运算符设置了当前的颜色空间(支持包括RGB,灰度, CMYK,L * a * b和其他)以及设置当前描边和非描边颜色的SCsc操作符。 同样,关于设置颜色空间然后根据当前颜色空间解释描边和非描边颜色的值有很多细节,您应该看到PDF规格文档。 此外,还有一些推送和弹出图形状态操作可以使事情进一步复杂化。

简而言之,您需要添加对运营商的支持,包括CScsGgRGrgKkSCscSCNscn 目前iTextSharp目前还不支持其中的大多数,因此您必须为每个类编写自己的类(实现IContentOperator接口)。

您可以从此处获得大量实施帮助。 虽然这个人没有详细实现它(我可以说它很多,特别是处理PDF支持的所有颜色空间),但这应该给你一个非常好的起点。

希望这可以帮助。

PDF Clown (原生Java和.NET)支持文本样式 信息提取 (包括文本颜色和文本呈现模式) 和几乎所有开箱即用的图形操作符 (参见其代码库中的TextInfoExtractionSample)。

这个开源/免费软件库具有多功能内容引擎 (参见ContentScanner类),能够执行不同的任务,如内容解析,内容提取,内容编辑,内容呈现和打印(目前部分开发的最后一个)。

它的对象模型丰富而有凝聚力 (只有2个基类控制所有逻辑: PdfObject在原始低级PDF类型的根源(如字典,数组,数字......); PdfObjectWrapper在专用高的根部级别的PDF实体(例如页面,注释,书签......)),反映了官方的PDF规范而没有它的怪癖。

我是它的开发人员,所以我可能有偏见,但如果你想尝试一下,我建议你从sourceforge.net上的SVN存储库中查看,因为0.1.2版本(目前正在开发中)引入了很多增强功能在上一个版本中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM