A veces, el usuario tiene que guardar algún artículo que se muestra en el navegador web. Entonces, para guardar ese artículo o un blog, los usuarios pueden simplemente guardar esa página web específica en forma de PDF en su dispositivo. Podemos implementar esta función para guardar el formato pdf de la página web que se muestra en WebView. En este artículo, veremos cómo podemos convertir WebView a PDF en Android en Kotlin.
Nota : si desea convertir Webview a PDF en Android usando Java. Consulte el siguiente artículo: Cómo convertir Webview a PDF en Android usando JAVA.
Implementación paso a paso
Paso 1: crea un nuevo proyecto en Android Studio
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Kotlin como lenguaje de programación.
Paso 2: trabajar con el archivo activity_main.xml
Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo activity_main.xml . Se agregan comentarios dentro del código para comprender el código con más detalle.
XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!-- on below line we are creating a webview for loading web page --> <WebView android:id="@+id/idWebView" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- on below line we are creating a button for saving a PDF --> <Button android:id="@+id/idBtnSavePDF" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="Convert WebPage To PDF" android:textAllCaps="false" /> </RelativeLayout>
Paso 3: trabajar con el archivo MainActivity.kt
Vaya al archivo MainActivity.kt y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.kt . Se agregan comentarios dentro del código para comprender el código con más detalle.
Kotlin
package com.gtappdevelopers.kotlingfgproject import android.content.Context import android.os.Build import android.os.Bundle import android.print.PrintAttributes import android.print.PrintJob import android.print.PrintManager import android.webkit.WebView import android.webkit.WebViewClient import android.widget.Button import android.widget.Toast import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { // on below line we are creating variables for web view, // button and print job as well as // boolean variable for button pressed. lateinit var webView: WebView lateinit var savePDFBtn: Button lateinit var printJob: PrintJob // on below line we are initializing // button pressed variable as false var printBtnPressed = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // initializing variables of web view and // save button with their ids on below line. webView = findViewById(R.id.idWebView) savePDFBtn = findViewById(R.id.idBtnSavePDF) // on below line we are specifying // url to load in our web view. webView.loadUrl("https://www.google.com") // on below line we are specifying web view client. webView.setWebViewClient(object : WebViewClient() { override fun onPageFinished(view: WebView, url: String) { super.onPageFinished(view, url) // initializing the webview Object on below line. webView = view } }) // on below line we are adding click // listener for our save pdf button. savePDFBtn.setOnClickListener { // on below line we are checking // if web view is null or not. if (webView != null) { // if web view is not null we are calling // print web page method to generate pdf. printWebPage(webView) } else { // in else condition we are simply displaying a toast message Toast.makeText(this, "Webpage not loaded..", Toast.LENGTH_SHORT).show() } } } // on below line we are creating a print // web page method to print the web page. fun printWebPage(webview: WebView) { // on below line we are initializing // print button pressed variable to true. printBtnPressed = true // on below line we are initializing // our print manager variable. val printManager = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { this .getSystemService(Context.PRINT_SERVICE) as PrintManager } else { TODO("VERSION.SDK_INT < KITKAT") } // on below line we are creating a variable for job name val jobName = " webpage" + webView.url // on below line we are initializing our print adapter. val printAdapter = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { // on below line we are creating // our print document adapter. webView.createPrintDocumentAdapter(jobName) } else { TODO("VERSION.SDK_INT < LOLLIPOP") } // on below line we are checking id // print manager is not null assert(printManager != null) // on below line we are initializing // our print job with print manager printJob = printManager.print( jobName, printAdapter, // on below line we are calling // build method for print attributes. PrintAttributes.Builder().build() ) } @RequiresApi(Build.VERSION_CODES.KITKAT) override fun onResume() { super.onResume() // on below line we are checking // if print button is pressed. if (printBtnPressed) { // in this case we are simply checking // if the print job is completed. if (printJob.isCompleted) { // in this case we are simply displaying a completed toast message Toast.makeText(this, "Completed..", Toast.LENGTH_SHORT).show() } // below method is called if the print job has started. else if (printJob.isStarted) { Toast.makeText(this, "Started..", Toast.LENGTH_SHORT).show() } // below method is called if print job has blocked. else if (printJob.isBlocked) { Toast.makeText(this, "Blocked..", Toast.LENGTH_SHORT).show() } // below method is called if print job has cancelled. else if (printJob.isCancelled) { Toast.makeText(this, "Cancelled..", Toast.LENGTH_SHORT).show() } // below method is called is print job is failed. else if (printJob.isFailed) { Toast.makeText(this, "Failed..", Toast.LENGTH_SHORT).show() } // below method is called if print job is queued. else if (printJob.isQueued) { Toast.makeText(this, "Jon Queued..", Toast.LENGTH_SHORT).show() } // on below line we are simply initializing // our print button pressed as false printBtnPressed = false } } }
Paso 4: agregar permisos de Internet en AndroidManifest.xml
Vaya a aplicación > manifiesto > AndroidManifest.xml y agregue los siguientes permisos en él. Se agregan comentarios en el código para conocer en detalle.
XML
<!--on below line we are adding internet permissions--> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Ahora ejecute su aplicación para ver el resultado.
Producción:
Publicación traducida automáticamente
Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA