使用Base64在PHP中附加PDF文件

时间:2017-10-26 16:26:18

标签: php pdf base64 phpmailer file-get-contents

我有一系列base64 PDF文件,我想合并在一起。目前我正在使用file_get_contents(),并且PHPMailer可以单独附加每个。

$woFile = file_get_contents($url);
$invoiceFile = file_get_contents($invPDF64);
$tsFile = file_get_contents($tsPDF64);
...
$mail->AddStringAttachment($woFile, "1.pdf", "base64", "application/pdf");
$mail->AddStringAttachment($invoiceFile, "2.pdf", "base64", "application/pdf");
$mail->AddStringAttachment($tsFile, "3.pdf", "base64", "application/pdf");

我在网上看到的所有例子如FPDF都需要在本地下载文件,至少从我看到的情况来看。有没有办法将每个PDF文件附加到一个,然后将其附加到电子邮件?

提前致谢!

1 个答案:

答案 0 :(得分:1)

我不确定您是否需要将PDF合并为一个PDF,或者您只想要一个文件。以下是两者的选项:

  1. 如果您想将合并所有PDF文件合并为一个PDF文件,那么这是duplicate question。您提到不想拥有本地文件,但这可能是一个不合理的约束(例如,大型PDF的内存问题)。请根据需要使用临时文件并自行清理。
  2. 如果您只想要一个文件,请考虑将文件放入ZIP archive并发送。您可能也希望ZipStream library用于此目的。这是使用本机库的一些最小代码:

    $attachmentArchiveFilename = tempnam('tmp', 'zip');
    $zip = new ZipArchve();
    
    # omitting error checking here; don't do it in production
    $zip->open($attachmentArchiveFilename, ZipArchve::OVERWRITE);
    $zip->addFromString('PDFs/first.pdf', $woFile);
    $zip->addFromString('PDFs/second.pdf', $invoiceFile);
    $zip->addFromString('PDFs/third.pdf', $tsFile);
    $zip->close();
    
    $mail->addAttachment($attachmentArchiveFilename, 'InvoicePDFs.zip');
    
    # be sure to unlink/delete/remove your temporary file
    unlink( $attachmentArchiveFilename );