我在pdf
中获得了base64
文件,我对其进行了解码,通过Intent
发送,但遗憾的是外部应用无法读取它( Evernote 例如说它不能打开空文件)。另一个奇怪的事情是我在转换后的列表中没有像 Adobe Reader 或 Messanger 这样的应用程序。这是我的代码:
FileOutputStream fos;
fos = context.openFileOutput("doc.pdf", Context.MODE_PRIVATE);
String fileB64 = url.split(",")[1];
byte[] decodedStr = Base64.decode(fileB64, Base64.NO_WRAP);
fos.write(decodedStr);
Intent sendIntent = new Intent();
sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sendIntent.setAction(Intent.ACTION_SEND);
File filePath = new File(String.valueOf(context.getFilesDir()));
File newFile = new File(filePath, "application/pdf");
sendIntent.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".FileProvider", newFile));
sendIntent.setType("application/pdf");
context.startActivity(sendIntent);
fos.flush();
fos.close();
我也尝试在线转换器检查转换是否正常。我有这样的事情:
%PDF-1.3
3 0 obj
<</Type /Page
/Parent 1 0 R
/Resources 2 0 R
/MediaBox [0 0 348.00 256.00]
/Contents 4 0 R
>>
endobj
4 0 obj
<</Length 11287>>
stream
1.000 0.000 0.000 -1.000 0.000 256.000 cm
0.20 w
0 G
q
1.000 0.000 0.000 1.000 0.000 0.000 cm
q
/F9 16 Tf
/F9 12 Tf
q
q
Q
q
Q
Q
q
Q
q
/GS1 gs
1.000 0.000 0.000 1.000 0.000 0.000 cm
0.000 0.000 m
348.000 0.000 l
348.000 0.000 348.000 0.000 348.000 0.000 c
348.000 256.000 l
348.000 256.000 348.000 256.000 348.000 256.000 c
0.000 256.000 l
要避免像&#34这样的答案;这是一张图片,为什么不把它作为图片发送?我可以告诉你,这只是我转换的另一种选择。我的转换和分享图像完美无缺。感谢您的时间和任何帮助!
@EDIT
我改变了这一行:
File newFile = new File(filePath, "application/pdf");
对此:
File newFile = new File(filePath, "doc.pdf");
但现在我得到了pdf的空白页。
答案 0 :(得分:1)
错误#1:您打开一个文件,然后尝试将其交给另一个应用,然后再完成对该文件的处理(flush()
,丢失的getFD().sync()
和close()
。< / p>
错误#2:您正在主应用程序线程上执行磁盘I / O.
错误#3:您正在尝试将整个已解码的PDF读入堆空间,这对于许多PDF文件来说都会失败,因为它们太大了。
错误#4:newFile
未指向您尝试创建的文件,而是指向路径中包含application/pdf
的文件。因此,其他应用无法访问您的PDF,即使它已完全写入磁盘。
错误#5:FLAG_GRANT_READ_URI_PERMISSION
上没有Intent
,因此第三方应用可能对您的内容没有读取权限(请参阅the docs中的第三个项目符号)。