javascript - 使用 TCPDF 保存 PDF 时无输出

标签 javascript php ajax tcpdf

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

onclick = "savepdf();"

javascript 函数(启动 ajax 后)是:

function savepdf(){
    var html = 'This is a test page.';
    var parameters = "content="+html;
    ajaxRequest.open("POST", 'print.php', true);
    ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            alert('Success');
        }
    };
    ajaxRequest.send(parameters);
}

这是 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 请求下载文件。您需要将浏览器重定向到生成的文件(如果不是私有(private)的),或者重定向到将输出该文件的 php 脚本。请参阅此处的讨论: https://stackoverflow.com/a/9970672/1800369

关于javascript - 使用 TCPDF 保存 PDF 时无输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34783720/

相关文章:

javascript - 在浏览器中替换文件 blob?

php - 让 PHP 使用 MySQL 进行 session 而不是平面文件的简单方法?

php - Cron 调度程序 CakePHP 2.0

javascript - d3 - 画线 n 次

javascript - Bower:找不到适合 Angular 的版本

javascript - 如何在 Protractor 中使用 jquery 获取表列值作为数组

php - 你用 Delphi for PHP 做什么?

jquery - 如何捕获 jQuery.ajax() 中未找到 405 方法

jQuery ajax 不调用 Servlet

javascript - firefox OS 内容安全策略错误 Index.html 中基于 XHR 的应用程序?