Java 通过pdfbox从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(

我在pdf阅读中面临一个问题

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的最后一页一样,我认为它更简单,需要检查作为异议部门和回复的键