【发布时间】: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 不是像视频/音频那样的“可流式传输”格式。
-
展示你已经尝试过的内容会有所帮助。