我正在开发一个 WordPress 插件,我可以使用 DOMPDF 生成 PDF。生成过程有效,但我遇到了图像未显示在生成的 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
我设法解决了图像未在生成的 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;
}
}