我正在开发一个可以接收PDF文件的应用程序。该应用程序当前将收到的文件保存为内部应用程序目录中的byte [],然后我可以访问它的本地路径。
我现在希望能够将该数据转换为PDF文件,然后再保存到外部存储器中。
我可以使用下面的代码执行此操作,但是当我尝试访问它时,我被告知格式无效。任何想法如何解决这个问题?
// ---------- EXPORT IMAGE TASK ----------
private class ExportPDF extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... voids) {
String pathToExternalStorage = Environment.getExternalStorageDirectory().toString();
File appDirectory = new File(pathToExternalStorage + "/" + getString(R.string.app_name));
if (!appDirectory.exists()) {
appDirectory.mkdirs();
}
File imageFile = new File(appDirectory.getAbsolutePath() + "/PDF_" + filename.hashCode() + ".pdf");
if (!imageFile.exists()) {
try {
FileOutputStream fos = new FileOutputStream(imageFile.getPath());
fos.write(new File(localPath).toString().getBytes());
fos.close();
} catch (FileNotFoundException e) {
Log.e(TAG, e.toString());
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
return imageFile.getAbsolutePath();
}
@Override
protected void onPostExecute(String aString) {
exportPDF(aString);
}
}
private void exportPDF(String filePath) {
Uri imageUri = Uri.parse(filePath);
Intent sharingIntent = new Intent(Intent.ACTION_VIEW);
sharingIntent.setDataAndType(imageUri, "application/pdf");
startActivity(sharingIntent);
}
答案 0 :(得分:0)
Option Explicit
Public StatusRYGView As New clsTskUpdate
Public RowIDChanged As Long
Public Const myDateFormat As String = "dd/mm/yy"
Public Dict As Object ' use a Dictionary to save previous values of all UniqueID and Text5 values ("Status")
Sub StatusRYGFieldUpdate()
Set StatusRYGView.ProjApp = Application
PaneClose ' should close the Split window (to make sure run-time error 1100 won't happen
Application.Calculation = pjManual
Application.ScreenUpdating = False
If UpdateViewFlag Then
FormatModifiedTasks ' call FormatModifiedTasks Sub, which updates all tasks that Text5 ("Status") were modified
End If
Application.Calculation = pjAutomatic
Application.ScreenUpdating = True
End Sub
这段代码的作用是一步一步:
fos.write(new File(localPath).toString().getBytes());
)File
个对象
new File(localPath)
)new File(localPath).toString()
(byte[]
)new File(localPath).toString().getBytes()
写入byte[]
结果是FileOutputStream
标识的文件包含其他文件的路径。这不是有效的PDF。
我的猜测是您尝试将imageFile
的内容复制到localPath
,而且此代码不会这样做。
更简单,更快速且占用空间更少的解决方案是使用imageFile
直接从FileProvider
向PDF查看器提供PDF,而不是制作数据的第二个副本。