2011-11-09 3 views
0

웹 사이트 URL을 입력 할 수있는 Wkhtmltopdf 양식을 만드는 방법에 대한 인터넷 자습서를 찾았습니다. 그러면 자동으로 PDF가 작성됩니다. 합니다 (index.php를 붙여 넣은)wkhtmltopdf가 웹 사이트의 PDF를 만들지 않습니다

형태 :

<form action="http://localhost:8888/dev.crm/wkhtmltopdf.php" method="POST">Website:&nbsp; 
<input name="url" size="30" type="text" value="http://www.examplewebsite.com" /> 
<input type="submit" value="transform into a pdf" /> </form> 

http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.10.0_rc2-static-amd64.tar.bz2

두 개의 코드가 있습니다

먼저 나는에서 간부 파일 wkhtmltopdf - AMD64를 다운로드했다 wkhtmltopdf.php 파일 (wkhtmltopdf.php에 붙여 넣음) :

<?php 

/**************************** 
 BEGIN CONFIG 
****************************/ 

// path to the program wkhtmltopdf 
$conf['wkhtmltopdf'] = "http://www.mydomain.com/var/wkhtmltopdf-amd64"; 

// arguments for the programma wkhtmltopdf 
// for example: --margin-top 50 --margin-bottom 30 
// look: http://code.google.com/p/wkhtmltopdf/w/list 
$conf['wkhtmltopdf_arg'] = ""; 

/**************************** 
 END CONFIG 
****************************/ 

// reads url 
$pattern = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i"; 
if (!preg_match($pattern, $_REQUEST['url'])) { 
die("no valid URL"); 
} 

// temporary file 
$output = "http://www.mydomain.com/dev.crm/tmp/output.pdf"; 

// gets the html of the document 
$html = file_get_contents($_REQUEST['url']); 

// gets the title of document 
preg_match("/\<title\>(.+)\<\/title\>/is", $html, $matches); 

// looks if there is a title 
if (empty($matches[1])) { 
$matches[1] = "output.pdf"; 
} 

// create pdf from html 
system($conf['wkhtmltopdf'] . " " . $conf['wkhtmltopdf_arg'] . " " . $_REQUEST['url'] . " " . $output); 

// output pdf to the browser 
header("Content-Type: application/pdf"); 
header("Content-Disposition: attachment; filename=\"" . $matches[1] . ".pdf\""); 
readfile($output); 

// remove pdf 
unlink($output); 

exit(0); 
?> 

양식은 완벽하게 작동하며 wkhtmltopdf.php를 호출하지만, 어떻게 든 제 서버는 wkhtmltopdf-amd64를 사용하지 않습니다. 변환을 PDF 단추로 누르면 웹 페이지가로드되지만 PDF 파일을 열려고 시도하지만 오류가 발생합니다. '파일'.... pdf '는 열기가 불가능합니다. 비었다. PDF를 저장하지만 PDF 크기는 0 바이트입니다.

누구든지이 문제를 어떻게 해결할 수 있는지 알고 계십니까? 내 웹 서버에서 wkhtmltopdf-amd64 파일을 사용하지 않는다고 생각합니다.

// 갱신

내가 형태로 내가 로컬 호스트 URL을 붙여 보았다

. 나는 그 라인을 변경했다 :

output = "/ tmp/output.pdf"; 이제 새 페이지에서 오류가 발생했습니다. 경고 : system()이 보안상의 이유로 /home/.../domains/.../public_html/.../wkhtmltopdf.php on 40 행에 비활성화되었습니다.

경고 : 헤더 정보를 수정할 수 없습니다 - 이미 보낸 헤더 (/home/.../domains/.../public_html/.../wkhtmltopdf.php:40에서 출력 시작됨) /home/.../domains /.../public_html/.../wkhtmltopdf.php on line 43

경고 : 헤더 정보를 수정할 수 없습니다 - 이미 보낸 헤더 (/home/.../domains/.../public_html에서 출력 시작됨) /.../wkhtmltopdf.php:40)

라인 44 /home/.../domains/.../public_html/.../wkhtmltopdf.php에 경고 : ReadFile을 (/ TMP/출력. pdf) [function.read file] : 스트림을 열지 못했습니다. /home/.../domains/.../public_html/stage/wkhtmltopdf.php on line 45

(the ...은 내 도메인 임). 난 정말 당신이 할 수있다 몇몇 URL로 출력 그래서,이 솔루션은 서버에 출력을하는 것입니다 생각하지 않습니다

$output = "/tmp/output.pdf"; 

:)

답변

1

같은 뭔가

$output = "http://www.mydomain.com/dev.crm/tmp/output.pdf"; 

를 수정하십시오.

+0

내 게시물을 업데이트했습니다. 이제 오류가 발생합니다. –

+0

경고 : 보안상의 이유로 system()이 비활성화되었습니다. 시스템 호출을 사용할 수없는 것으로 보입니다. 당신은 php.ini에서 그것을 변경할 수 있습니다 –

+0

어떻게 php.ini에서 그것을 변경한다는 것을 의미합니까? 나는 내 HTML 파일 안에 그 파일이 없다. 그 안에 무엇을 넣어야합니까? 여전히 작동하지 않습니다. –

관련 문제