将使用 FPDF 创建的 pdf 插入/保存到数据库中

Posted

技术标签:

【中文标题】将使用 FPDF 创建的 pdf 插入/保存到数据库中【英文标题】:Insert/Save a pdf created using FPDF into the database 【发布时间】:2020-07-20 02:05:14 【问题描述】:

使用fpdf库生成PDF文件并将文件插入数据库。

我正在使用以下代码:

$content = $pdf->Output($pname.'', 'S');

$sql = "INSERT into data(name) values('".addslashes($content)."')";

if ($conn->query($sql) === TRUE) 
    echo "success";

 else 
    echo "Error: ";


$conn->close();

但是使用它,保存在数据库中的文件是二进制格式而不是 PDF 格式,下载时似乎不正确...

如何解决此问题并将我的文件以.pdf 扩展名保存到数据库中?

【问题讨论】:

问题解决了吗?下面给出的答案看起来很有希望。你试过了吗?它奏效了吗?不?你告诉他们了吗?你会得到什么,“错误:”或其他? “以二进制格式而不是 pdf 格式”没有意义。 PDF 是二进制格式。 你应该写$content = $pdf->Output( 'S'); 只需从插入语句中删除 addslashes 【参考方案1】:

您可以使用base64_encode() 而不是addslashes() 这可以防止由于转换而导致二进制数据出现问题。从 DB 读取时,您需要使用 base64_decode() 来扭转这一点。

更好的选择是在您的数据库中使用 BLOB 列和 php DB 驱动程序的 LOB 功能。对于 PDO,这将是这样的:

$pdo = new \PDO(...);
$fp = fopen('data://' . $content, 'rb');
$stmt = $pdo->prepare("insert into data (name) values (?)");
$stmt->bindParam(1, $fp, PDO::PARAM_LOB);
$stmt->execute();

此解决方案将未修改的二进制数据存储在数据库中。

【讨论】:

Base64 无需浪费 33% 的存储空间(更不用说额外的 CPU)了。

以上是关于将使用 FPDF 创建的 pdf 插入/保存到数据库中的主要内容,如果未能解决你的问题,请参考以下文章

从 PrettyTable 到 pdf 的表格

如何使用php和fpdf创建发票pdf? [关闭]

有没有办法让 FPDF/FPDI 或 Zend_Pdf 支持解析大于 1.4 的 PDF?

FPDF 将文件保存在服务器 QNAP(NAS) 上的文件夹中?

Pdfium 保存 PDF 文档增量

使用 FPDF 通过 PHP 发送 PDF 附件