public  List<HashMap<String, Object>> readPdfString(File file ,int pageNum)  {
    List<HashMap<String, Object>> result = Collections.synchronizedList(new 
ArrayList<HashMap<String,Object>>());
PDDocument doc = null;
PDDocument originalDocument=null;
    try{
// 创建新的 PDF 文档
originalDocument=PDDocument.load(file);
doc = new PDDocument();
// 遍历原始文档的页面并复制到新文档
for (PDPage page : originalDocument.getPages()) {
            doc.addPage(page);
}
        doc.save(file);
doc=PDDocument.load(file);
/**
         * 为0表示读全部页的数据,大于0表示读取指定页码的数据
*/
pageNum  = pageNum == 0 ?  doc.getNumberOfPages() : pageNum;

CountDownLatch latch = new CountDownLatch(pageNum);

        for(int i=1;i<=pageNum;i++)
        {
int finalI = i;
PDDocument finalDoc = doc;
executorService.execute(() ->{
int attempts = 0;
                try {
                    HashMap<String, Object> map = new HashMap<>();
PDFTextStripper textStripper =new PDFTextStripper();
textStripper.setSortByPosition(true); // 设置是否按文本位置排序
textStripper.setStartPage(finalI); // 设置开始页数
textStripper.setEndPage(finalI); // 设置结束页数
// 从 PDF 文档提取文本
String text = textStripper.getText(finalDoc);
                    int maxAttempts = 5; // 设置最大尝试次数
while (attempts < maxAttempts&&!text.contains("兹证明")&&finalI==1) {
                        text = textStripper.getText(finalDoc);
                        if (text.contains("兹证明")) {
break;
}
                        attempts++;
}
                    map.put("id",finalI);
map.put("data",text);
result.add(map);
}catch (Exception e){
log.error("读取pdf内容失败",e);
attempts++;
}finally {
latch.countDown();
}
            });
}
        latch.await();
}catch (Exception e){
log.error(e.getMessage(),e);
}finally {
        IoUtil.close(doc);
IoUtil.close(originalDocument);
}
return result;



}
IDEA报错 org.apache.fontbox.ttf.TTFParser 151 parse  然后中文是乱码的

Reply via email to