【发布时间】:2019-12-26 12:54:36
【问题描述】:
我收到来自 cURL 的响应,它是 pdf 的编码字符串格式(我猜) - 见附图。
如果我直接将 url 放入浏览器,我会得到 pdf 文件。由于它要求查看 pdf 的 api 凭据,它对用户不友好,我正在寻找另一种直接下载文件的方法。 所以我试图用 cURL 获取 pdf 文件的字符串内容,我得到的正是附加图像中的内容(只附加了一小部分)。
使用该字符串内容,我尝试将其保存为纯 txt 文件,并从那里尝试解码字符串文本并新创建一个 pdf 文件。创建后我需要下载相同的。
我可以使用从 cURL 获得的字符串数据创建文本文件,也可以创建 pdf。但是下载的文件显示Failed to load PDF document.
以下是我尝试过的代码,我不确定我是否尝试正确。
function pdf_download(){
$this->load->helper('file');
$curl = $this->api_call->callapi('GET',APIURL."carts/96171/tickets");
$content = $curl;
$my_file = FCPATH . '/document/text.txt';
if (write_file($my_file, $content) == FALSE)
{
echo 'Unable to write the file';
}
else
{
echo 'File written!';
}
$pdf_base64 = $my_file;
//Get File content from txt file
$pdf_base64_handler = fopen($pdf_base64,'r');
$pdf_content = fread ($pdf_base64_handler,filesize($pdf_base64));
fclose ($pdf_base64_handler);
//Decode pdf content
$pdf_decoded = base64_decode ($pdf_content);
//Write data back to pdf file
$pdf_file=FCPATH . '/document/ticket.pdf';
$pdf = fopen ($pdf_file,'w');
fwrite ($pdf,$pdf_decoded);//Creating a pdf from the encoded content in txt file
fclose ($pdf);
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=tickets.pdf");
ob_clean(); flush();
readfile($pdf_file);//downloading the pdf file
exit();
}
【问题讨论】:
-
不是像上面那样构建“强制下载”的方法,您是否尝试过使用 CI 的内置下载助手?它有一个方便的
force_download()方法,可以为您处理所有这些,并且像魅力一样工作 -
嗨@JavierLarroulet,谢谢!我也试过了。但结果是一样的。正在下载 pdf 文件,但显示“错误。无法加载 PDF 文档。'
-
它已修复。实际上我做错的是我试图解码字符串并且我使用这个解码的字符串来创建pdf。非常感谢您宝贵的 cmets @JavierLarroulet。
标签: php codeigniter pdf