打印BASE64 $ C $光盘镜像到一个FPDF文件 [英] print BASE64 coded image into a FPDF document

查看:293
本文介绍了打印BASE64 $ C $光盘镜像到一个FPDF文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些如图像存储在数据库中的base64。是否可以直接打印这些数据在PDF文档中,使用FPDF?

的图像数据sctructure

<$p$p><$c$c>data:image/png;base64,iVBORw0KGgoAAAANSUhEUg7AAAfQAAACWCAYAAAAonXpvAAAfgUlEQVR4Ae2dC9BuVVnHuSN3QaBENA9h5A2IcJxMj8hUkymoQDfClIkmrQZr1EydMqapnKRMc8JmHLBBHadJJaV0lKQDZCmCQiqQ2KERUFARDhcFDpx / 33W tznPe / 3ttaa9 / a2Z9/32Xvt5nvVbl2evtdfee9dtS27bt4mACJmACJm8ACJtBvArv123xbbwImYAImYAImIAJ26K4HJmACJmACJjAAAnboAyhEZ8EETMAETMAE7NBdB0zABEzABExgAATs0AdQiM6CCZiACZiACdihuw6YgAmYgAmYwAAI2KEPoBCdBRMwARMwAROwQ3cdMAETMAETMIEBELBDH0AhOgsmYAImYAImYIfuOmACJm

我觉得 $ PDF-方式&gt; imagepng()应在FPDF右功能


解决方案

虽然意见提出一个解决方案TCPDF,我也想指出,有一种方法与FPDF完全做到这一点。思维过程是这样的:


  1. 数据:图像/ PNG; BASE64,从URI使用 爆炸

  2. 德code中的URI与 base64_de code

  3. 去codeD数据保存到一个PNG文件<一个href=\"http://php.net/manual/en/function.file-put-contents.php\"><$c$c>file_put_contents

  4. 生成PDF和 图片添加PNG文件

  5. 删除与 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:

  1. Strip data:image/png;base64, from the URI using explode
  2. Decode the URI with base64_decode
  3. Save the decoded data to a PNG file with file_put_contents
  4. Generate a PDF and add the PNG file with Image
  5. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