"processTextPosition"과 유사한 PDFBox를 사용하여 단어의 위치를 가져올 수 있습니까? processTextPosition은 단일 문자에서만 호출되며, 단어로 병합하는 코드는 텍스트의 위치를 반환하는 PDFTextStripper ("normalize"메서드)의 일부입니다. 위치를 추출하는 방법/유틸리티가 있습니까? (동기가 무엇인지 궁금 분들을 위해 - 정보가 실제로 테이블이며, 우리는 빈 셀을 감지하고 싶습니다) 감사PDFBox - 단어 위치 가져 오기 (문자 만이 아님)
6
A
답변
1
얻을 수있는 pdf 파일에서 추출 된 텍스트에서 단어와 자신의 x와 y 위치 당신 따라서
PDFTextStripper pdfStripper = new CustomPDFTextStripper();
String text = pdfStripper.getText(*pdf file wrapped as a PDDocument object*);
로 텍스트를 PdfTextStripper 클래스를 확장하고, PDF 파일 등
public class CustomPDFTextStripper extends PDFTextStripper{
public CustomPDFTextStripper() throws IOException {
}
/**
* Override the default functionality of PDFTextStripper.
*/
@Override
protected void writeString(String text, List<TextPosition> textPositions) throws IOException{
TextPosition firstProsition = textPositions.get(0);
writeString(String.format("[%s , %s , %s]", firstProsition.getTextPos().getXPosition(),
firstProsition.getTextPos().getYPosition(), text));
}
}
에서 텍스트를 추출하는 사용자 정의 클래스를 사용하여이 사용자 정의 클래스의 객체를 생성하고 추출해야합니다 결과 텍스트 문자열은 [xposition, yposition, word] 형태로 기본 단어 분리 기호로 구분됩니다.
+0
PdfBox에서 작동하지 않습니다. –
아마도 도움이 될 것입니다 : http://stackoverflow.com/questions/3203790/parsing-pdf-files-especially-with -tables-with-pdfbox/12545981 # 12545981 – impeto
제안 해 주셔서 감사합니다. 결국 우리의 해결책은 writePage를 변경하여 단어를 자신의 위치로 유지하는 것입니다 (보낸 URL에 설명 된대로). 그러나 우리의 경우, 열의 수 (및 그 위치)는 알 수 없기 때문에 정보의 구성에 따라 열을 찾아야합니다 (예 : Y 위치에서 시작하는 단어가 많은 줄이있는 경우 = 100, 아마도 거기에 테이블 열이 있습니다). 이 구조를 감지 할 수있는 구성 요소가 있습니까? 그렇다면 "Y"가 상수가 아닌 경우 약간 회전 된 페이지도 처리 할 수 있습니까? – user964797
한 가지 가능한 방법은 PDFTextStripper 클래스의 processTextPosition()에 재정의를 추가하고 seperator라는 단어를 확인하여 문자를 추적하는 것입니다. 단어 start에 표시를 유지하고 단어 끝에 부호를 유지하고 단어를 저장할 때 구분 기호가 있습니다. – programer8