¿Cómo convertir WebView a PDF en Android?

A veces es necesario guardar algunos artículos disponibles en Internet en forma de archivos PDF. Y para hacerlo hay muchas maneras, uno puede usar cualquier extensión de navegador o cualquier software o cualquier sitio web para hacerlo. Pero para implementar esta función en la aplicación de Android, no se puede confiar en otro software o sitio web para hacerlo. Entonces, para implementar esta increíble función en la aplicación de Android, siga este tutorial. qué

webview to pdf

Pasos para convertir WebView a PDF 

Paso 1: Creación de un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio. Tenga en cuenta que elija Java como lenguaje de programación, aunque vamos a implementar este proyecto en lenguaje Java.

Paso 2: antes de ir a la sección de codificación, primero haga una tarea previa

  • Vaya a la aplicación -> manifiestos -> sección AndroidManifest.xml y permita » Permiso de Internet «.

<usos-permiso android:name=”android.permission.INTERNET”/>

Paso 3: Diseño de la interfaz de usuario 

En el archivo activity_main.xml , hay un WebView que se usa para cargar los sitios web y un botón que se usa para guardar la página web cargada en un archivo PDF. Aquí está el código para el archivo activity_main.xml .

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">
  
  <!-- WebView to load webPage  -->
  <WebView
      android:id="@+id/webViewMain"
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>
  
  <!-- Button To save the Pdf file when clicked -->
  <Button
      android:layout_alignParentBottom="true"
      android:textColor="#ffffff"
      android:background="@color/colorPrimary"
      android:text="Convert WebPage To PDF"
      android:id="@+id/savePdfBtn"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>
  
</RelativeLayout>

Paso 4: trabajar con el archivo MainActivity.java

  • Abra el archivo MainActivity.java allí dentro de la clase, primero cree el objeto de la clase WebView .

// creando objeto de WebView

WebView imprimirWeb;

  • Ahora, dentro del método onCreate() , inicialice WebView y Button con sus respectivos ID que se proporcionan en el archivo activity_main.xml .

  // Inicializando el WebView

  final WebView webView=(WebView)findViewById(R.id.webViewMain);

  // Inicializando el Botón

  Botón savePdfBtn=(Botón)findViewById(R.id.savePdfBtn);

  • Ahora setWebViewClient de W ebView y dentro de onPageFinished() inicializa el objeto printWeb con WebView .

 // Configuración del cliente WebView

 webView.setWebViewClient(nuevo WebViewClient()

    {

           @Anular

           public void onPageFinished (vista WebView, URL de string) {

               super.onPageFinished(ver, url);

               // inicializando el objeto printWeb

               imprimirWeb=webView;

     }

});

  • Ahora carga la URL

 // cargando la URL

 webView.loadUrl(“https://www.google.com”);

  • A continuación, llame al método createWebPrintJob() que se crea más tarde, dentro de onClick() , y muestre el mensaje Toast respectivo .

 // configurando clickListener para el botón Guardar PDF

 savePdfBtn.setOnClickListener(nueva Vista.OnClickListener() {

           @Anular

           public void onClick (Ver vista) {

               if(imprimirWeb!=null)

               {

                   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

                       // Llamar a createWebPrintJob()

                       ImprimirLaPáginaWeb(imprimirWeb);

                   }más

                   {

                       // Mostrar mensaje Toast al usuario

                       Toast.makeText(MainActivity.this, “No disponible para dispositivos por debajo de Android LOLLIPOP”, 

                                                                                                             Tostadas.LENGTH_SHORT).show();                        

                   }

               }

               más

               {

                   // Mostrar mensaje Toast al usuario

                   Toast.makeText(MainActivity.this, “La página web no se ha cargado completamente”, Toast.LENGTH_SHORT).show();

               }

           }

  });

  • Cree un objeto de PrintJob y cree un booleano printBtnPressed que se usa para verificar el estado de la página web de impresión.

 // objeto del trabajo de impresión

 imprimirTrabajo imprimirTrabajo;

 // un valor booleano para comprobar el estado de la impresión

 booleano printBtnPressed=falso;

  • Ahora cree un método PrintTheWebPage() dentro de la clase MainActivity.java y a continuación se muestra el código completo del método PrintTheWebPage() .

   @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)

   vacío privado PrintTheWebPage (WebView webView) {

       // establecer printBtnPressed verdadero

       imprimirBtnPresionado=verdadero;

       // Creando instancia de PrintManager

       PrintManager printManager = (PrintManager) esto

               .getSystemService(Contexto.PRINT_SERVICE);

       // establecer el nombre del trabajo

       String jobName = getString(R.string.app_name) + ” página web”+webView.getUrl();

       // Creando instancia de PrintDocumentAdapter

       PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter(jobName);

       // Crear un trabajo de impresión con nombre e instancia de adaptador

       afirmar printManager != null;

        printJob = printManager.print(jobName, printAdapter,

               nuevo PrintAttributes.Builder().build());

   }

  • A continuación, muestra el estado del PDF guardado, dentro del método onResume() , y verifica el estado de la impresión. A continuación se muestra el código completo del método onResume() .

   @Anular

   vacío protegido en el currículum() {

       super.onReanudar();

       if(printJob!=null &&printBtnPressed) {

           if (imprimirTrabajo.isCompleted()) {

               // Mostrando mensaje de brindis

               Toast.makeText(this, «Completado», Toast.LENGTH_SHORT).show();

           } más si (printJob.isStarted()) {

               // Mostrando mensaje de brindis

               Toast.makeText(this, “isStarted”, Toast.LENGTH_SHORT).show();

           } más si (printJob.isBlocked()) {

               // Mostrando mensaje de brindis

               Toast.makeText(this, “isBlocked”, Toast.LENGTH_SHORT).show();

           } más si (printJob.isCancelled()) {

               // Mostrando mensaje de brindis

               Toast.makeText(this, “isCancelled”, Toast.LENGTH_SHORT).show();

           } más si (printJob.isFailed()) {

               // Mostrando mensaje de brindis

               Toast.makeText(esto, “falló”, Toast.LENGTH_SHORT).show();

           } más si (printJob.isQueued()) {

               // Mostrando mensaje de brindis

               Toast.makeText(this, “isQueued”, Toast.LENGTH_SHORT).show();

           }

           // establecer printBtnPressed falso

           printBtnPressed=falso;

       }

   }

  • A continuación se muestra el código completo del archivo MainActivity.java .

