2012-07-23 3 views
1

데이터베이스에서 얻을 수있는 정보가있는 PDF 파일을 생성해야합니다. PHPExcel을 사용하여이 작업을 수행하고 있지만, 여기 버튼을 클릭하면됩니다. 그래서 모든 정보를 가져 와서 PDF에 넣으면 내 페이지에 "쓰레기"가 많이 생깁니다. 메모장에서 PDF를 열려고하면이 쓰레기와 비슷하지만 무작위로 기호가 표시됩니다. 여기 PHPExcel이 메인 페이지에 쓰레기를 표시합니다

내가 그것을 어떻게

나는 형태로 표시되는 모든 정보를 얻기 위해 $.ajax 전화를 사용하고

:

$.ajax({ 
    // gets all the information and puts them into the form and several tables 
}); 

그럼 내가 버튼 report에 이벤트 처리기를 추가를 그래서 나는 보고서를 채우기 위해 필요한 정보를 수집 할 PHP 스크립트에 요청 ID를 보냅니다.

report.on('click',function(){  
    $.ajax({ 
     url : '../../php/reports/requestReport.php', 
     type : 'post', 
     data : {'idRequest' : id }, 
     dataType : 'json', 
     success : function(response){ 
      console.log(response); 
     }, 
     error : function(response){ 
      if(response.responseText != undefined) 
       $('body').append(response.responseText);    
      console.warn(response); 
     } 
    }); 
}); 

<?php 
    require '../functions.php'; 
    require '../classes/PHPExcel.php'; 

    if(isset($_POST['idRequest'])) 
     $idRequest = $_POST['idRequest']; 
    else{ 
     $idRequest = false; 
     echo json_encode(array("ExitCode"=>1,"Message"=>"idRequest Not Received","Location"=>"requestReport.php")); 
    } 


if($idRequest){ 
try{ 
    // get all the data 
    // save the request and send it to the report 
    $excel = new PHPExcel(); 
    //Initializing 
    $excel->getProperties()->setCreator("TTMS") 
         ->setLastModifiedBy("TTMS") 
         ->setTitle("Request update $idRequest"); 

    $excel->setActiveSheetIndex(0) 
       ->setCellValue('C1', 'Request For Q.A./Q.C./Testing'); 

    // Rename worksheet 
    $excel->getActiveSheet()->setTitle("$idRequest"); 


    // Set active sheet index to the first sheet, so Excel opens this as the first sheet 
    $excel->setActiveSheetIndex(0); 


    // Redirect output to a client’s web browser (PDF) 
    header('Content-Type: application/pdf'); 
    header('Content-Disposition: attachment;filename="Update_Request_'.$idRequest.'.pdf"'); 
    header('Cache-Control: max-age=0'); 

    $objWriter = PHPExcel_IOFactory::createWriter($excel, 'PDF'); 
    $objWriter->save('php://output'); 
} catch(PDOException $ex){ 
    echo json_encode(array("ExitCode"=>2,"Message"=>$ex->getMessage(),"Location"=>"requestReport.php PDOException")); 
} 

그래서 긴 이야기의 짧은 내가 양식이 페이지에 쓰레기를 얻을 :

그리고 내 PHP 파일에 내가 이런 식으로 뭔가가있다. 나는 이것이 ajax을 통해 이것을하고 있다는 사실과 관련이 있다고 생각하지만, 이것을 수행해야하므로 echo의 코드에서 오류를보고해야합니다.

+0

혼란 스럽습니다. Excel 스프레드 시트를 생성하고 있지만 PDF로 이름을 지정하고 있습니까? PDF는 결코 Excel 스프레드 시트가 아니며 절대로 사용하지 않았으며 결코 사용하지 않을 것입니다. 따라서 쓰레기를 버리는 것은 당연합니다. 이는 .jpg 이미지의 이름을 "cutekittens.txt"로 바꾸고 메모장에서 이미지를 표시 할 수있을 것으로 기대하는 것과 같습니다. –

+0

PHPExcel을 사용하면 Excel 파일을 만들 수 있지만 결국에는 PDF로 저장합니다.이 대부분은 PHPExcel의 설명서에있는 자습서에서 복사 한 것입니다. –

답변

0

당신은

$('body').append(response.responseText);    

브라우저가 HTML 페이지에 표시된 모든 가정 기존의 HTML 페이지 내부의 PDF 출력을 작성하는 것은 HTML 마크 업, 이진 데이터의 아닌 스트림입니다.

성공하면 출력을 새 브라우저 창으로 지정하십시오.

+0

어떻게 자바 스크립트에서 다른 창을 열 수 있습니까? –

0

모든 출력을 HTML 파일로 작성한 다음 wkhtmltopdf ->http://code.google.com/p/wkhtmltopdf/을 사용하여 PDF로 변환하십시오. 그것은 굉장한 작동합니다! 다음, 이제 당신이 가지고있는 기존 HTML 파일

// convert to PDF 
    $output = shell_exec('wkhtmltopdf --page-size Letter /path/to/folder/your_file.html /path/to/folder/your_file.pdf'); 
    if (strpos($output,'Error') == false){ 
     $output = shell_exec('rm /path/to/folder/your_file.html'); 
    }else{ 
     die("error creating pdf, please contact IT administrator."); 
    } 

을 제거 당신이 PDF로 변환이 성공되면 다음

if (!$handle = fopen('/path/to/folder/your_file.html', 'w')) { 
    die("Cannot open file for write"); 
} 

$data_string = "<html><body></body></html>"; //all your html output goes here, formatted correctly, etc 

// Write somecontent to our opened file. 
if (fwrite($handle, $data_string) === FALSE) { 
    die("Cannot write to file"); 
} 

: 여기

당신이 당신의 HTML 파일을 생성 할 때 사용하는 코드입니다 위치에 앉아있는 PDF -> /path/to/folder/your_file.pdf으로 사용자가 다운로드 할 수 있습니다.

+0

웹킷 엔진을 사용하는 것을 볼 수 있습니다.이 작업을 100 % 파이어 폭스와 함께, 문제가되지 않을까요? –

+0

게다가 내 사용자가 명령 줄을 사용하도록 강요한다고 생각합니다. –

+0

이것은 모든 서버 측입니다. 클라이언트 컴퓨터가 아닌 웹 서버의 html 파일로 출력 한 다음 PHP를 사용하여 HTML 파일을 PDF로 변환합니다. 그런 다음 클라이언트가 PDF를 다운로드하게하십시오. 나는 예제 스크립트로 나의 대답을 업데이트 할 것이다. –

관련 문제