【问题标题】:TCPDF Save file to folder?TCPDF 将文件保存到文件夹?
【发布时间】:2012-08-31 12:53:48
【问题描述】:

我正在使用 TCPDF 打印收据,然后使用 phpMailer 将其发送给客户,但我有一个问题:

我不知道如何将文件保存为 pdf。

我试过了:

// reset pointer to the last page
$pdf->lastPage();

//Close and output PDF document
$pdf->Output('kuitti'.$ordernumber.'.pdf', 'I');
$this->Output("kuitit");

【问题讨论】:

  • 嗨。您希望将 pdf 保存到哪里?你的服务器还是其他地方?
  • @blasteralfred 在我的服务器上的文件夹 kuitit

标签: php tcpdf


【解决方案1】:

试试这个

$pdf->Output('kuitti'.$ordernumber.'.pdf', 'F');

【讨论】:

  • 有效 :) 我会尝试将其保存到文件夹中。
  • @coosal 这会引发错误TCPDF ERROR: Unable to create output file: ../invoice_job_6.pdf
  • @RNKushwaha 你检查文件夹权限了吗?请启用目标文件夹的写入权限。
  • 它有 755 权限,但是@developer 的回答最终帮助了我。但它需要检查它的 linux 服务器(我的客户端的实时服务器在 linux 主机上)还是 windows 服务器(我的 localhost 在 windows 上)。然后,如果它在 linux 上,那么我使用 $_ENV['DOCUMENT_ROOT']
  • 它期望文件路径来自主库文件所在的文件夹。或者使用绝对路径,你可以使用 $_ENV['DOCUMENT_ROOT'] 找到它,然后确保它是可写的。使用“F”参数生成文件,“I”用于在同一页面中加载输出。文档没有把这些事情说清楚..
【解决方案2】:

这会将生成的 pdf 文件存储在项目的自定义文件夹中

$filename= "{$membership->id}.pdf"; 
$filelocation = "D:\\wamp\\www\\project\\custom";//windows
$filelocation = "/var/www/project/custom"; //Linux

$fileNL = $filelocation."\\".$filename;//Windows
$fileNL = $filelocation."/".$filename; //Linux

$this->pdf->Output($fileNL, 'F');

【讨论】:

  • 这个问题很旧,并且有一个可接受的答案。不用回答。
  • 是的。但我没有将 pdf 文件放入所需的文件夹中。与答案。所以,我认为这对将来的某个人会有所帮助。
  • 叹息...你不能直接把文件夹写到这里。 $pdf->Output('/location/folder/'.$name.'.pdf','F')
  • 但它对我有用..我将它作为电子邮件中的附件发送..一旦它生成。
  • 我也是,我适应没有问题。
【解决方案3】:

$pdf->Output() 接受第二个参数$dest,它接受单个字符。默认情况下,$dest='I' 在浏览器中打开 PDF。

使用F 保存到文件

$pdf->Output('/path/to/file.pdf', 'F')

【讨论】:

  • 为了将来参考,我定义了一个 UPLOAD_PATH 并将其用作$pdf->Output(UPLOAD_PATH.'example_001.pdf', 'FI');
【解决方案4】:

唯一对我有用的东西:

// save file
$pdf->Output(__DIR__ . '/example_001.pdf', 'F');
exit();

【讨论】:

  • 谢谢,伙计,这也是唯一对我有用的东西。非常感谢,伙计!
【解决方案5】:

对于存储文件有困难的人,路径必须一直通过根目录。例如,我的是:

$pdf->Output('/home/username/public_html/app/admin/pdfs/filename.pdf', 'F');

【讨论】:

  • 相对路径工作得很好。如果没有,则可能是配置错误。
【解决方案6】:

TCPD 使用fopen() 来保存文件。 因此,任何传递给 TCPDF 的 Output() 函数的路径都应该是绝对路径。

如果您想保存到相对路径,请使用例如__DIR__ 全局常量(参见 this answer)。

【讨论】:

    【解决方案7】:

    如果你仍然得到

    TCPD 错误:无法创建输出文件:myfile.pdf

    您可以通过将 PDF 数据放入变量并将此字符串保存到文件中来避免 TCPDF 的文件保存逻辑:

    $pdf_string = $pdf->Output('pseudo.pdf', 'S');
    file_put_contents('./mydir/myfile.pdf', $pdf_string);
    

    【讨论】:

      【解决方案8】:

      nick 的示例将其保存到您的本地主机。
      但您也可以将其保存到本地驱动器。
      如果你使用双反斜杠:

       $filename= "Invoice.pdf"; 
       $filelocation = "C:\\invoices";  
      
       $fileNL = $filelocation."\\".$filename;
       $pdf->Output($fileNL,'F');
      
       $pdf->Output($filename,'D'); // you cannot add file location here
      

      附:在 Firefox(可选)工具>选项>常规选项卡>下载>总是问我在哪里保存文件

      【讨论】:

      • 已经是老问题了,但是需要先保存到服务器,然后邮寄给用户。
      【解决方案9】:
      $pdf->Output( "myfile.pdf", "F");
      

      TCPD 错误:无法创建输出文件:myfile.pdf

      include/tcpdf_static.php 文件中关于静态函数fopenLocal 的第2435 行中,如果我删除完整的“if 语句”,它可以正常工作。

      public static function fopenLocal($filename, $mode) {
          /*if (strpos($filename, '://') === false) {
              $filename = 'file://'.$filename;
          } elseif (strpos($filename, 'file://') !== 0) {
              return false;
          }*/
          return fopen($filename, $mode);
      }
      

      【讨论】:

        【解决方案10】:
        require __DIR__ . '/vendor/autoload.php';
        $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
        
        $html = '<h2>Welcome toTcpdf</h2>'; 
        $html.= '<p>Welcome toTcpdf</p>'; 
        
        //$pdf->writeHTML($tbl, true, false, true, false, '');
        $pdf->writeHTML($html, true, false, false, false, '');
        $time = time();
        $sFilePath = __DIR__ . '/upload/'.$time.'.pdf' ;
        $pdf->Output( $sFilePath , 'F'); // Save to folder
        //$pdf->Output( $sFilePath , 'I'); // view to browser
        //$pdf->Output( $sFilePath , 'D'); // Download instant
        
        
        this is working
        

        【讨论】:

          【解决方案11】:

          你可以试试;

          $this->Output(/path/to/file);
          

          所以对你来说,它会像;

          $this->Output(/kuitit/);  //or try ("/kuitit/")
          

          【讨论】:

          • 它实际上需要扩展和F
          【解决方案12】:

          这对我有用,保存到根目录下的子目录(temp_pdf):

          $sFilePath = $_SERVER['DOCUMENT_ROOT'] . '//temp_pdf/file.pdf' ;
          $pdf->Output( $sFilePath , 'F');
          

          记得让目录可写​​。

          【讨论】:

            猜你喜欢
            • 2013-01-29
            • 2015-09-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-07
            • 1970-01-01
            相关资源
            最近更新 更多