2012-10-03 2 views
1

일부 PDF 파일을 TXT로 변환해야합니다. 예를 들어 pdftotext에는 PDF의 테이블에 몇 가지 문제가 있기 때문에 "less"명령으로 끝납니다. 문제는 exec 함수 (또는 shell_exec/system)에서 명령을 실행했을 때 정보가 덜 표시되었음을 나타냅니다. 선택된 PDF는 이진 파일이고 결과 파일은 PDF 데이터가 포함 된 TXT입니다. 그러나 터미널에서 같은 일을 정상적으로 수행하면 모든 것이 정상입니다. 또한 www_data 사용자로 로그인을 시도하고이 사용자로 명령을 실행했지만 아무런 문제가 없습니다.PHP는 exec - binary 파일 경고를 통해 linux "less"명령을 실행합니다.

명령 :

$ less /var/www/original.pdf > /var/www/new.txt 

PHP 코드 : PHP 간부에서

exec("less -f /var/www/original.pdf > /var/www/new.txt 2>&1"); 

결과 :

"/var/www/original.pdf" may be a binary file. See it anyway? 

exec 명령에 "-f"옵션이 있기 때문에 다음이 당신 돈 '예'로 'y'를 눌러야합니다. 어쨌든보고 싶습니다. '

set | grep less 수율 : 모든

LESSCLOSE='/usr/bin/lesspipe %s %s' 
LESSOPEN='| /usr/bin/lesspipe %s' 
      Lossless LZW RLE Zip' -- "$cur")); 
       _apport_parameterless 
       _apport_parameterless 
       _apport_parameterless 
       _apport_parameterless 
_apport_parameterless() 
+0

pdf 파일을 덜 표시 할 수 있습니까? – Prasanth

+0

덜 CSS를 의미하지는 않지만 리눅스 응용 프로그램은 적습니다. –

+0

그 new.txt 파일에 무슨 경고가 나오나요? –

답변

1

lesspipe 또는 lessfile과 같이 입력 전 처리기가 설치되어 있으므로 사용자 콘솔에서 less이라는 PDF 파일을 표시 할 수 있습니다. less이 그 전 처리기를 사용하게 만드는 방법은 lesspipelessfile 스크립트를 가리키는 LESSOPEN이라는 환경 변수를 읽는 것입니다.

웹 서버가 환경 변수 및 셸 명령을 통해 less에 대한 호출이 PDF를 제대로 구문 분석 할 수 있도록이 동작을 복제 할 수있는 방법이있을 수 있습니다.

less을 직접 호출하는 대신 변환을 수행하는 bash 스크립트를 호출하는 것이 좋습니다. 그렇게하면 bash 스크립트는 적절한 환경 변수를 설정하고 PDF 파일을 읽을 수있는 출력으로 변환하는 적절한 명령을 실행할 수 있습니다. 그것이 작동하지 않는 경우

exec("/path/to/your/script/script.sh /var/www/original.pdf /var/www/new.txt"); 

eval $(lessfile)eval $(lesspipe)을 변경해보십시오 : PHP에서,이 같은 해당 스크립트를 호출

#!/bin/bash 

eval $(lesspipe) 
less $1 > $2 2>&1 

다음 : 여기

는이 작업을 수행하는 방법의 예 .

+0

이것은 내 문제를 해결했습니다. 정말 고마워. ;-) –

+0

괜찮습니다! 다행히 도울 수있어 :) –

0

첫째, 적은 텍스트 스트림을 읽을 수있는 대화 형 프로그램입니다. 이 경우 cat을 대신 사용해야합니다. 이 과정은 PDF가 텍스트 기반이 아닌 바이너리 형식이기 때문에 작동하지 않습니다.

pdftotext과 같은 PDF 변환기를 사용하시지 않으십니까?

+0

pdftotext가 일부 PDF 파일을 제대로 변환하지 않기 때문입니다. 예를 들어, PDF 파일을 양면으로 나누는 테이블이있는 경우, pdftotext 결과는 TXT 파일의 맨 위에, 오른쪽은 결과 TXT 파일의 맨 아래에 처리됩니다. 그러나 결과가 적 으면 테이블의 "공백"을 공백으로 바꿉니다. 왼쪽에서 입력 한 항목이 같은 줄에 있고 오른쪽에서 항목을 볼 수 있습니다. –

0

PHP 코드는 어떻게 실행 되었습니까? 명령 줄에서 php file.php을 사용하거나 브라우저를 사용하여 웹 서버를 방문하면 http://servername/something/file.php?

PHP 코드가 실행될 때 less과 같지 않습니다. 명령 줄에서 수행 할 때 less을 실행하면 같지 않습니다.