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é
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:
- Descarga el proyecto completo desde github
- Descarga el archivo apk
Publicación traducida automáticamente
Artículo escrito por onlyklohan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA