public static void main(String[] args) {
// TODO Auto-generated method stub
String fileName = "";
Document pdfdoc = new Document(fileName);
TextFragmentAbsorber tfa = new TextFragmentAbsorber();
pdfdoc.getPages().accept(tfa);
TextFragmentCollection tfc = tfa.getTextFragments();
for (TextFragment tf : (Iterable<TextFragment>) tfc) {
tf.getTextState().setForegroundColor("特定的颜色");
System.out.println("text:"+ tf.getText());
}
System.out.println("well done");
}
这种方式输出的文本,无法给每个字加入ForegroundColor,只能给tf输出的对应文本加入ForegroundColor
@pilixiaopang
您也可以和我们分享您的样本PDF文档。我们将在我们的环境中测试该场景并相应地解决它。
@ asad.ali
这个是测试的pdf样本test1.pdf (2.5 KB)
@pilixiaopang
API以首先添加文本的方式从文档中提取文本。但是,我们还注意到,整个文本行被提取为单个TextFragment。因此,我们已在问题跟踪系统中将调查凭单记录为PDFJAVA-39967。我们将调查其详细信息,并向您发布其解决状态。请耐心等待,为我们节省一些时间。
对此造成的不便,我们表示歉意。
@pilixiaopang
我们想与您分享我们已经调查了先前记录的故障单:
解决方法是,您可以在文本片段内重新创建文本片段(删除旧片段并在其位置创建新片段),从而可以为每个片段设置不同的颜色。请查看下面的代码片段,并记住您应该使用合适的字体(我在代码片段中使用了“ Arial Unicode MS”)。
Document doc = new Document(dataDir + "test1.pdf");
TextFragmentAbsorber tfa = new TextFragmentAbsorber();
doc.getPages().accept(tfa);
TextFragmentCollection tfc = tfa.getTextFragments();
Font font = FontRepository.findFont("Arial Unicode MS");
Random rand = new Random();
for (TextFragment tf : tfc) {
String text = tf.getText();
double mediumDistanceBetweenChars = tf.getRectangle().getWidth() / text.length();
// Remove previous fragment
for (TextSegment seg : tf.getSegments()) {
seg.setText("");
}
for (int i = 0; i < text.length(); i++) {
TextSegment textSegment = new TextSegment(String.valueOf(text.charAt(i)));
textSegment.setPosition(new Position(
tf.getPosition().getXIndent() + i * mediumDistanceBetweenChars,
tf.getPosition().getYIndent() * 2 - tf.getBaselinePosition().getYIndent()));
textSegment.getTextState().setFont(font);
// Set Random color
textSegment.getTextState().setForegroundColor(
Color.fromArgb(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255)));
tf.getSegments().add(textSegment);
}
}