【问题标题】:FPDF - download file via Javascript without saving on serverFPDF - 通过 Javascript 下载文件而不保存在服务器上
【发布时间】:2023-03-24 16:06:01
【问题描述】:

我想将生成的 pdf 文件保存在用户浏览器上,但将文件直接发送到浏览器,而不是使用临时文件。 PHP 脚本需要来自 JS 的一些信息,因此我使用 POST 将其发送到 PHP 脚本(带有 FPDF)。 下载后我也使用间隔来制作一些东西。 对于这个测试脚本,我想制作所有使用过的功能。但是只下载PDF是行不通的。 Firefox 中的 PDF 文档正在打开,但有 3 个空白页。 在 Chrome 上,它会打开一个新的空白窗口。

Javascript(HTML):

 <html>
        <head>
            <meta charset="utf-8">
            <script>
                var clr_timersControl = new Array();
                clr_timersControl['pdfGenerate'] = 0;
                var i = 0;
                var formData = new FormData();

                var xmlHttp = new XMLHttpRequest();

                formData.append('name', name);

                xmlHttp.onreadystatechange = function() {
                    if(xmlHttp.readyState === 4 && xmlHttp.status === 200) {
                        var pdf = xmlHttp.responseText;        

                        var batch = window.open(
                            'data:application/pdf,'+encodeURIComponent(pdf),
                            'Batch Print',
                            'width=600,height=600,location=_newtab'
                         );
                        clr_timersControl['pdfGenerate'] = 1;
                    }
                }
                xmlHttp.open('post', 'test2.php'); 
                xmlHttp.send(formData);

                var interval = setInterval(function(){
                    console.log(i++);
                    if ( window.clr_timersControl['pdfGenerate'] === 1) {
                        //do something after download pdf file
                        clearInterval(interval);
                    }
                }, 200);
            </script>
        </head>
        <body>
            Text text.
        </body>
    </html>

PHP 脚本:

<?php
header("Content-type:application/pdf");
header("Content-Disposition:attachment;filename='downloaded.pdf'");

require('./clr_php/fpdf.php');

class PDF extends FPDF
{

function Header()
{
    $this->Image('./clr_data/nemoxx/logo.jpg',10,6,30);
    $this->SetFont('Arial','B',15);
    $this->Cell(80);
    $this->Cell(30,10,'Title',1,0,'C');
    $this->Ln(20);
}

function Footer()
{
    $this->SetY(-15);
    $this->SetFont('Arial','I',8);
    $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}

$pdf = new PDF('L','mm','A4');
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','',12);
for($i=1;$i<=40;$i++) {
    $pdf->Cell(0,10,'Printing line number '.$i,0,1);
}

header('Content-Length: '.strlen($pdf));
$pdf->Output('','I');
exit();

【问题讨论】:

  • 嗨@arrowman 你知道如何做到这一点吗?

标签: javascript php fpdf


【解决方案1】:

8.我使用 jQuery 生成 PDF,但它没有显示。

不要使用 AJAX 请求来检索 PDF。

http://www.fpdf.org/en/FAQ.php

您可以将文件保存到服务器并返回 PDF 的 URL 吗?

【讨论】:

  • 不,我无法在服务器上保存文件。这是我知道的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 2011-02-12
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多