2011-06-12 3 views
0

페이지 번호를 구문 분석하는 동안. 22 of http://sfdoccentral.symantec.com/sf/5.1/linux/pdf/vxfs_admin.pdf, 인코딩 스타일로 mount_vxfs을 제외한 모든 단어를 구문 분석 할 수 있으며 글꼴이 일반 일반 텍스트와 다릅니다. 자세한 내용은 첨부 된 PDF 페이지를 참조하십시오.CAM :: PDF를 사용하여 비례 텍스트를 파싱 할 수없는 이유는 무엇입니까?

`#!/usr/bin/perl 
use CAM::PDF; 
my $file_name="vxfs_admin_51sp1_lin.pdf"; 
my $pdf = CAM::PDF ->new($file_name); 
my $no_pages=$pdf->numPages(); 
print "$no_pages\n"; 
for(my $i=1;$i<$no_pages;$i++){ 
my $page = $pdf->getPageText($i); 
//for page no. 22 
//if($i==22){ 
print $page; 
//} 
}` 
+0

매트, 무슨 일이 ... pls. 가능하다면 정당화하시오 ????????????? –

+1

어쨌든 링크 된 PDF의 스크린 샷 대신 코드를 표시해야 할 수도 있습니다. 그리고 키보드가 무언가 이상하다고 생각합니다. –

+0

mandy, 27 가지 질문 후에 주석에 코드를 게시하는 것보다 더 잘 알아야합니다. 질문을 편집하고 올바른 형식으로 코드를 추가하십시오. – Mat

답변

1

PDF 읽고 의미 텍스트를 저장하지 않습니다 오히려 특히 글리프 (도장 자)에 매핑 문자 코드를 사용 -이 :

내 코드를 찾아주세요 세례반. 그러나 코드 글자 매핑은 코드가 사람이 읽을 수 있도록 일반적인 문자 집합 (예 : ISO-8859-1 또는 UTF-8)과 일치하는 경우가 많습니다. 비록 구두점 문자가 대부분 구두점인데도 "틀린"경우가 있기는하지만 구문 분석 할 수있는 모든 텍스트의 경우입니다.

문서의 "mount_vxfs"텍스트가 완전히 다르게 인코딩되어 불행히도 분명한 가비지가 발생합니다. 궁금하신 분은 코드에서 getPageText()를 getPageContent()로 대체하여 실제로 존재하는 것을 볼 수 있습니다.

PDF 문자를 의미있는 문자로 다시 변환하려면 PDF 판독기가 수많은 변환 테이블 (소위 CMaps 포함)을 사용하여 농구를 뛰어 넘어야합니다. 이것은 많은 프로그래밍 작업이기 때문에 더 간단한 라이브러리는 구현하지 않기로 결정했습니다. CAM :: PDF의 경우입니다.

텍스트를 (을 편집하지 않음) 구문 분석에만 관심이 경우는, 다음과 같은 기술은 내가 성공을 사용 무언가 :

  1. 의 xpdf를 얻습니다 (http://foolabs.com/xpdf) 또는 Poppler (http://poppler.freedesktop.org/). Poppler는 xpdf의 새로운 포크입니다. * nix를 사용하고 있다면 패키지를 사용할 수 있습니다.

  2. 명령 줄 도구 'pdftotext'를 사용하면 파일에서 페이지별로 또는 한 번에 텍스트를 추출 할 수 있습니다.

예 :

#!/usr/bin/perl 
use English; 
my $file_name="vxfs_admin.pdf"; 

open my $text_fh, "/usr/bin/pdftotext -layout -q '$file_name' - 2>/dev/null |"; 
local $INPUT_RECORD_SEPARATOR = "\f"; # slurp a whole page at a time 
while (my $page_text = <$text_fh>) { 
    # this is here only for demo purposes 
    print $page_text if $INPUT_LINE_NUMBER == 19; 
} 
close $text_fh; 

(참고 :. 나는 당신의 링크를 사용하여 검색 문서는 약간 다른, 잘못된 비트 대신 19 페이지에 있습니다)

관련 문제