我正在开发一个要生成PDF文件的项目。 我使用Google Chart API生成不同的图表。我正在使用TCPDF库将它们转换为PDF,但我无法将这些生成的图形嵌入到PDF中。我认为TCPDF不接受脚本标记中写的内容。我怎样才能克服这个问题?
答案 0 :(得分:0)
除了使用FPDF之外,我遇到了同样的问题。 在一天结束时,PDF文件包含静态内容,因此遗憾的是Javascript是不可能的。我最终做了什么:
我像往常一样准备HTML + Javascript图表并将其写入临时目录中的HTML文件。然后我使用PhantomJS(http://phantomjs.org/)创建页面的屏幕截图,然后将其包含在我的PDF中(或任何地方,真的)。
最棒的是:它适用于任何本地HTML页面。如果您只有一个URL,请使用file_get_contents()或cURL检索其内容并首先将其写入本地HTML文件。
胆量:
启动,下载phantomjs.exe并将其解压缩到应用程序可以访问的目录。我的示例使用的是我在应用程序根目录中复制到lib / phantomjs的1.9.8版。
我有一个函数接受HTML文件路径作为参数和一组PhantomJS选项。我建议将它添加到辅助类中。
function getHTMLImage($page, $options = array(), $js = null) {
// Prepare the PhantomJS directory that contains phantomjs.exe, e.g. lib or vendor
$phantomDir = $_SERVER['DOCUMENT_ROOT'] . '/lib/phantomjs/';
// Add the PhantomJS directory to the PATH
$origPath = str_replace('"', '', getenv('PATH'));
if (!in_array($phantomDir, explode('/', $origPath)))
putenv('PATH=' . $origPath . '/' . $phantomDir);
// PhantomJS requires a Javascript file to process the request. In case no Javascript processing file is given, use the default
if (is_null($js)) $js = $phantomDir . 'phantom.js';
// Prepare the PhantomJS call
$exec = 'phantomjs --ignore-ssl-errors=yes ' . $js . ' ' . escapeshellarg($page);
// Prepare the PhantomJS options, e.g. width and height
foreach ($options as $option) {
$exec .= ' ' . escapeshellarg($option);
}
// Call PhantomJS. To catch errors, call exec($exec . ' 2>&1', $output, $errorMsg);
exec($exec, $output);
// Decode and return the image data
return ($output ? base64_decode(reset($output)) : false);
}
Javascript文件(我的名为phantom.js,与phantomjs.exe放在同一目录中):
args = require('system').args;
page = require('webpage').create();
// In this case, I expect these indexes to be the width and height of the chart
if (typeof args[2] !== undefined) {
page.viewportSize = {
width: args[2],
height: (typeof args[3] === undefined ? args[2] : args[3])
};
}
page.open(args[1], function() {
var base64 = page.renderBase64('png');
console.log(base64);
phantom.exit();
});
这样称呼:
// Make sure $width and $height are set, or exclude them altogether
$output = getHTMLImage($htmlPath, array($width, $height));
// Example output, you want to save the image and include it in your PDF file
header('Content-Type: image/png');
exit($output);