打印BASE64 $ C $光盘镜像到一个FPDF文件 [英] print BASE64 coded image into a FPDF document
问题描述
我有一些如图像存储在数据库中的base64。是否可以直接打印这些数据在PDF文档中,使用FPDF?
的图像数据sctructure
<$p$p><$c$c>data:image/png;base64,iVBORw0KGgoAAAANSUhEUg7AAAfQAAACWCAYAAAAonXpvAAAfgUlEQVR4Ae2dC9BuVVnHuSN3QaBENA9h5A2IcJxMj8hUkymoQDfClIkmrQZr1EydMqapnKRMc8JmHLBBHadJJaV0lKQDZCmCQiqQ2KERUFARDhcFDpx / 33W tznPe / 3ttaa9 / a2Z9/32Xvt5nvVbl2evtdfee9dtS27bt4mACJmACJm8ACJtBvArv123xbbwImYAImYAImIAJ26K4HJmACJmACJjAAAnboAyhEZ8EETMAETMAE7NBdB0zABEzABExgAATs0AdQiM6CCZiACZiACdihuw6YgAmYgAmYwAAI2KEPoBCdBRMwARMwAROwQ3cdMAETMAETMIEBELBDH0AhOgsmYAImYAImYIfuOmACJm我觉得 $ PDF-方式&gt; imagepng()
应在FPDF右功能
虽然意见提出一个解决方案TCPDF,我也想指出,有一种方法与FPDF完全做到这一点。思维过程是这样的:
- 条
数据:图像/ PNG; BASE64,
从URI使用爆炸
- 德code中的URI与
base64_de code
- 去codeD数据保存到一个PNG文件<一个href=\"http://php.net/manual/en/function.file-put-contents.php\"><$c$c>file_put_contents$c$c>
- 生成PDF和
图片
添加PNG文件 - 删除与
PNG文件取消链接
永远记住错误检查。如果图像无法保存到服务器上,你显然不希望继续执行。请务必始终严格检查函数返回假的!
下面是我的解决方案。我在这个例子中使用一个小的URI的微小图像
常量TEMPIMGLOC ='tempimg.png';$ dataURI = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAMAAADarb8dAAAABlBMVEUAAADtHCTeKUOwAAAAF0lEQVR4AWOgAWBE4zISkMbDZQRyaQkABl4ADHmgWUYAAAAASUVORK5CYII=\";
$ dataPieces =爆炸(,,$ dataURI);
$连接codedImg = $ dataPieces [1];
$德codedImg = base64_de code($连接codedImg);//检查图像是正确去codeD
如果($德codedImg!== FALSE)
{
//保存图片到一个临时位置
如果(的file_put_contents(TEMPIMGLOC,$德codedImg)!== FALSE)
{
//打开新的PDF文档和打印图像
$ PDF =新FPDF();
$ PDF - &GT; AddPage();
$ PDF - &GT;图像(TEMPIMGLOC);
$ PDF - &GT;输出(); //从服务器上删除图像
取消链接(TEMPIMGLOC);
}
}
I've some as base64 stored images in a database. Is it possible to print those data directly in a PDF document, using FPDF?
Data sctructure of the image
data:image/png;base64,iVBORw0KGgoAAAANSUhEUg7AAAfQAAACWCAYAAAAonXpvAAAfgUlEQVR4Ae2dC9BuVVnHuSN3QaBENA9h5A2IcJxMj8hUkymoQDfClIkmrQZr1EydMqapnKRMc8JmHLBBHadJJaV0lKQDZCmCQiqQ2KERUFARDhcFDpx /33W tznPe/ 3ttaa9/ a2Z9/32Xvt5nvVbl2evtdfee9dtS27bt4mACJmACJm8ACJtBvArv123xbbwImYAImYAImIAJ26K4HJmACJmACJjAAAnboAyhEZ8EETMAETMAE7NBdB0zABEzABExgAATs0AdQiM6CCZiACZiACdihuw6YgAmYgAmYwAAI2KEPoBCdBRMwARMwAROwQ3cdMAETMAETMIEBELBDH0AhOgsmYAImYAImYIfuOmACJm
I think $pdf->imagepng()
should be the right function in FPDF.
While the comments suggested a TCPDF solution, I did want to state that there is a way to do this entirely with FPDF. The thought process is like this:
- Strip
data:image/png;base64,
from the URI usingexplode
- Decode the URI with
base64_decode
- Save the decoded data to a PNG file with
file_put_contents
- Generate a PDF and add the PNG file with
Image
- Delete the PNG file with
unlink
Always remember to error check. If the image fails to save to the server you obviously do not want to continue execution. Make sure to always strictly check if the functions return false!
Here is my solution. I used a tiny image for a small URI in this example.
const TEMPIMGLOC = 'tempimg.png';
$dataURI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAMAAADarb8dAAAABlBMVEUAAADtHCTeKUOwAAAAF0lEQVR4AWOgAWBE4zISkMbDZQRyaQkABl4ADHmgWUYAAAAASUVORK5CYII=";
$dataPieces = explode(',',$dataURI);
$encodedImg = $dataPieces[1];
$decodedImg = base64_decode($encodedImg);
// Check if image was properly decoded
if( $decodedImg!==false )
{
// Save image to a temporary location
if( file_put_contents(TEMPIMGLOC,$decodedImg)!==false )
{
// Open new PDF document and print image
$pdf = new FPDF();
$pdf->AddPage();
$pdf->Image(TEMPIMGLOC);
$pdf->Output();
// Delete image from server
unlink(TEMPIMGLOC);
}
}
这篇关于打印BASE64 $ C $光盘镜像到一个FPDF文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!