Javascript 使用TCPDF保存PDF时没有输出

Javascript 使用TCPDF保存PDF时没有输出,javascript,php,ajax,tcpdf,Javascript,Php,Ajax,Tcpdf,我已在服务器中安装了tcpdf。我已经检查了文件的存在。在javascript函数中,我通过ajax调用print.php onclick = "savepdf();" javascript功能(在启动ajax之后)是: 这是print.php,我从它的股票示例中复制了它 <?php header("Content-Type: application/octet-stream"); require_once('/tcpdf/tcpdf.php'); $text

我已在服务器中安装了tcpdf。我已经检查了文件的存在。在javascript函数中,我通过ajax调用print.php

onclick = "savepdf();"
javascript功能(在启动ajax之后)是:

这是print.php,我从它的股票示例中复制了它

<?php
    header("Content-Type: application/octet-stream");
    require_once('/tcpdf/tcpdf.php'); 
    $text = $_POST['content'];
    $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    $pdf->SetCreator(PDF_CREATOR);
    $pdf->SetAuthor('SOMEONE');
    $pdf->SetTitle('Report');
    $pdf->SetSubject('Report');
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);
    $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
    $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
    $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
    $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
    $pdf->setFontSubsetting(true);
    $pdf->SetFont('dejavusans', '', 10, '', true);
    $pdf->AddPage();
    $html = $text;
    $pdf->writeHTML($html, true, false, true, false, '');
    $pdf->Output($_SERVER['DOCUMENT_ROOT'] . '/temp/output.pdf', 'F');
    $file = $_SERVER['DOCUMENT_ROOT'] . '/temp/output.pdf';
    header('Content-Disposition: attachment; filename="'.$file.'"');
    header('Content-Length: ' . filesize($file));
    header("Cache-control: private"); //use this to open files directly                     
    readfile($file);
?>


该文件以物理方式保存在服务器上,但不下载。如何排除故障?

您不能通过AJAX请求强制用户下载文件。您需要将浏览器重定向到生成的文件(如果不是私有文件),或者重定向到将输出该文件的php脚本。请参见此处的讨论:
您不能通过AJAX请求强制用户下载文件。您需要将浏览器重定向到生成的文件(如果不是私有文件),或者重定向到将输出该文件的php脚本。请参见此处的讨论:

在没有ajax的情况下调用print.pdf是否有效?你在哪里创建你的
$pdf
对象?我最初没有粘贴那一行,而是编辑了它。是的,直接调用时会创建PDF,但没有提交的文本。您可以尝试
setRequestHeader('Content-Type','application/PDF')
setRequestHeader('Content-Type','application/force-download')
?在没有ajax的情况下调用print.PDF时,它能工作吗?你在哪里创建你的
$pdf
对象?我最初没有粘贴那一行,而是编辑了它。是的,直接调用时会创建PDF,但没有提交的文本。您可以尝试
setRequestHeader('Content-Type','application/PDF')
setRequestHeader('Content-Type','application/force download')
?这是一个有缺陷的概念。我放弃了。取而代之的是,我制作了一个表单,它成功地提交了内容并生成了PDF。这是一个有缺陷的概念。我放弃了。相反,我制作了一个表单,它提交了内容并成功生成了PDF。
<?php
    header("Content-Type: application/octet-stream");
    require_once('/tcpdf/tcpdf.php'); 
    $text = $_POST['content'];
    $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    $pdf->SetCreator(PDF_CREATOR);
    $pdf->SetAuthor('SOMEONE');
    $pdf->SetTitle('Report');
    $pdf->SetSubject('Report');
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);
    $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
    $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
    $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
    $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
    $pdf->setFontSubsetting(true);
    $pdf->SetFont('dejavusans', '', 10, '', true);
    $pdf->AddPage();
    $html = $text;
    $pdf->writeHTML($html, true, false, true, false, '');
    $pdf->Output($_SERVER['DOCUMENT_ROOT'] . '/temp/output.pdf', 'F');
    $file = $_SERVER['DOCUMENT_ROOT'] . '/temp/output.pdf';
    header('Content-Disposition: attachment; filename="'.$file.'"');
    header('Content-Length: ' . filesize($file));
    header("Cache-control: private"); //use this to open files directly                     
    readfile($file);
?>