Я работаю с AngularJS, и я пытаюсь создать PDF файл в php. Это то, что у меня есть в моем контроллере .js:
$scope.downloadPDF = function(){
$http.post('/download-pdf', { fid: $routeParams.fid })
.success(function(data, status, headers, config){
console.log("success");
})
.error(function(data, status, headers, config){
console.log("error");
});
};
В моем php файле у меня есть следующее, чтобы создать PDF файл с библиотекой FPDF:
function download_pdf()
{
$id = $_POST['fid'];
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename=' . $id . '.pdf');
$pdf->Output('Order123.pdf', 'D');
}
Но запрос отвечает на это вместо того, чтобы открывать диалог сохранения, чтобы сохранить мой pdf.
% PDF-1.3 3 0 obj < > endobj 4 0 obj < > поток x3Rðâ2Ð35W (Сr QÐw3T04Ó30PISp Ez * [¤ (hx¤æää + çå¤ (J * dÔ7W endstream endobj 1 0 obj < endobj 5 0 obj < endobj 2 0 obj & Л; < /ProcSet [/PDF/Text/ImageB/ImageC/ImageI] /Font < /F 1 5 0 R > /XObject < → endobj 6 0 obj & Л; < /Производитель (FPDF 1.7) /CreationDate (D: 20150611094522) > endobj 7 0 obj & Л; < /Тип/Каталог /Страницы 1 0 R > endobj Xref 0 8 0000000000 65535 f 0000000228 00000 n 0000000416 00000 n 0000000009 00000 n 0000000087 00000 n 0000000315 00000 n 0000000520 00000 n 0000000595 00000 n прицеп & Л; < /Размер 8 /Корень 7 0 R /Инфо 6 0 R > startxref 644 %% EOF
Я использовал библиотеку PHPExcel, и это сработало:
$objWriter = PHPExcel_IOFactory::createWriter($ea, 'Excel2007');
// We'll be outputting an excel file
header('Content-type: application/vnd.ms-excel');
// It will be called Submission on [date_now].xls
header('Content-Disposition: attachment; filename="' . $filename . '.xls' . '"');
// Write file to the browser
$objWriter->save('php://output');
Теперь, как я могу сделать эту работу для моего PDF?
UPDATE:
Я редактировал свой код:
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$filename = DXS_VKGROUP_PLUGIN_LIB_DIR . 'uploads/' . $_POST['fid'] . '.pdf';
$pdf->Output($filename, 'F'); // Save file locally
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Type: application-download');
header('Content-Length: ' . filesize($filename));
header('Content-Transfer-Encoding: binary');
header('Content-Disposition: attachment; filename="' . $filename . '"');
$handle = fopen($filename, 'rb');
fpassthru($handle);
fclose($handle);
Файл сохраняется локально, но загрузка не работает. Он не получает моего диалога, чтобы сохранить PDF. Что я делаю неправильно?
ОБНОВЛЕНИЕ 2
Теперь я попытался изменить application-download
в application/pdf
. Он сохраняет файл локально, но я не получаю диалоговое окно загрузки.
Ответ выглядит следующим образом (когда я проверяю сеть в Chrome):
% PDF-1.3 3 0 obj < > endobj 4 0 obj < > поток x3Rðâ2Ð35W (Сr QÐw3T04Ó30PISp Ez * [¤ (hx¤æää + çå¤ (J * dÔ7W endstream endobj 1 0 obj < endobj 5 0 obj < endobj 2 0 obj & Л; < /ProcSet [/PDF/Text/ImageB/ImageC/ImageI] /Font < /F 1 5 0 R > /XObject < → endobj 6 0 obj & Л; < /Производитель (FPDF 1.7) /CreationDate (D: 20150617090832) > endobj 7 0 obj & Л; < /Тип/Каталог /Страницы 1 0 R > endobj Xref 0 8 0000000000 65535 f 0000000228 00000 n 0000000416 00000 n 0000000009 00000 n 0000000087 00000 n 0000000315 00000 n 0000000520 00000 n 0000000595 00000 n прицеп & Л; < /Размер 8 /Корень 7 0 R /Инфо 6 0 R > startxref 644 %% EOF