Javascript 如何在客户端将文件数据转换为PDF并在新选项卡中打开?

Javascript 如何在客户端将文件数据转换为PDF并在新选项卡中打开?,javascript,Javascript,我有一个我无法调整的API,它将PDF文件的数据块返回给我。我需要将其转换为实际文件,并在前端的新选项卡中打开它 我计划使用window.openfile\u link,target=''u blank'打开它,但我得到的是实际内容而不是链接。如何将数据写入文件并生成链接 编辑: 我遵循建议帖子中的解决方案,但没有一个有效。我的PDFstring显然是一个源字符串,base64编码对它没有任何作用。实际上,Chrome将其视为一个url。很有趣 我还尝试使用iframe+escapePDFstr

我有一个我无法调整的API,它将PDF文件的数据块返回给我。我需要将其转换为实际文件,并在前端的新选项卡中打开它

我计划使用window.openfile\u link,target=''u blank'打开它,但我得到的是实际内容而不是链接。如何将数据写入文件并生成链接

编辑:

我遵循建议帖子中的解决方案,但没有一个有效。我的PDFstring显然是一个源字符串,base64编码对它没有任何作用。实际上,Chrome将其视为一个url。很有趣

我还尝试使用iframe+escapePDFstring打开一个新窗口,但我上传的两个没有加密的文件要么要求我提供密码,要么只是显示一个空白页面

在该线程被应答之后发生的任何事情都会使该线程无效。这些解决方案不再有效了

编辑2:

使用时https://base64.guru/tools/repair 要修复我的字符串,它会说您的字符串不是Base64值。它是一个PDF文件的源

我可以通过Postman直接调用API端点,它给了我一个下载按钮,我可以下载文件,但当我想在前端使用相同的端点时,它确实返回一些数据,但这些数据无法读取,也无法转换为PDF

编辑3:

PDF数据的外观片段

%PDF-1.3
%âãÏÓ
1 0 obj 
<<
/FormType 1
/Subtype /Form
/Resources 
<<
/Font 2 0 R
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/ExtGState 
<<
/gRLs0 
<<
/ca .15
>>
>>
>>
/Type /XObject
/BBox [0 0 595.28 841.89]
/Filter [/ASCII85Decode /FlateDecode]
/Length 254
/Matrix [1 0 0 1 0 0]
>>
stream
u^^Ü´¿ª.Æ}rP1   ó
ú@äùзeRØϨL    a8  QÀ³©¢ícvôE-ñD²UAut,,íh~¬c®OÅ®k$»p_"½$ ~à£YpZ¿óFŤH¡PH¥é)ÂQ@*ÃdáÂ;qNLoâÀæ´#ßbÀw°è÷½­åóvQX}ç־9ÂÅp7ùÅ´àì-ËX
dTw ¦bbñ)ÐG$]ÿ°äÖñøÕÐ   ~CXvQûHõQf  þ~öþ+}¸eׯÞÇÚÁ´¶J´
endstream 
endobj 
2 0 obj 
<<
/F1 3 0 R
>>
endobj 
3 0 obj 
<<
/Encoding /WinAnsiEncoding
/Subtype /Type1
/Name /F1
/Type /Font
/BaseFont /Helvetica
>>
endobj 
4 0 obj 
<<
/Filter /FlateDecode
/Length 10
>>
stream
½Pa_bûûz
endstream 
endobj 
5 0 obj 
<<
/Filter /FlateDecode
/Length 46
>>
stream
/÷ÜUc^ Ù-Æ|daR «¯s¹*;HÒo#X»`²ª?Í
endstream 
endobj 

...

/Encoding /WinAnsiEncoding
/Subtype /Type1
/Name /F1
/Type /Font
/BaseFont /Helvetica
>>
endobj 
9 0 obj 
<<
/Filter /FlateDecode
/Length 10
>>
stream
².G`XÝ [
endstream 
endobj 
10 0 obj 
<<
/Filter /FlateDecode
/Length 46
>>

endobj xref
0 20
0000000000 65535 f 
0000000015 00000 n 
0000000567 00000 n 
0000000600 00000 n 
0000000709 00000 n 
0000000793 00000 n 
0000000913 00000 n 
0000001455 00000 n 
0000001488 00000 n 
0000001597 00000 n 
0000001681 00000 n 
0000001802 00000 n 
0000002045 00000 n 
0000061818 00000 n 
0000061680 00000 n 
0000061903 00000 n 
0000061939 00000 n 
0000064655 00000 n 
0000064708 00000 n 
0000064858 00000 n 
trailer

<<
/Info 19 0 R
/ID [<6fb9561b2e6dae8efff33dbd6911a492><28b448a6527da4b73885e10f7a1655c9>]
/Encrypt 18 0 R
/Root 17 0 R
/Size 20
>>
startxref
65027
%%EOF

好的,问题是我的数据不是用base64编码的。一旦数据被编码到base64中,建议链接中提供的答案就起作用了。

我想这就是你想要的:我看到了。无论是否使用iframe,我都无法让它工作。仍在寻找解决方案它表示该地址可能暂时关闭,或者可能已永久移动到新的web地址。这不是地址。应该是文件数据。您是否使用setTimeout尝试了此变体@是的,它打开了一个空白页。我的src不是链接,而是PDF源数据。如果我取出base64,iframe会生成,但它会显示数据错误