我正在尝试从pdf流中重新创建一个从api输出的pdf。 首先在返回时,标题似乎丢失了,在firebug中,我收到许多关于XRef(表)流标题无效的错误。 我决定只通过在文本编辑器中打开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`
我尝试使用以下解码它:注意上面的代码是整个文件的snippit
$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
答案 0 :(得分: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();