php 使用DOMPDF和WordPress生成的PDF中未显示的图像

xlpyo6sf  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(214)

我正在开发一个WordPress插件,我使用DOMPDF生成PDF。生成过程正常工作,但我遇到了一个问题,即生成的PDF中没有显示图像。
下面是我的实现的简要概述:
1.我检索了一系列的图像(Meta值)与WordPress中的帖子链接。
1.我构造了一个嵌入这些图像的HTML字符串。
1.我将这个HTML字符串传递给DOMPDF以生成PDF。
PDF正确生成,所有文本内容都完美显示。但是,图像丢失。我已经确保图像存在并且链接是正确的。
下面是我的PHP代码的相关片段:

function my_generate_pdf_callback() {
    $response_data = array(
        'success' => true,
        'pdf_data' => '',
        'image_data' => array(),
        'html_content' => '',
        'error_message' => ''
    );

    try {
        require_once(plugin_dir_path(__FILE__) . 'dompdf/autoload.inc.php');
        $post_id = isset($_POST['post_id']) ? intval(sanitize_text_field($_POST['post_id'])) : 0;

        if ($post_id <= 0) {
            throw new Exception('Nieprawidłowy post_id');
        }

        $post_title = get_the_title($post_id);
        $post_date = get_the_date('Y-m-d', $post_id);

        $meta_pictures = array();

        for ($i = 1; $i <= 10; $i++) {
            $meta_key = 'picture_' . $i;
            $meta_value = get_post_meta($post_id, $meta_key, true);
            if (!empty($meta_value)) {
                $meta_pictures[] = $meta_value;
            }
        }

        $html_content = "
        <html>
            <head>
                <style>
                    body {
                        font-family: 'DejaVu Sans', sans-serif;
                    }
                </style>
            </head>
            <body>
                <h1>Tytuł posta: " . $post_title . "</h1>
                <p>Data utworzenia: " . $post_date . "</p>";

        foreach ($meta_pictures as $pic) {
            $image_src = wp_get_attachment_url($pic);
            if ($image_src) {
                $html_content .= "<img src='" . $image_src . "' width='42' height='42'>";
                $response_data['image_data'][] = $image_src;
            }
        }

        $html_content .= "</body></html>";

        $dompdf = new \Dompdf\Dompdf();
        $options = $dompdf->getOptions();
        $options->setIsRemoteEnabled(true);
        $dompdf->setOptions($options);

        $dompdf->loadHtml($html_content, 'UTF-8');
        $dompdf->setPaper('A4', 'portrait');
        $dompdf->render();

        $pdf_output = $dompdf->output();
        $response_data['pdf_data'] = base64_encode($pdf_output);
        $response_data['html_content'] = $html_content;

    } catch (Exception $e) {
        $response_data['success'] = false;
        $response_data['error_message'] = 'Error: ' . $e->getMessage() . ' File ' . $e->getFile() . ' Line ' . $e->getLine();
    }

    $response = new WP_REST_Response($response_data);
    $response->set_status(200);

    wp_send_json($response);
}
add_action('wp_ajax_my_generate_pdf', 'my_generate_pdf_callback');

我尝试在WordPress环境中使用DOMPDF生成一个包含嵌入图像的PDF文档。鉴于图像存在且链接正确,我希望图像与文本内容一起显示在生成的PDF中。
然而,实际的结果是一个PDF文档,其中所有的文本内容显示完美,但图像完全丢失。为了解决这个问题,我使用JavaScript实现了一个预验证步骤,以确保所有图像链接在PDF生成之前都是可访问的,并且它们确实是有效的。尽管如此,图像仍然没有显示在最终的PDF中。
DomPDF版本:2-0-3

slwdgvem

slwdgvem1#

我设法解决了图像未显示在生成的PDF中的问题。解决方案是将图像作为base64数据URL直接嵌入到HTML内容中,然后将其传递给DOMPDF。下面是对我有用的更新后的代码片段:

foreach ($meta_pictures as $pic) {
            $image_src = wp_get_attachment_url($pic);
            if ($image_src) {
                $image_data = file_get_contents($image_src);
                $html_content .= '<img src="data:image/png+xml;base64,' . base64_encode($image_data) . '" ...>';
                $response_data['image_data'][] = $image_src;
            }
        }

相关问题