PdfDocumentAdapter / PrintManger Сохраняет PDF-файлы, но с 0 байтами на Android - PullRequest
0 голосов
/ 07 ноября 2019

Я использовал приведенный ниже код для отображения параметров печати, но есть также возможность сохранить PDF-документ. Когда я нажимаю на кнопку «Сохранить PDF», она сохраняется с 0 байтами.

Либо мне нужно отключить параметр сохранения PDF, либо сохранить его с правильным bytes. Первый вариант я не смог найти в документации разработчика Android. Как я могу решить эту проблему?

PrintManager printManager = (PrintManager) PdfActivity.this.getSystemService(Context.PRINT_SERVICE);
try {
    String path = printFile.getAbsolutePath();
    PrintDocumentAdapter printAdapter = new PdfDocumentAdapter(PdfActivity.this, path);
    printManager.print("Document", printAdapter, new PrintAttributes.Builder().build());
}
catch (Exception e) {
    Log.e("PDF Error", "erroe-->" + e.getMessage());
}


public class PdfDocumentAdapter extends PrintDocumentAdapter {

    Context context = null;
    String pathName = "";

    public PdfDocumentAdapter(Context ctxt, String pathName) {
        context = ctxt;
        this.pathName = pathName;
    }

    @Override
    public void onLayout(PrintAttributes printAttributes,
                         PrintAttributes printAttributes1,
                         CancellationSignal cancellationSignal,
                         LayoutResultCallback layoutResultCallback,
                         Bundle bundle) {

        if (cancellationSignal.isCanceled()) {
            layoutResultCallback.onLayoutCancelled();
        }
        else {
            PrintDocumentInfo.Builder builder = new PrintDocumentInfo.Builder("file_name.pdf");

            builder.setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)
                    .setPageCount(PrintDocumentInfo.PAGE_COUNT_UNKNOWN)
                    .build();

            layoutResultCallback.onLayoutFinished(builder.build(),
                    !printAttributes1.equals(printAttributes));
        }
    }

    @Override
    public void onWrite(PageRange[] pageRanges,
                        ParcelFileDescriptor parcelFileDescriptor,
                        CancellationSignal cancellationSignal,
                        WriteResultCallback writeResultCallback) {

        InputStream in = null;
        OutputStream out = null;
        try {
            File file = new File(pathName);
            in = new FileInputStream(file);
            out = new FileOutputStream(parcelFileDescriptor.getFileDescriptor());

            byte[] buf = new byte[16384];
            int size;

            while ((size = in.read(buf)) >= 0
                    && !cancellationSignal.isCanceled()) {

                out.write(buf, 0, size);
            }

            if (cancellationSignal.isCanceled()) {
                writeResultCallback.onWriteCancelled();
            } else {
                writeResultCallback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
            }
        }
        catch (Exception e) {
            writeResultCallback.onWriteFailed(e.getMessage());
            Log.e("PDF Error", "erroe-->" + e.getMessage());
        }
        finally {
            try {
                in.close();
                out.close();
            } catch (IOException e) {
                Log.e("PDF Error", "erroe-->" + e.getMessage());
            }
        }
    }
}

Enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...