Java 通过pdfbox从pdf文件中提取文本
我在pdf阅读中面临一个问题Java 通过pdfbox从pdf文件中提取文本,java,pdfbox,Java,Pdfbox,我在pdf阅读中面临一个问题 public class GetLinesFromPDF extends PDFTextStripper { static List<String> lines = new ArrayList<String>(); Map<String, String> auMap = new HashMap(); boolean objFlag = false; public GetLinesFromPDF(
public class GetLinesFromPDF extends PDFTextStripper {
static List<String> lines = new ArrayList<String>();
Map<String, String> auMap = new HashMap();
boolean objFlag = false;
public GetLinesFromPDF() throws IOException {
}
/**
* @throws IOException If there is an error parsing the document.
*/
public static void main(String[] args) throws IOException {
PDDocument document = null;
String fileName = "E:\\sample.pdf";
try {
int i;
document = PDDocument.load(new File(fileName));
PDFTextStripper stripper = new GetLinesFromPDF();
stripper.setSortByPosition(true);
stripper.setStartPage(0);
stripper.setEndPage(document.getNumberOfPages());
Writer dummy = new OutputStreamWriter(new ByteArrayOutputStream());
stripper.writeText(document, dummy);
// print lines
for (String line : lines) {
//System.out.println("line = " + line);
if (line.matches("(.*)Objection(.*)")) {
System.out.println(line);
withObjection(lines);
//System.out.println("iiiiiiiiiiii");
break;
}
//System.out.println("uuuuuuuuuuuuuu");
}
} finally {
if (document != null) {
document.close();
}
}
}
/**
* Override the default functionality of PDFTextStripper.writeString()
*/
@Override
protected void writeString(String string, List<TextPosition> textPositions) throws IOException {
System.out.println("textPositions = " + string);
// System.out.println("tex "+textPositions.get(0).getFont()+ getArticleEnd());
// you may process the line here itself, as and when it is obtained
}
}
public类GetLinesFromPDF扩展了PDFTextStripper{
静态列表行=新的ArrayList();
Map auMap=newhashmap();
布尔值objFlag=false;
公共GetLinesFromPDF()引发IOException{
}
/**
*如果解析文档时出错,@将引发IOException。
*/
公共静态void main(字符串[]args)引发IOException{
PDDocument文件=null;
String fileName=“E:\\sample.pdf”;
试一试{
int i;
document=PDDocument.load(新文件(文件名));
PDFTextStripper stripper=new GetLinesFromPDF();
脱扣器。设置端口BYPOSITION(真);
剥离器。设置开始页(0);
setEndPage(document.getNumberOfPages());
Writer dummy=newoutputstreamwriter(newbytearrayoutputstream());
stripper.writeText(文档,虚拟);
//打印行
用于(字符串行:行){
//System.out.println(“line=“+line”);
如果(行匹配((*)反对(*)){
系统输出打印项次(行);
有异议(行);
//系统输出打印项次(“IIII”);
打破
}
//System.out.println(“uu”);
}
}最后{
如果(文档!=null){
document.close();
}
}
}
/**
*重写PDFTextStripper.writeString()的默认功能
*/
@凌驾
受保护的void writeString(字符串、列表textPositions)引发IOException{
System.out.println(“textPositions=“+string”);
//System.out.println(“tex”+textPositions.get(0.getFont()+getArticleEnd());
//您可以在获取该行时在此处自行处理该行
}
}
需要像这样的输出吗
我的pdf有一些标题,我们需要跳过相同的
pdf文件内容为
如何按指定的不同格式提取文本
提前感谢。“如何按指定的格式提取文本。”-这还远远没有指定。首先,如何识别标题?它们真的都是以“我的标题”或“副标题”开头的吗?或者它们都以“标题:”或“副标题:”作为前缀?或者是这些变体的混合体?在某些pdf中有,但在其他pdf中没有。好的,然后解释可以识别标题的标准,我们将帮助您了解是否可以以及如何进行编码。示例文本没有清楚地传达可以识别标题的标准。感谢您的支持。由于一些安全问题,我将展示一个示例pdf内容。一些文本(如公司名称徽标等)异议1部门:abc这是一个异议样本,需要遵守属性响应规则用户需要遵守此规则异议2部门:xyz Lorem Ipsum只是印刷和排版行业的虚拟文本。lorem ipsum的响应非常好,就像它一直到pdf的最后一页一样,我认为它更简单,需要检查作为异议部门的键&响应“如何按照指定的单独格式提取文本”-这远远没有指定。首先,如何识别标题?它们真的都是以“我的标题”或“副标题”开头的吗?或者它们都以“标题:”或“副标题:”作为前缀?或者是这些变体的混合体?在某些pdf中有,但在其他pdf中没有。好的,然后解释可以识别标题的标准,我们将帮助您了解是否可以以及如何进行编码。示例文本没有清楚地传达可以识别标题的标准。感谢您的支持。由于一些安全问题,我将展示一个示例pdf内容。一些文本(如公司名称徽标等)异议1部门:abc这是一个异议样本,需要遵守属性响应规则用户需要遵守此规则异议2部门:xyz Lorem Ipsum只是印刷和排版行业的虚拟文本。lorem ipsum的回复非常好,就像它一直到pdf的最后一页一样,我认为它更简单,需要检查作为异议部门和回复的键