/**
* Write a Java string to the output stream. The default implementation will ignore the <code>textPositions</code>
* and just calls {@link #writeString(String)}.
*
* @param text The text to write to the stream.
* @param textPositions The TextPositions belonging to the text.
* @throws IOException If there is an error when writing the text.
*/
protected void writeString(String text, List<TextPosition> textPositions) throws IOException
{
writeString(text);
}
如果您还需要知道新行何时开始,您可能还想覆盖
/**
* Write the line separator value to the output stream.
* @throws IOException
* If there is a problem writing out the lineseparator to the document.
*/
protected void writeLineSeparator( ) throws IOException
{
output.write(getLineSeparator());
}
1 回答
一般而言
要使用PDFBox提取文本(带或不带位置,颜色等额外信息),可以实例化
PDFTextStripper
或从中派生的类,并使用它:(有许多
PDFTextStripper
属性允许您限制从中提取文本的页面 . )在执行
getText
的过程中,解析所讨论的页面的内容流(以及从这些页面引用的形式的xObject),并处理文本绘制命令 .如果要更改文本提取行为,则必须通过重写此方法来更改此文本绘制命令处理,这通常应该执行此操作:
如果您还需要知道新行何时开始,您可能还想覆盖
writeString
可以被覆盖以将文本信息引导到单独的成员中(例如,如果您可能希望结果采用比仅仅String
更结构化的格式),或者可以覆盖它以简单地将一些额外信息添加到结果String
中 .可以重写
writeLineSeparator
以触发行之间的某些特定输出 .有更多的方法可以被覆盖,但一般来说你不太可能需要它们 .
在手头的情况下
这可以通过以下方式实现(只需在每行的开头添加信息):
(ExtractText.java方法
extractLineStart
由testExtractLineStartFromSampleFile
测试)