2017-11-10 3 views
1

저는 Drupal 모듈에 웹 서비스를 구축했습니다. 내 문제는 Drupal 또는 webservice와 관련이 없습니다. 그것은 잘 작동합니다.pdf 소스 코드를 변수에 저장하여 파일을 만들고 다운로드하는 방법은 무엇입니까?

사용자가 양식을 채우고 제출하고 웹 서비스에 연결됩니다. 사용자가이 웹 서비스에 연결되어있는 경우

는, 내가 변수에 저장하여 PDF 소스 코드를 얻을 : 나는 테스트 목적으로 $result의 내용을 표시하는 경우 $result

PDF 파일의 소스 코드 맞습니다. 여기

echo '<pre>' . $result . '</pre>'; 

내가이 pdf 파일을 다운로드하는 사용자를 싶습니다 지금 $result

%PDF-1.4 
1 0 obj 
<< 

의 시작입니다. 웹 서비스를 작성하지 않았기 때문에 고객의 이전 코드를 사용했습니다. 모듈과 모든 PHP 코드를 SoapClient과 연결하여 작성했습니다.

그는이 일을했다 : 여기

header("Content-disposition: attachment; filename=bulletin.pdf"); 
header("Content-Type: application/pdf"); 
echo $result; 
exit; 

을 그리고 것은 내 문제입니다 : 제대로 작동하지만 일부 HTML은 PDF 소스 코드의 시작 부분에 추가가 나타났습니다

. Chrome, Firefox, Preview (OSX)는 파일을 읽을 수 있지만 Acrobat은 읽을 수 없습니다. 그리고이 여분의 HTML을 허용하고 싶지 않습니다.

추가 된 추가 HTML은 현재 페이지 HTML 코드 (양식이있는 곳)입니다.

<!DOCTYPE html> 
<html lang="fr" dir="ltr"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 

%PDF-1.4 
1 0 obj 
<< 

이걸 어떻게 방지 할 수 있습니다

: 여기

는 PDF 파일의 소스 코드 (내-pdf.pdf) I 코드 편집기로 열면입니까? 내 PHP 코드를 다른 PHP 파일 (HTML없이 Drupal 외부에 놓으면 코드가 작동 함).

나는 (버퍼 등을 세척 다른 헤더)는 많은 것을 테스트 한 :

ob_clean(); 
flush(); 
header("Content-type:application/pdf"); 
header("Content-Disposition:attachment;filename='downloaded.pdf'");   
echo $result; 
exit; 

무엇을 내 header 잘못 나는 처음에이 html 코드를 얻을 이유는 무엇입니까? echo $result없이이 파일을 생성 할 수있는 방법이 있습니까?

답변

1

프레임 워크는 페이지에 일반적인 것을 생성하는 데 유용한 도구입니다. 이 경우 프레임 워크가 여분의 HTML을 유발할 가능성이 큽니다. 프레임 워크없이 php 파일을 생성하면이 파일을 테스트 할 수 있습니다. POST를하고 HTML이 없으면 내 의견이 확인됩니다. 이 경우 Drupal에서이 작업을 수행해야합니다.

+0

예, 맞습니다. 제 질문에서 언급했듯이 모든 PHP 코드를 테스트했습니다. Drupal (HTML이없는 파일, PHP 만) 외부의 파일에서 제대로 작동합니다. 나는 많은 질문을하기 전에 읽었고,'echo $ results'는 적절한'http-headers '를 보낸 후에 파일을 생성하는 올바른 방법이라고 생각합니다. –

+0

해결책을 찾았습니다. 내 대답을 게시했습니다. 좋은 접근 방법인지는 모르겠지만 PDF 소스 코드에는 HTML 코드가 없습니다. 내 해결책에 대해 어떻게 생각하세요? –

+1

@ SébastienGicquel 작동해야하지만 이미 작성된 헤더를 제거하는 것이 아니라 처음부터 불필요한 헤더를 작성하는 것이 좋습니다. 예를 들어 AJAX를 사용할 수 있습니다. https://api.drupal.org/api/examples/ajax_example%21ajax_example.module/group/ajax_example/7.x-1.x –

0

나는 해결책을 찾았지만 이것이 최선의 접근법인지는 모르겠다. 이 아이디어는 pdf 소스 코드에 추가 된 html을 삭제하는 것입니다.

ob_end_clean(); 
header("Content-type:application/pdf"); 
header("Content-Disposition:attachment;filename='downloaded.pdf'"); 
ob_end_clean(); 
print $result; 
exit(); 

참고 : 나는 이유를 알고하지 않습니다

작동

최종 코드는 청소 (삭제) 출력 버퍼와 출력을 버퍼링을 종료 - 나는 ob_end_clean

위해서는 ob_end_clean를 사용 하지만 전 http 헤더를 앞뒤로 청소해야했습니다

관련 문제