2014-12-04 141 views
1

我正在嘗試從pdf獲取從api獲取輸出的PDF流。 首先在返回頭上似乎缺少,並在螢火蟲我得到關於XRef(表)流頭無效的許多錯誤。 我決定我可以通過在文本編輯器中打開pdf並保存一個txt文件然後從中讀取來進行測試。從那個嘗試能夠重新創建pdf。 另外,如果我然後去打開文本文件,並保存到PDF它不會工作了。有沒有辦法在PHP中從流中重新創建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; 

的SNIPPIT正如你可以看到我已經嘗試過基於代碼的varliables的名字。 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); 

我也試了一下在另外的解決方案已經完成在計算器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> 

[email protected]://pdf.js/build/pdf.worker.js:3613:13 
[email protected]://pdf.js/build/pdf.worker.js:3207:23 
[email protected]://pdf.js/build/pdf.worker.js:2449:7 
[email protected]://pdf.js/build/pdf.worker.js:2329:7 
LocalPdfManager_ensure/<@resource://pdf.js/build/pdf.worker.js:1901:20 
[email protected]://pdf.js/build/pdf.worker.js:1896:1 
[email protected]://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 
+0

究竟是「pdf流」? PDF不是「流式」格式,如視頻/音頻。 – 2014-12-04 14:38:26

+0

如果你顯示你已經嘗試過的東西,它會有所幫助。 – 2014-12-04 14:38:51

回答

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(); 
相關問題