JPod PDDocument.save () с ContentResolver в Android

Я использую jPod для управления существующим PDF-файлом и его повторного сохранения. Но как создание PDDocument, так и PDDocument.save () вызывают у меня некоторые проблемы, поскольку я хочу использовать намерение для получения URI для загрузки и сохранения PDF-файла.

Создание моего PDDocument работает следующим образом (метод вызывается из onActivityResult):

protected void renderPDFInit(Uri uri) {
    try{
        ContentResolver cr = getContentResolver();
        InputStream stream = cr.openInputStream(uri);
        File file = File.createTempFile("pd", null);
        file.deleteOnExit();
        FileOutputStream out = new FileOutputStream(file);
        IOUtils.copy(stream, out);
        FileLocator locator = new FileLocator(file);
        pdDocument = PDDocument.createFromLocator(locator);
        stream.close();
    }catch(IOException | COSLoadException e){
        Log.e(e.toString(), e.getMessage());
    }

Есть ли лучший способ сделать это?

А для PDDocument.save () я думал о чем-то вроде:

private void savePdf(Uri uri){
    try {
        ParcelFileDescriptor pfd = getContentResolver().openFileDescriptor(uri, "w");
        if (pfd != null) {
            FileOutputStream fileOutputStream = new FileOutputStream(pfd.getFileDescriptor());
            pdDocument.save(new FileLocator(something));
            pfd.close();
            fileOutputStream.close();
        }
    } catch (IOException | DocumentException e) {
        Log.e(e.toString(), e.getMessage());
    }
}

Но я понятия не имею, как создать экземпляр нового FileLocator (), поскольку ему нужен объект типа File.

Если FileLocator и другие классы «... Locator» вам не подходят, вам нужно реализовать свой собственный ILocator, который может делать то, что вы хотите. PDDocument.save () будет нуждаться в произвольном доступе, однако не знаю, можно ли это сделать с тем, что вы задумали. Если возможна работа с памятью, вы также можете использовать ByteArrayLocator для PDF-файла и скопировать байты.

user2543253 26.03.2018 13:09

Тем не менее, вы можете столкнуться со многими другими проблемами. jPod написан для J2SE и ожидает соответствующей среды выполнения.

user2543253 26.03.2018 17:46
0
2
42
0

Другие вопросы по теме