【问题标题】:Is there a way to recreate a PDF from a stream in PHP?有没有办法从 PHP 中的流重新创建 PDF?
【发布时间】:2014-12-04 14:34:27
【问题描述】:

我正在尝试从从 api 获取输出的 pdf 流重新创建 pdf。 首先,在返回时,标头似乎丢失了,在萤火虫中,我收到许多关于外部参照(表)流标头无效的错误。 我决定我可以通过在文本编辑器中打开一个 pdf 并保存一个 txt 文件然后从中读取来简单地进行测试。从那尝试能够重新创建pdf。 此外,如果我随后打开文本文件并保存回 pdf,它将不再起作用。

我对此很陌生,这是我第一次尝试它,天真地相信它不会很难。

是否可以获取 pdf 的输出流并重新创建回 pdf 文件?如果是这样,我该怎么做?

我不太了解它,并尝试查找了一些东西但没有走得很远。

我发表了评论,但认为这里会更好。

所以流是这样的:

`4 0 obj
<</Filter /FlateDecode /Length 890>>
stream
xœ½V]S1½û´ÿÁñ>ꌦùØd³ Uèà*t†Ç(¥¢ÛVÛ">øã=Iw—–"ÌÈdòu“Üœ{öô¦ü“%Ÿ³RJè\²u^ä^ó°±d^ŠÌ.1Ê„TWYêS功’ù€Gœâ¡œ]j'ƒôòv“k‘gŠŸz/Œ*xÒçþ”~Jyff´0Æ/ÀTE&l^,€ZµÔ§Ê?‹0“/µ0ëí
Lmr‘Ûœ¬ùM*…u9Ÿ§¯ºÜÚÖì„Ï-wOx«›*!¥ä¶„¾“¶:ûŠÓæˆäî$ýü±7kuÿ¨µ°8ŠQqX#s…Ú;î
¹µ£ys4—Ô}…KKát
,¡1V§—ÃÝcæG´I‡4CeÚ£>õhL:~ÌÝo8¿pÛQ_Z‚wçýµëB›UoÑoúJ§t„:Ãõ»tFCÌú
<ü‰Ùÿ4úžm™^÷ý,VëöŠßÔåþ/E
endstream
endobj`

我尝试使用以下方法对其进行解码:注意上面的代码是整个文件的片段

$pdf_base64 = "assets/evidential-3.txt";
$pdf_base64_handler = fopen($pdf_base64,'r');
$pdf_content = fread ($pdf_base64_handler,filesize($pdf_base64));
$pdf_new = gzdeflate($pdf_content, 890);
$pdf = gzinflate($pdf_new);
var_dump($pdf_content); exit;

从变量名称可以看出,我尝试对代码进行 base64 处理。 api 会做这样的事情:

//set response type
inputStream = new FileInputStream("/home/pd4mltest.pdf");
//input stream gets the pdf
inputStream = new FileInputStream("/home/pd4mltest.pdf");
outputStream = response.getOutputStream();
//set output stream to response
OUtils.copy(inputStream, outputStream);

我还尝试过在 stackoverflow here 的另一个解决方案中所做的事情 我在哪里添加:

$stringWithFile = "assets/evidential-3.txt";
header('Content-Description: File Transfer');
header("Content-Type: application/pdf");
header('Content-Disposition: attachment; filename=document.pdf');
header('Cache-Control: must-revalidate');
header('Pragma: public');
flush();
file_put_contents("document.pdf", base64_decode($stringWithFile));
readfile("document.pdf");
exit();

但是我得到了这些错误:

Warning: Unsupported feature "unknown"
Error: Invalid XRef stream header
pdf.worker.js (line 249)
<System>

XRef_readXRef@resource://pdf.js/build/pdf.worker.js:3613:13
XRef_parse@resource://pdf.js/build/pdf.worker.js:3207:23
PDFDocument_setup@resource://pdf.js/build/pdf.worker.js:2449:7
PDFDocument_parse@resource://pdf.js/build/pdf.worker.js:2329:7
LocalPdfManager_ensure/<@resource://pdf.js/build/pdf.worker.js:1901:20
LocalPdfManager_ensure@resource://pdf.js/build/pdf.worker.js:1896:1
BasePdfManager_ensureDoc@resource://pdf.js/build/pdf.worker.js:1832:14
loadDocument/</<@resource://pdf.js/build/pdf.worker.js:38456:11

pdf.worker.js (line 251)
<System>
Warning: Unsupported feature "unknown"
pdf.worker.js (line 234)
<System>
Warning: Indexing all PDF objects
pdf.worker.js (line 234)
<System>
An error occurred while loading the PDF. PDF.js v1.0.473 (build: 1694cd8) Message: InvalidPDFException

【问题讨论】:

  • 究竟什么是“pdf 流”? PDF 不是像视频/音频那样的“可流式传输”格式。
  • 展示你已经尝试过的内容会有所帮助。

标签: php pdf stream


【解决方案1】:

已解决:我犯了一个愚蠢的错误,但已修复。当我返回时,我需要做的就是:

$stringWithFile = $resultjson;
header('Content-Type:application/pdf');
header('Content-Disposition:attachment;filename=document.pdf');     

file_put_contents("document.pdf", $stringWithFile);

readfile('document.pdf');

exit();

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 2022-01-19
    • 2016-06-27
    • 1970-01-01
    • 2015-03-23
    • 2023-01-20
    • 2022-12-22
    • 1970-01-01
    相关资源
    最近更新 更多