使用 Base64 附加 PHP 中的 PDF 文件

Appending PDF Files in PHP with Base64

我有一系列 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 文件中的每一个附加到一个文件中,然后将其附加到电子邮件中?

提前致谢!

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

  1. 如果您想将所有 PDF 合并 到一个 PDF 文件中,那么这是一个 duplicate question。您提到不想拥有本地文件,但这可能是一个不合理的约束(例如,大型 PDF 的内存问题)。适当使用临时文件并自行清理。
  2. 如果您只想要一个文件,考虑将这些文件放入 ZIP archive and sending that. You might also like the 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 );