당신이 사용하는 PDFTextStripper
클래스 (자바 독 주석 참조,) 설명되어 있습니다
* This class will take a pdf document and strip out all of the text and ignore the
* formatting and such.
특정 글꼴 정보를 얻으려면, 따라서 다소 변경해야합니다.
글꼴 정보가 모두 함께이 클래스에서 사용할 수 있으며 선을 출력 할 경우에만 폐기, 그 source를 보라 :
protected void writePage() throws IOException
{
[...]
for(int i = 0; i < charactersByArticle.size(); i++)
{
[...]
List<TextPosition> line = new ArrayList<TextPosition>();
[...]
while(textIter.hasNext())
{
[...]
if(lastPosition != null)
{
[...]
if(!overlap(positionY, positionHeight, maxYForLine, maxHeightForLine))
{
writeLine(normalize(line,isRtlDominant,hasRtl),isRtlDominant);
line.clear();
[...]
}
............
그 목록에있는 TextPosition
인스턴스를 line
여전히 서식 정보를 사용할 수 있고, 그 중 폰트가 사용되는 동안에 만 "정규화"되는 동안 line
순수 문자로 축소됩니다. 당신이에 (글꼴을 포함) 모든 페이지의 콘텐츠 정보를 검색 계속하려면
:
당신이 글꼴 정보를 검색하는 방법에 따라 다른 옵션이 있습니다, 따라서 글꼴 정보를 유지하려면 getText
를 통해 하나의 문자열 : 당신은 어떤 글꼴 태그를 선택 할 때마다 글꼴 변경 (예 : [Arial]
)를 포함하는 방법 private List<String> normalize(List<TextPosition> line, boolean isRtlDominant, boolean hasRtl)
을 변경합니다. 불행히도이 방법은 비공개입니다. 따라서 전체 PDFTextStripper
클래스를 복사하고 복사본의 코드를 변경해야합니다.
다른 구조의 특정 글꼴 정보를 검색하려는 경우 (예 :당신이 PDFTextStripper
에서 자신의 스트리퍼 클래스를 유도 할 수있다) List<List<TextPosition>>
로, 그것을 복사 만 바로 전이나 라인
writeLine(normalize(line,isRtlDominant,hasRtl),isRtlDominant);
과 후를 향상, 원하는 유형의 몇 가지 변수를 추가하고 writePage
는 위에서 언급 한 protected
메소드를 오버라이드 (override) 새로운 변수에 정보를 추가하는 코드. 예 :
public class MyPDFTextStripper extends PDFTextStripper
{
public List<List<TextPosition>> myLines = new ArrayList<List<TextPosition>>();
[...]
if(!overlap(positionY, positionHeight, maxYForLine, maxHeightForLine))
{
writeLine(normalize(line,isRtlDominant,hasRtl),isRtlDominant);
myLines.add(new ArrayList<TextPosition>(line));
line.clear();
[...]
}
지금 당신은 당신의 MyPDFTextStripper
의 인스턴스에 대한 getText
를 호출 결과로 일반 텍스트를 검색하고 새 변수
출처
2013-11-21 10:03:09
mkl
이 링크를 참조를 통해 추가 데이터에 액세스 할 수 있습니다. http://stackoverflow.com/questions/6939583/how-to-extract-font-styles-of-text-contents-using-pdfbox – PKhode
@pappukhode 나는 이미 내 질문에 링크를 언급했다. –