Java

import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.print.PrintAttributes;
import android.print.PrintDocumentAdapter;
import android.print.PrintJob;
import android.print.PrintManager;
import android.view.View;
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;
  
public class MainActivity extends AppCompatActivity {
      
    // creating object of WebView
    WebView printWeb;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // Initializing the WebView
        final WebView webView = (WebView) findViewById(R.id.webViewMain);
  
        // Initializing the Button
        Button savePdfBtn = (Button) findViewById(R.id.savePdfBtn);
  
        // Setting we View Client
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                // initializing the printWeb Object
                printWeb = webView;
            }
        });
  
        // loading the URL
        webView.loadUrl("https://www.google.com");
  
        // setting clickListener for Save Pdf Button
        savePdfBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (printWeb != null) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        // Calling createWebPrintJob()
                        PrintTheWebPage(printWeb);
                    } else {
                        // Showing Toast message to user
                        Toast.makeText(MainActivity.this, "Not available for device below Android LOLLIPOP", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    // Showing Toast message to user
                    Toast.makeText(MainActivity.this, "WebPage not fully loaded", Toast.LENGTH_SHORT).show();
                }
            }
        });
  
    }
  
    // object of print job
    PrintJob printJob;
  
    // a boolean to check the status of printing
    boolean printBtnPressed = false;
  
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    private void PrintTheWebPage(WebView webView) {
          
        // set printBtnPressed true
        printBtnPressed = true;
  
        // Creating  PrintManager instance
        PrintManager printManager = (PrintManager) this
                .getSystemService(Context.PRINT_SERVICE);
  
        // setting the name of job
        String jobName = getString(R.string.app_name) + " webpage" + webView.getUrl();
  
        // Creating  PrintDocumentAdapter instance
        PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter(jobName);
  
        // Create a print job with name and adapter instance
        assert printManager != null;
        printJob = printManager.print(jobName, printAdapter,
                new PrintAttributes.Builder().build());
    }
  
    @Override
    protected void onResume() {
        super.onResume();
        if (printJob != null && printBtnPressed) {
            if (printJob.isCompleted()) {
                // Showing Toast Message
                Toast.makeText(this, "Completed", Toast.LENGTH_SHORT).show();
            } else if (printJob.isStarted()) {
                // Showing Toast Message
                Toast.makeText(this, "isStarted", Toast.LENGTH_SHORT).show();
  
            } else if (printJob.isBlocked()) {
                // Showing Toast Message
                Toast.makeText(this, "isBlocked", Toast.LENGTH_SHORT).show();
  
            } else if (printJob.isCancelled()) {
                // Showing Toast Message
                Toast.makeText(this, "isCancelled", Toast.LENGTH_SHORT).show();
  
            } else if (printJob.isFailed()) {
                // Showing Toast Message
                Toast.makeText(this, "isFailed", Toast.LENGTH_SHORT).show();
  
            } else if (printJob.isQueued()) {
                // Showing Toast Message
                Toast.makeText(this, "isQueued", Toast.LENGTH_SHORT).show();
  
            }
            // set printBtnPressed false
            printBtnPressed = false;
        }
    }
}

Salida: ejecutar en el emulador

Recursos:

Publicación traducida automáticamente

Artículo escrito por onlyklohan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *