使用wkhtmltopdf在PDF转换后更改的值未显示

时间:2017-06-02 10:08:03

标签: javascript php html pdf wkhtmltopdf

目前在我的html页面中我更改了一些值,它的工作方式是这样的:

功能:

function change1(){
   var myNewTitle = document.getElementById('myTextField1').value;
   if( myNewTitle.length==0 ){
       alert('Write Some real Text please.');
   return;
   }
   var titles = document.getElementsByClassName('title1');
   Array.prototype.forEach.call(titles,title => {
    title.innerHTML = myNewTitle;
   });
}

要更改的值和用于输入的文本字段:

      Voornaam: <h3 class="title1">Kevin</h3>
      <input type="text" id="myTextField1"/>
      <input type="submit" id="byBtn" value="Change" onclick="change1()"/><br/>

      <p class="title1">Test.</p>

我使用wkhtmltopdf转换,这是一个用于html到PDF转换的命令行工具。但是,我所做的更改不是在服务器上进行的,而是在本地进行的,这就是我的更改未在转换中显示的原因。

我正在考虑首先下载更改后的html页面,然后使用wkhtmltopdf进行转换。 是否有人能够给我一个如何做到这一点的例子,或者可能是我另一个更好的方式?

1 个答案:

答案 0 :(得分:1)

您必须通过页面内容和wkhtmltopdfon发送服务器才能完成这项工作。

在客户端,你需要所有这样的功能:

function send(){ 
  var f = document.createElement("form"),
     i = document.createElement("input"); //input element, hidden

  f.setAttribute('method',"post");
  f.setAttribute('action',"http://yourserver.com/script.php");

  i.setAttribute('type',"hidden");
  i.setAttribute('name',"content");
  i.setAttribute('value', document.body.innerHTML); // or the container you need

  f.appendChild(i);
  document.getElementsByTagName('body')[0].appendChild(f);
  f.submit();
};

在服务器端,例如在php中,您将获取内容,将其保存在临时文件中,然后调用该工具将其转换为pdf,然后将pdf返回给客户端:

<?php
try {
   $content = $_REQUEST['content'];
    if(!file_exists('/tmp') ){
       mkdir('/tmp', 0777);
    }
   $fp = fopen('w+','/tmp/tmp.html');
   if($fp){
     fwrite($fp, $content);
     fclose($fp);

     $filename = '/tmp/out_' . time() .'.pdf'; // output filename
     shell_exec('wkhtmltopdf /tmp/tmp.html ' . $filename);

     //then eventually ask user for download the result
     header("Content-type:application/pdf");

     // It will be called output.pdf
     header("Content-Disposition:attachment;filename='output.pdf'");

    readfile($filename);
  }else{
     echo 'html file could not be created';
  }
} catch (Exception $e) {
  echo 'exception: ',  $e->getMessage(), "\n";
}