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

问题描述 投票:0回答:1

我正在开发一个 WordPress 插件,我可以使用 DOMPDF 生成 PDF。生成过程有效,但我遇到了图像未显示在生成的 PDF 中的问题。

这是我的实现的简要概述:

  1. 我检索了一系列与 WordPress 中的帖子链接的图像(元值)。
  2. 我构建了一个嵌入这些图像的 HTML 字符串。
  3. 我将此 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

php wordpress dompdf
1个回答
0
投票

我设法解决了图像未在生成的 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;
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.