获取颜色为黑色的所有文本运算符pdfBox

时间:2014-01-06 10:11:17

标签: java pdfbox

在解析已存在的pdf时,我正在使用 if(op.getOperation().equals( "TJ"))获取文本操作符,我想要做的只是定位颜色为黑色(或其他一些可指定颜色)的文本操作符。我无法在pdfBox文档中找到相同的方法。

编辑:基本上我要做的是在pdf上只保留黑色文字,并删除/删除任何不符合标准的文字操作符。

任何人都可以共享解决方案吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

显示运算符的文本

  

在解析已经存在的pdf时,我使用if(op.getOperation().equals( "TJ"))来获取文本运算符,

通常需要处理的文本显示运算符

  

string Tj 显示文字字符串。

     

string '移至下一行并显示文字字符串。该操作员应具有   与代码T* string Tj

的效果相同      

aw ac string 移动到下一行并显示文本字符串,使用 aw 作为字间距和 ac 作为字符间距(在文本状态中设置相应的参数)。 aw ac 应为以未缩放的文本空间单位表示的数字。此运算符应具有效果与此代码相同:aw Tw ac Tc string '

     

array TJ 显示一个或多个文本字符串,允许单独的字形定位。 array 的每个元素都应该是字符串或数字。如果元素是字符串,则此运算符应显示字符串。如果是数字,运营商应按该数量调整文本位置;也就是说,它应翻译文本矩阵 Tm 。数字应以文本空间为单位的千分之一表示(见9.4.4,“文本空间详细信息”)。根据写入模式,该量应从当前水平或垂直坐标减去。在默认坐标系中,正调整具有将下一个字形向左或向下绘制给定量的效果。

     

(Pdf规范ISO 32000-1中的表109)

文字颜色

用于显示文本的颜色取决于当前的文本渲染模式。

  

文本呈现模式 Tmode 确定显示文本是否会导致字形轮廓被描边,填充,用作剪裁边界或三者的某种组合。

     

(Pdf规范ISO 32000-1中的第9.3.6节)

使用 Tr 运算符设置:

  

渲染 Tr 将文本渲染模式 Tmode 设置为渲染,该模式应为整数。初始值:0。

     

(Pdf规范ISO 32000-1中的表105)

根据此模式,您必须考虑当前笔触颜色,当前填充颜色,在定义的剪裁边界中绘制的任何颜色,或三者的某些组合。

颜色设置运算符在规范ISO 32000-1的表74中定义。

大多数情况下,字形轮廓仅被填充(模式0)。因此,大多数情况下,您必须考虑当前的填充颜色。这仍然需要考虑很多颜色设置命令。

此处通常使用灰色,RGB或CMYK颜色。因此,大多数情况下你必须检查 g rg k 运营商。

纯黑色由0 g0 0 0 rg0 0 0 1 k设置。您可能还想考虑非常接近这些值的值;它们可能是黑色的,只是由于四舍五入问题而有所不同。

颜色转换

使事情变得更复杂:上面提到的颜色仍然可以转换成一些完全不同的颜色,例如:通过传递函数(参见第10.4节),透明度或混合(参见第11节)。

如果您还想考虑这些效果,您基本上可以编写自己的PDF渲染器。

但是,通常情况下,主要用于网络上文字的PDF不会使用这些功能。因此,出于您的目的,我一开始不会考虑它们。