在解析已存在的pdf时,我正在使用
if(op.getOperation().equals( "TJ"))
获取文本操作符,我想要做的只是定位颜色为黑色(或其他一些可指定颜色)的文本操作符。我无法在pdfBox文档中找到相同的方法。
编辑:基本上我要做的是在pdf上只保留黑色文字,并删除/删除任何不符合标准的文字操作符。
任何人都可以共享解决方案吗?
谢谢!
答案 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 g
,0 0 0 rg
或0 0 0 1 k
设置。您可能还想考虑非常接近这些值的值;它们可能是黑色的,只是由于四舍五入问题而有所不同。
使事情变得更复杂:上面提到的颜色仍然可以转换成一些完全不同的颜色,例如:通过传递函数(参见第10.4节),透明度或混合(参见第11节)。
如果您还想考虑这些效果,您基本上可以编写自己的PDF渲染器。
但是,通常情况下,主要用于网络上文字的PDF不会使用这些功能。因此,出于您的目的,我一开始不会考虑它们。