当前位置: 首页 > 知识库问答 >
问题:

PHP将徽标添加到存储在数据库(MySQL)中的现有PDF中

谢唯
2023-03-14

我正在做一个基本的系统,工作人员上传一个带有一些描述的pdf文件,并将这些数据存储在MySQL数据库中。

管理员将查看此pdf,如果一切正常,请单击批准。

将在带有批准标志的pdf文件中插入图像。

我使用fpdf和fpdi类来实现这一点,如果PDF文件存储在实际路径上,我会设法实现这一点,如下面的代码所示。

<?php

use setasign\Fpdi\Fpdi;

require_once('fpdf/fpdf.php');
require_once('fpdi2/src/autoload.php');

// initiate FPDI
$pdf = new Fpdi();
// add a page
$pdf->AddPage();
// set the source file
$pdf->setSourceFile('PdfDocument.pdf');
// import page 1
$tplIdx = $pdf->importPage(1);
// use the imported page and place it at posithtml" target="_blank">ion 10,10 with a width of 100 mm
$pdf->useTemplate($tplIdx, 10, 10, 100);

// now write some text above the imported page
$pdf->SetFont('Helvetica');
$pdf->SetTextColor(255, 0, 0);
$pdf->SetXY(30, 30);
$pdf->Write(0, 'This is just a simple text');

$pdf->Output();

但是当我尝试使用$pdf时-

    // set the source file
//$pageCount = $pdf->setSourceFile("http://localhost/pdf/getpicture.php?fid=2");

$stream = fopen('data:text/plain,' . urlencode("http://localhost/pdf/getPDF.php?fid=2"), 'rb');
//$reader = new SetaPDF_Core_Reader_Stream($stream);
$pageCount = $pdf->setSourceFile($stream);

我的问题是如何从MySQL字符串中导入PDF,以供fpdf和fpdi或任何其他免费PDF类编辑。

注意:我尝试使用stream\u wrapper\u register,但到目前为止运气不佳。就像在这个链接中一样https://www.setasign.com/support/faq/miscellaneous/using-a-pdf-from-a-php-variable-instead-of-a-file/

请帮我举一个简单的例子,因为我不太熟悉PDF类。

谢谢你。

共有2个答案

廖弘伟
2023-03-14

您不应该使用额外的HTTP请求从数据库访问文件!

FPDI 2允许您通过StreamReader类从任何源读取:

// use a resource
$fh = fopen('a/path/to/a.pdf', 'rb');
$pdf->setSourceFile(new StreamReader($fh));
// same as
$pdf->setSourceFile($fh);
// don't forget to call fclose($fh);

// use a path
$path = 'a/path/to/a.pdf';
$pdf->setSourceFile(StreamReader::createByFile($path));
// same as
$pdf->setSourceFile($path);

// use a string
$pdfString = '%%PDF-1.4...';
$pdf->setSourceFile(StreamReader::createByString($pdfString));

因此,不要调用外部脚本,而是在数据库中查询PDF并将其作为字符串传递。

PS:你不能用FPDI编辑PDF!

尹承业
2023-03-14

我认为你麻烦的根源在于:

$stream = fopen('data:text/plain,' . urlencode("http://localhost/pdf/getPDF.php?fid=2"), 'rb');

PHP的fopen函数返回一个文件指针,并且不提供所需PDF文件的名称。

所以以后你打电话的时候

$pageCount = $pdf->setSourceFile($stream);

$stream不是带有PDF文件名的字符串。

如果您的http://localhost/pdf/getPDF.php?fid=2URL正在返回PDF的文件名,请尝试file_get_contents这样获取该值:

$pdf_file = file_get_contents('http://localhost/pdf/getPDF.php?fid=2');

然后再打电话

$pdf->setSourceFile($pdf_file);
 类似资料:
  • 问题内容: 我不敢相信我无法做到这一点,但我希望能够将当前日期和时间从php存储到mysql表中。 表中的列是类型datetime。我已经试过了 但是我的时间戳记为0000-00-00 00:00:00 这一定很容易做到,但我无法使其正常运行!我想使用来自php的时间戳,而不是使用mysql now()函数 问题答案: 不要将其另存为Unix Timestamp(输出),而是另存为DATETIME

  • 问题内容: 我正在开发一个PHP应用程序,该程序需要将各种设置存储在数据库中。客户经常询问是否可以添加或更改/删除某些内容,这已导致表格设计出现问题。基本上,我有很多布尔字段,它们仅指示是否为特定记录启用了各种设置。 为了避免使表格混乱,我考虑将数据存储为序列化数组。我已经读过,这被认为是不好的做法,但是我认为这是使用这种方法的合理案例。 有什么真正的理由避免这样做吗? 任何建议表示赞赏。 谢谢。

  • 我在生产中有一个基于Hibernate的应用程序,有一个大型数据库。我需要在这个应用程序中向两个实体(两个表)添加审计,我决定使用Envers。 对于每次插入、更新或删除,Envers都会向实体的审核表中添加一条新记录。 如果从应用程序一开始就支持Envers,那么审计表将在实体创建(INSERT)时填充。 Envers留档非常薄,没有提到任何关于将Envers添加到现有应用程序的内容。 如果我简

  • 我无法使此表单成功地将数据提交到数据库。我已经验证了数据库/表是否存在(模式如下所示),并且出于某种原因,它没有将其插入数据库。当我尝试提交示例数据时,它不会改变页面,只是坐在那里。发生了什么事? 模式: 食物(PID INT NOT NULL自动递增,主键(PID),名称VARCHAR(20),类型VARCHAR(9),NumCals INT,健康BOOL,注释文本)

  • 我正在尝试将一个字节数组存储到mySQL中,其中包含加密的“密码”。我尝试过使用Blob和varbinary数据类型,但是当我提取加密的数据时,它似乎没有被正确解密,因为存储的字节数组与我开始使用的字节数组不同。 下面的加密/解密代码 我已经打印出字节数组,看看是否存在差异,正如您可以看到的,在转换到数据库时,它确实发生了变化,我不确定如何克服这个问题 字节数组输出(上为原始字节数组,下为来自数据

  • 我正在尝试向PDF文档的第一页添加一些内容。这样做的合适方式是什么? 目前,我的代码可以工作,但它会在文档的第一页之前添加(插入)一个新页面。这里可以用什么来代替 因此,我正在阅读的文档中的内容将作为内容而不是新页面添加到现有的第一页