'android PrintManager pdf print Incomplete display

class MyPrintPdfAdapter(private val mFilePath: String) : PrintDocumentAdapter() {
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    override fun onLayout(
        oldAttributes: PrintAttributes, newAttributes: PrintAttributes,
        cancellationSignal: CancellationSignal,
        callback: LayoutResultCallback, extras: Bundle
    ) {
        if (cancellationSignal.isCanceled) {
            callback.onLayoutCancelled()
            return
        }
        val info = PrintDocumentInfo.Builder("name")
            .setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)
            .build()
        callback.onLayoutFinished(info, true)
    }

    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    override fun onWrite(
        pages: Array<PageRange>, destination: ParcelFileDescriptor,
        cancellationSignal: CancellationSignal,
        callback: WriteResultCallback
    ) {
        var input: InputStream? = null
        var output: OutputStream? = null
        try {
            input = FileInputStream(mFilePath)
            output = FileOutputStream(destination.fileDescriptor)
            val buf = ByteArray(1024)
            var bytesRead: Int
            while (input.read(buf).also { bytesRead = it } > 0) {
                output.write(buf, 0, bytesRead)
            }
            callback.onWriteFinished(arrayOf(PageRange.ALL_PAGES))
        } catch (e: FileNotFoundException) {
            e.printStackTrace()
        } catch (e: Exception) {
            e.printStackTrace()
        } finally {
            if(output != null) {
                try {
                    output.close()
                } catch (e: IOException) {
                    e.printStackTrace()
                }
            }
            if(input != null) {
                try {
                    input.close()
                } catch (e: IOException) {
                    e.printStackTrace()
                }
            }
        }
    }

fun printPDFFile(context: Context, pdfPath: String) {
        val printManager = context.getSystemService(Context.PRINT_SERVICE) as PrintManager
        val myPrintAdapter = MyPrintPdfAdapter(pdfPath)
        val att = PrintAttributes.Builder()
            .setMediaSize(PrintAttributes.MediaSize.ISO_A4)
            .setMinMargins(PrintAttributes.Margins(0, 0, 0, 0))
            .setResolution(PrintAttributes.Resolution("id", Context.PRINT_SERVICE, 300, 300))
            .setColorMode(PrintAttributes.COLOR_MODE_COLOR)
            .build()

        printManager.print("jobName", myPrintAdapter,att)
    }



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source