Как печатать PDF с помощью платформы печати Android 4.4

Как распечатать уже загруженный PDF-файл с помощью платформы печати Android 4.4?

Я просмотрел документацию разработчика. но не повезло. Любой пример будет полезен


person Dinesh T A    schedule 21.12.2013    source источник


Ответы (1)


Проведя несколько часов в Google, я нашел решение.

PrintManager printManager = (PrintManager) this.getSystemService(Context.PRINT_SERVICE);
String jobName = this.getString(R.string.app_name) + " Document";
printManager.print(jobName, pda, null);

PrintDocumentAdapter pda = new PrintDocumentAdapter(){

    @Override
    public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback){
        InputStream input = null;
        OutputStream output = null;

        try {

            input = new FileInputStream(file to print);
            output = new FileOutputStream(destination.getFileDescriptor());

            byte[] buf = new byte[1024];
            int bytesRead;

            while ((bytesRead = input.read(buf)) > 0) {
                 output.write(buf, 0, bytesRead);
            }

            callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});

        } catch (FileNotFoundException ee){
            //Catch exception
        } catch (Exception e) {
            //Catch exception
        } finally {
            try {
                input.close();
                output.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras){

        if (cancellationSignal.isCanceled()) {
            callback.onLayoutCancelled();
            return;
        }


        PrintDocumentInfo pdi = new PrintDocumentInfo.Builder("Name of file").setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();

        callback.onLayoutFinished(pdi, true);
    }
};
person Dinesh T A    schedule 21.12.2013
comment
Какие принтеры поддерживаются?? - person abhishek; 10.10.2014
comment
@abhishek google.com/cloudprint/learn/printers.html - person Dinesh T A; 13.10.2014
comment
Спасибо, чувак, ты сэкономил мне кучу времени :) - person Access Denied; 09.12.2014
comment
очень полезно... просто удалите int pages = calculatePageCount(newAttributes); из кода. - person dd619; 04.05.2015
comment
@Dinesh Anandan, у вас есть какие-нибудь идеи о USB-принтере с использованием Android. печатать текст на принтере через usb-связь android"> stackoverflow.com/questions/30498746/ - person Nandakishore Shetty; 01.10.2015
comment
Спасибо, идеальное решение - person Mohsin; 21.09.2016
comment
Спасибо за отличный ответ, вы знаете, как распечатать изображение с URL-адреса изображения или изображения локального устройства? - person Smit Davda; 24.05.2017
comment
@Dinesh У вас есть идеи, как распечатать через это любой офисный документ, такой как xls, doc, docx? - person Amit; 12.06.2017
comment
привет, ребята, что такое pda в printmanager.print (имя задания, pda, null), пожалуйста, помогите мне - person Ravish Sharma; 20.08.2017
comment
@RavishSharma Это PrintDocumentAdapter использует такой код, как printmanager.print(имя задания, новый PrintDocumentAdapter(){}, null) - person Dinesh T A; 21.08.2017
comment
Это не учитывает ориентацию PDF-файлов, а предварительный просмотр альбомных PDF-файлов поворачивается вбок. - person Pink Jazz; 14.05.2018
comment
Это отлично работает для файла .pdf, но для файла .txt не показывает макет и не позволяет печатать. Знаете ли вы, как изменить для печати файл .txt? Спасибо! - person Fisher; 20.03.2019
comment
Тем не менее, файл сохраняется как 0 байт. - person Girish; 04.11.2019
comment
он откроет диалоговое окно Android для выбора принтеров и других настроек, можно ли как-то предотвратить это, заставить его печатать напрямую без каких-либо всплывающих окон? - person SinaMN75; 02.02.2020
comment
Крутой мужик !!!! - person Saad Bilal; 30.12.2020