JAVA
OS : Windows, Linux
Require : JDK or JRE version 1.8
Google Cloud Vision API(Document OCR), Apache PDFBOX, Apache POI, JAVA, Maven ...
전체적인 프로그램의 흐름도 입니다. 사용자가 PDF Document를 입력하면 프로그램이 이를 처리한후 사용자가 원하는 Format으로 출력해 줍니다.
프로그램을 구성하는 주요 기술에 대한 설명 입니다.
OCR을 요청하기 위해 PDF속의 데이터를 요청 가능한 형태로 전처리 하는 과정입니다.
아래 예시의 getPDFDtoList는 제공된 PDF에서 이미지와 텍스트를 추출해내는 Method 입니다. 해당 Method는 Apache PDFbox를 이용하여 각 페이지의 이미지와 텍스트를 DTO형태로 묶고, 이를 List 자료형으로 반환해 줍니다.
//preprocessing Example
public ArrayList<PDFDto> getPDFDtoList() throws IOException {
log.info("Image And Text Extraction Start.");
PDPageTree pages = pdDocument.getPages();
int PDSize = pages.getCount();
for (int i = 1; i < PDSize + 1; i++) {
PDFDto dto = new PDFDto();
BufferedImage bufferedImage = null;
PDResources pdResources = pages.get(i - 1).getResources();
//image extraction start
for (COSName c : pdResources.getXObjectNames()) {
PDXObject o = null;
try {
o = pdResources.getXObject(c);
} catch (IOException e) {
e.printStackTrace();
}
if (o instanceof org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject) {
try {
if(((PDImageXObject) o).getHeight()<300)
continue;
bufferedImage = ((PDImageXObject) o).getImage();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//init PDFDto
dto.setPage(i);
dto.setTextContent(getTextFromPage(i));
dto.setImage(bufferedImage);
pdfDtoArrayList.add(dto);
}
log.info("Extraction Finish.");
pdDocument.close();
return pdfDaoArrayList;
}
OCR Result 값을 요구사항에 맞는 문서로 파싱하기 위해 Keyword 좌표 기반으로 Section을 구분하고 이를 통해 각 섹션마다 미리 정의된 문서 양식에 맞게 정보를 추출해냅니다. 아래 이미지는 문서의 대략적인 형태 예시입니다.