首页 文章

使用PHP中的mPDF生成包含10个高图的HTML页面的PDF的不同方法

提问于
浏览
1

在项目报告部分,我们在每个HTML页面上都有大约10个高图 . 我们必须为用户提供以PDF格式下载这些页面的选项 . 这个应用程序在PHP 5.4.16上运行,我们正在使用codeigniter框架 . 为了生成pdf,我们使用的是mPDF .

当前的方法(我们现在如何生成它)

1)当报告页面加载页面上的高图时,每个高级图表都被推入SVG格式的数组中,其中包含此代码的其他图表详细信息 .

charts.push({title:chartData[key]['analytics_type'],text:key,svg:chart.getSVG()});

2)点击另存为PDF,我将此数组提交给我的控制器,并提供其他所需数据 .

3)控制器首先使用此代码将每个SVG图表转换为图像文件 .

private function svgToJpg($item) {
      $filename =  isset($_POST['filename']) ? $_POST['filename'] : 'chart';
      $width =  isset($_POST['width']) ? $_POST['width'] : 800;

      $svg=$item->svg;
      if (get_magic_quotes_gpc()) {
        $svg = stripslashes($svg);
      }

      $tempName = md5(rand());
      $typeString = '-m image/jpeg';
      $ext = '.jpg';
      $outfile = TEMP_PATH.$tempName.$ext;

     if (isset($typeString)) {
        $width = "-w $width";
// generate the temporary file
        if (!file_put_contents(TEMP_PATH.$tempName.".svg", $svg)) {
            die("Couldn't create temporary file. Check that the directory permissions for
                the /temp directory are set to 777.");
        }

// do the conversion
        try {
            shell_exec("chmod 777 ".TEMP_PATH.$tempName.".svg");
            $output = shell_exec("java -jar ". BATIK_PATH ." $typeString -d $outfile $width ".TEMP_PATH.$tempName.".svg");
        } catch(Exception $e) {
            die("Could not create the image. Seems like Java is not installed.");
        }

// catch error
        if (!is_file($outfile) || filesize($outfile) < 10) {
            echo "<pre>$output</pre>";
            echo "Error while converting to JPG from SVG. ";

            if (strpos($output, 'SVGConverter.error.while.rasterizing.file') !== false) {
                echo "SVG code for debugging: <hr/>";
                echo htmlentities($svg);
            }
        }

4)最后,我们使用这些图像生成一个HTML页面,然后使用$ mpdf-> WriteHTML($ html)将其写入PDF .

这种方法工作正常,但需要很长时间才能生成PDF . 可能是将SVG转换为图像所消耗的最多时间 .

有没有其他更快的方法来生成高清图pdf ..?我已经看到了另一种方法,但答案中提到的链接不起作用: - how to auto create pdf using highchart graphs

请提出解决方法 .

1 回答

  • 0

    通过使用无头浏览器phantomjs,我已经成功完成了复杂的布局 . 它生成pdfs以及其他格式的负载 . 基本上你会从php脚本加载你的html并调用phantomjs进行屏幕截图并将其栅格化为pdf .

相关问题