PHP实现将网页转为图片:html->pdf->png

本文介绍了如何在Linux环境下,通过PHP结合Imagick库和html2fpdf工具,将网页内容转换成PDF文件,再进一步转化为PNG图片。首先,详细说明了Imagick的安装过程,然后提供了html2fpdf的下载链接和提取码,以帮助读者获取并安装该包。接着,讨论了使用mpdf类解决HTML转PDF时可能出现的乱码问题,最后阐述了将生成的PDF转换为PNG图像的步骤。
摘要由CSDN通过智能技术生成
  1. imagick环境安装(Linux)

    1. 下载html2fpdf包:
      链接: https://pan.baidu.com/s/1pAzFuIKi0JK4h6PfmiETpg 提取码: a3jd
    tar –zxvf ImageMagick-6.9.10-12.tar.gz
    cd ImageMagick-6.9.10-12
    ./configure --prefix=/usr/local/imagemagick
    make && make install
    
    1. 下载安装Imagick
    wget http://pecl.php.net/get/imagick-3.1.0RC1.tgz
    tar -zxvf imagick-3.1.0RC1.tgz
    cd imagick-3.1.0RC1
    ln -s /usr/local/imagemagick/include/ImageMagick-6 /usr/local/imagemagick/include /ImageMagick
    /usr/local/php/bin/phpize  
    ./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick
    make && make install
    
    yum install ImageMagick-devel  //必须安装,否则调用$im->readImage会出现500错误
    
    
  2. 将html转pdf
    下载mpdf类:链接: https://pan.baidu.com/s/1lkVsx3sNhViKhut94gSKnQ 提取码: i4nq
    解决HTML转PDF乱码问题;

    include('mpdf.php');
     $mpdf=new mPDF('UTF-8','A1','','',0,0,0,0);//设置编码、页面大小,以及在pdf上面的顶点坐标
     $mpdf->useAdobeCJK = true;
     $mpdf->SetAutoFont(AUTOFONT_ALL);
     $mpdf->SetDisplayMode('fullpage');
     //$mpdf->watermark_font = 'GB';
     //$mpdf->SetWatermarkText('中国水印',0.1);
     $url = "pdf.html";
     $strContent =file_get_contents($url);
     //print_r($strContent);die;
     $mpdf->showWatermarkText = true;
     $mpdf->SetAutoFont();
     //$mpdf->SetHTMLHeader( '头部' );
     //$mpdf->SetHTMLFooter( '底部' );
     $mpdf->WriteHTML($strContent);
     $mpdf->Output("pdf.pdf");
    
    
  3. 将pdf转png

    /**
     * PDF2PNG
     * @param $pdf  待处理的PDF文件  
     * @param $path 待保存的图片路径
     * @param $page1 待导出的页面 -1为全部 0为第一页 1为第二页
     * @return      保存好的图片路径和文件名
     * 注:此处为坑 对于Imagick中的$pdf路径 和$path路径来说,   php版本为5+ 可以使用相对路径。php7+版本必须使用绝对路径。所以,建议大伙使用绝对路径。
     */
    function pdf2png($pdf,$path,$page1=-1)
    {
          
        if(!extension_loaded(
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
#include "mylogin.h" mylogin::mylogin(QWidget *parent) : QDialog(parent) { this->init_ui(); connect(this->bnt_login, &QPushButton::clicked, this, &mylogin::do_login); connect(this->bnt_register, &QPushButton::clicked , this ,&mylogin::do_enroll); } mylogin::~mylogin() { } void mylogin::init_ui() { this->setFixedSize(QSize(600,350)); this->setWindowTitle(tr("岑超升")); this->setWindowIcon(QIcon(":/src/1.png")); this->lb1 = new QLabel(); this->lb2 = new QLabel(); this->lb3 = new QLabel(); this->lb1->setFixedSize(QSize(560,200)); QPixmap pic; pic.load(":/src/2.png"); //this->lb1->setPixmap(pic.scaled(this->lb1->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); this->lb1->setPixmap(QPixmap(":/src/2.png")); this->lb2->setText(tr("用户名:")); this->lb3->setText(tr("密 码:")); this->usr_name_le = new QLineEdit(); //这两个参数后面传入信号中去,然后emit发射出去 this->usr_pass_le = new QLineEdit(); this->usr_pass_le->setEchoMode(QLineEdit::Password); this->bnt_login = new QPushButton(tr("登 陆")); this->bnt_register = new QPushButton(tr("注 册")); this->hb1 = new QHBoxLayout(); this->hb2 = new QHBoxLayout(); this->hb3 = new QHBoxLayout(); this->hb1->addWidget(this->lb2); this->hb1->addWidget(this->usr_name_le); this->hb2->addWidget(this->lb3); this->hb2->addWidget(this->usr_pass_le); this->hb3->addWidget(this->bnt_login); this->hb3->addWidget(this->bnt_register); this->vb1 = new QVBoxLayout(); this->vb1->addWidget(this->lb1); this->vb1->addLayout(this->hb1); this->vb1->addLayout(this->hb2); this->vb1->addLayout(this->hb3); this->setLayout(this->vb1); } void mylogin::do_login() { emit sig_login(usr_name_le->text(), usr_pass_le->text()); //需要把这里输入的账号密码信息发送到myapp那去,用到的函数是emit //需要自定义一个信号,sig_login //这个槽函数能够发出信号 } void mylogin::do_enroll() { emit sig_enroll(); }用C++语言解释并注释每行代码,并说明他们的功能和作用
06-09
```C++ #include "mylogin.h" //引入自定义的头文件mylogin.h mylogin::mylogin(QWidget *parent) : QDialog(parent) //类mylogin的构造函数,继承自QDialog { this->init_ui(); //调用私有函数init_ui来初始化UI connect(this->bnt_login, &QPushButton::clicked, this, &mylogin::do_login); //连接信号和槽函数,当点击登录按钮时,执行槽函数do_login connect(this->bnt_register, &QPushButton::clicked , this ,&mylogin::do_enroll); //连接信号和槽函数,当点击注册按钮时,执行槽函数do_enroll } mylogin::~mylogin() //类mylogin的析构函数 { } void mylogin::init_ui() //初始化UI { this->setFixedSize(QSize(600,350)); //设置窗口大小为600*350 this->setWindowTitle(tr("岑超升")); //设置窗口标题为“岑超升” this->setWindowIcon(QIcon(":/src/1.png")); //设置窗口图标为路径下的1.png this->lb1 = new QLabel(); //创建一个QLabel对象 this->lb2 = new QLabel(); //创建一个QLabel对象 this->lb3 = new QLabel(); //创建一个QLabel对象 this->lb1->setFixedSize(QSize(560,200)); //设置QLabel大小为560*200 QPixmap pic; //创建一个QPixmap对象 pic.load(":/src/2.png"); //加载图片路径下的2.png this->lb1->setPixmap(QPixmap(":/src/2.png")); //设置QLabel显示图片 this->lb2->setText(tr("用户名:")); //设置QLabel显示文本为“用户名:” this->lb3->setText(tr("密 码:")); //设置QLabel显示文本为“密 码:” this->usr_name_le = new QLineEdit(); //创建一个QLineEdit对象 this->usr_pass_le = new QLineEdit(); //创建一个QLineEdit对象 this->usr_pass_le->setEchoMode(QLineEdit::Password); //设置密码输入框的显示模式为“*” this->bnt_login = new QPushButton(tr("登 陆")); //创建一个QPushButton对象,设置显示文本为“登陆” this->bnt_register = new QPushButton(tr("注 册")); //创建一个QPushButton对象,设置显示文本为“注册” this->hb1 = new QHBoxLayout(); //创建一个QHBoxLayout对象 this->hb2 = new QHBoxLayout(); //创建一个QHBoxLayout对象 this->hb3 = new QHBoxLayout(); //创建一个QHBoxLayout对象 this->hb1->addWidget(this->lb2); //将QLabel对象添加到水平布局中 this->hb1->addWidget(this->usr_name_le); //将QLineEdit对象添加到水平布局中 this->hb2->addWidget(this->lb3); //将QLabel对象添加到水平布局中 this->hb2->addWidget(this->usr_pass_le); //将QLineEdit对象添加到水平布局中 this->hb3->addWidget(this->bnt_login); //将QPushButton对象添加到水平布局中 this->hb3->addWidget(this->bnt_register); //将QPushButton对象添加到水平布局中 this->vb1 = new QVBoxLayout(); //创建一个QVBoxLayout对象 this->vb1->addWidget(this->lb1); //将QLabel对象添加到垂直布局中 this->vb1->addLayout(this->hb1); //将水平布局对象添加到垂直布局中 this->vb1->addLayout(this->hb2); //将水平布局对象添加到垂直布局中 this->vb1->addLayout(this->hb3); //将水平布局对象添加到垂直布局中 this->setLayout(this->vb1); //设置窗口的布局为垂直布局 } void mylogin::do_login() //槽函数do_login的实现 { emit sig_login(usr_name_le->text(), usr_pass_le->text()); //发射sig_login信号,并将输入的账号密码信息作为参数传递出去,供其他函数使用 } void mylogin::do_enroll() //槽函数do_enroll的实现 { emit sig_enroll(); //发射sig_enroll信号,不带参数 } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值