TCPDF 将文件保存到文件夹?
Posted
技术标签:
【中文标题】TCPDF 将文件保存到文件夹?【英文标题】:TCPDF Save file to folder? 【发布时间】: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
【参考方案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');
记得让目录可写。
【讨论】:
以上是关于TCPDF 将文件保存到文件夹?的主要内容,如果未能解决你的问题,请参考以下文章