mPdf中的图像未在服务器中显示,但在localhost中运行良好

时间:2017-08-31 11:37:23

标签: php wordpress image mpdf

在WordPress项目中,我使用mPDF生成pdf并通过Mandrill将其作为附件发送。唯一的问题是图像不是用pdf显示而是显示红叉的方框。但它在localhost中运行得非常好。 代码:

ggplot(aggdata[aggdata$action == "D",], aes(gear, length)) + 
geom_boxplot() + xlab('Gear') + ylab('Size (cm)') + 
ggtitle("Discard Characterization") + 
theme(plot.title = element_text(hjust = 0.5))

邮件发送:

$html = create_html($quote);
function create_html($quote = NULL) {
    $logo = get_field( 'logo', 'option' );
    $image = get_field( 'image', 'option' );
    $title = get_field( 'title', 'option' );
    $sub_title = get_field( 'sub_title', 'option' );
    $content_image = get_field( 'content_image', 'option' );
    $content = get_field( 'content', 'option' );
    $html = '<!DOCTYPE html><html>';
        $html .= '<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>';
        $html .= '<style>
                    body {
                        font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
                        font-size14px;
                        line-height:1.5;
                        font-weight: normal;
                    }
                    .container {
                        max-width: 690px;
                        margin: 0 auto;
                    }
                    figure{
                        padding:0;
                    }
                    .mailContent {
                        float: left;
                        width: 100%;
                    }
                    .top-mail.centerAlign {
                        padding-top: 30px;
                        padding-bottom: 20px;
                        float: left;
                        width: 100%;
                    }
                    .mid-mail.centerAlign {
                        padding-top: 20px;
                        padding-bottom: 10px;
                        float: left; 
                         width: 100%; 
                    }
                    figure.mail-fig {
                        padding-bottom: 20px;
                        float: left;
                        width: 100%;
                    }
                    .mailContent h1 {
                        color:#4A5467;
                        font-size: 85px;
                        padding-top: 20px;
                        padding-bottom: 30px;
                        float: left;
                        width: 100%;
                        font-weight: normal;
                       font-family: "CycloneBackground";
                    }
                    .mailContent .highlight-text {
                        padding-bottom: 30px;
                        max-width: 650px;
                        margin: 0 auto;
                        font-size: 22px;
                        line-height: 1.5;
                    }
                    .bot-mail {
                        border-top: 1px solid #eee;
                        // margin-top: 10px;
                        padding-top: 40px;
                        padding-bottom: 50px;
                        float: left;
                        width: 100%;
                    }
                    .blue-logo{
                        margin-right: 80px;
                    }
                    .bot-mail p, .top-mail-text p{
                        font-size: 16px;
                        overflow: hidden;
                    }
                    .wrapper690, .wrapper400{
                        max-width: 690px;
                        margin: 0 auto;
                    }
                    .wrapper400{
                        max-width: 400px;
                    }
                    img.db-comma {
                        padding-top: 10px;
                        padding-bottom: 12px;
                    }
                    .mailContent2 .top-mail.centerAlign {
                        padding-bottom: 30px;
                    }
                    .centerAlign{
                        text-align: center;
                    }
                    .fLeft{
                        float:left;
                    }
                </style>';
        $html .= '</head>';
        $html .= '<body>';
            $html .= '<div class="container"><div class="row"><div class="col-sm-12">';
            if(!empty($quote)) {
                $html .= '<div class="mailContent wrapper690 mailContent2">';
                $html .= '<div class="top-mail centerAlign">';
                    $html .= '<img src="'.$logo.'" alt="" class="fLeft">';
                    $html .= '<div class="wrapper400 fRight top-mail-text">';
                        $html .= '<img src="'.get_stylesheet_directory_uri().'/assets/images/db-comma.PNG" alt="double comma" class="db-comma">';
                        $html .= $quote;
                    $html .= '</div>';
                $html .= '</div>';
            } else {
                $html .= '<div class="mailContent wrapper690">';
                $html .= '<div class="top-mail centerAlign"><img src="'.$logo.'" alt=""></div>';
            }
            $html .= '<div class="mid-mail centerAlign">';
                $html .= '<figure class="mail-fig"><img src="'.$image.'" alt=" group"></figure>';
                if(!empty($title)) {
                    // $html .= '<h1>'.$title.'</h1>';
                      $html .= '<h1>test</h1>';
                }
                if(!empty($sub_title)) {
                    $html .= '<p class="highlight-text">'.$sub_title.'</p>';
                }
            $html .= '</div>';
            $html .= '<div class="bot-mail">';
                if(!empty($content_image)) {
                    $html .= '<img src="'.$content_image.'" alt=" logo blue" class="fLeft blue-logo">';
                }
                if(!empty($content)) {
                    $html .= $content;
                }
            $html .= '</div>';
            $html .= '</div>';
            $html .= '</div></div></div>';
        $html .= '</body>';
    $html .= '</html>';

    return $html;
}
$mpdf = new mPDF(); 
$mpdf->SetDisplayMode('real');
$html = mb_convert_encoding($html, 'UTF-8', 'UTF-8');
$mpdf->WriteHTML($html);
ob_clean();
$path_certificate = ABSPATH."certificates/";
$certificate_filename = 'Gåvobevis_'.$_SESSION['first_name'].'_'.$_SESSION['last_name'].'_'.uniqid(); 
$certificate_filename = $certificate_filename.'.pdf';
$mpdf->Output($path_certificate.$certificate_filename, 'F');

我从admin获取图片作为自定义选项。图片网址为:http://xxx.xx.x.xxx/projectname/wp-content/uploads/2017/08/e-img1.png 欢迎任何帮助/建议。提前谢谢。

3 个答案:

答案 0 :(得分:0)

对我来说,问题是某些mPDF文件夹中的权限错误。 确保您为以下文件夹设置了写权限:

/ttfontdata/
/tmp/
/graph_cache/

https://mpdf.github.io/installation-setup/installation-v6-x.html 希望这会有所帮助。

答案 1 :(得分:0)

是本地的图像链接http://xxx.xx.x.xxx/projectname/wp-content/uploads/2017/08/e-img1.png ...表示同一台服务器运行mpdf。如果是这样,可能无法访问该路径。尝试使用图像中的内部路径,实际上wordpress可能会对其根的相对路径感到满意; (例如/wp-content/uploads/2017/08/e-img1.png)

如果这不是问题,则可能是您的实时服务器缺少用于渲染的图形库,此处已对此进行了讨论; mPDF 5.7.1 - image displays as a broken [x]

答案 2 :(得分:0)

对我来说,唯一可行的解​​决方案是使用服务器上的相对路径:

/var/www/www.domain.com/myimg.jpg