paint-brush
Cómo crear su propia herramienta de escaneo de PDF móvil para Androidpor@foxitsoftware
7,546 lecturas
7,546 lecturas

Cómo crear su propia herramienta de escaneo de PDF móvil para Android

por Foxit Software10m2023/11/07
Read on Terminal Reader

Demasiado Largo; Para Leer

La siguiente guía describe cómo puede aprovechar el poder del SDK de PDF de Android de Foxit para desarrollar rápidamente una aplicación con sólidas capacidades de escaneo. Ya sea que esté capturando varias fotografías o seleccionando imágenes de su galería, generar un PDF es tan simple como un solo clic. Este proyecto le permite integrar perfectamente el escaneo en sus flujos de trabajo existentes, lo que lo convierte en una valiosa adición a su aplicación móvil.
featured image - Cómo crear su propia herramienta de escaneo de PDF móvil para Android
Foxit Software HackerNoon profile picture
0-item
1-item
2-item


El escaneo móvil directamente a PDF puede revolucionar los flujos de trabajo de sus documentos. Equipado con funciones como detección automática de páginas, flash incorporado para una mejor iluminación, administración precisa del color y configuraciones de cámara adaptadas para crear archivos PDF de nivel profesional, puede lograr resultados extraordinarios con solo unos pocos toques en su teléfono inteligente, gracias a la tecnología de vanguardia. tecnología.


La siguiente guía describe cómo puede aprovechar el poder del SDK de PDF de Android de Foxit para desarrollar rápidamente una aplicación con sólidas capacidades de escaneo. Ya sea que esté capturando varias fotografías o seleccionando imágenes de su galería, generar un PDF es tan simple como un solo clic. Este proyecto le permite integrar perfectamente el escaneo en sus flujos de trabajo existentes, lo que lo convierte en una valiosa adición a su aplicación móvil.


Tiene la libertad de incorporar la marca de su propia empresa o aplicación sin esfuerzo, sin la necesidad de alternar elementos o rediseñar la interfaz de usuario. Proporciona un visor de PDF en blanco con un botón de escaneo móvil dedicado, que sirve como base para crear su aplicación única.

Requisitos del sistema

Requisitos de los dispositivos Android:

  • Android 4.4 (API 19) o superior

  • ARM de 32/64 bits (armeabi-v7a/arm64-v8a) o CPU Intel x86 de 32/64 bits


  • Android Studio 3.2 o posterior (compatible con AndroidX)
    El entorno de ejecución de nuestras demostraciones:
    • Estudio Android 3.2
    •JDK 1.8
    • Gradle versión 4.6
    • Herramienta de compilación Gradle 3.2
    Nota: A partir de la versión 8.2, Foxit PDF SDK para Android solo admitirá AndroidX y ya no brindará servicio a la biblioteca de soporte de Android.

Configuración de desarrollo

Inicie Android Studio y abra el proyecto androidrdk/samples/viewer_ctrl_demo.


Iniciando Android Studio

Agregue la biblioteca de dependencias de escaneo en el archivo gradle (view_ctrl_demo/app/build.gradle) como se muestra a continuación:


 implementation(name:'FoxitPDFScan-UI', ext:'aar') implementation(name:'FoxitMobileScanningRDK', ext:'aar') implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' 


Agregar dependencia

Definir la configuración de permisos

Antes de activar la función Escanear, debe obtener permiso de almacenamiento y permiso para tomar fotografías. Si no se obtiene el permiso para usar la cámara y el álbum de fotos antes de llamar a la función Escanear, la aplicación no se ejecutará correctamente. Siga los pasos a continuación para establecer permisos.


Agregue declaraciones relacionadas con permisos en el archivo AndroidManifest usando el siguiente código:


 <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RUN_INSTRUMENTATION"/> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.CAMERA" />


Luego agregue el siguiente código de solicitud de permiso en MainActivity.java:


 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { int permission = ContextCompat.checkSelfPermission(this.getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permission != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE); @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_EXTERNAL_STORAGE) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { //Application permission is successful } else { UIToast.getInstance(getApplicationContext()).show(getString(R.string.fx_permission_denied)); finish(); } }


Ahora, agreguemos el código relacionado con la función Escanear:


Agregue un botón a la interfaz de usuario para llamar a la función Escanear.


Agregar un botón de interfaz de usuario

Primero, escriba un código para agregar el ícono del botón de la cámara. Definirás el diseño, el posicionamiento y el recurso de imagen del botón. Este código se agrega al método onCreate del archivo MainActivity para garantizar que el botón se muestre tan pronto como se cargue el proyecto. Asegúrate de agregar esto después:


 protected void onCreate(Bundle savedInstanceState) { (...) // Make sure to add this block of code after all the already existing // view_ctrl_demo onCreate code is loaded mRootView=uiExtensionsManager.getContentView(); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); mIvScan = new ImageView(this); mIvScan.setImageResource(R.drawable.fx_floatbutton_scan); layoutParams.bottomMargin = 80; layoutParams.rightMargin = 50; layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); mIvScan.setLayoutParams(layoutParams); mRootView.addView(mIvScan); setContentView(mRootView); initScan(); }


Ahora, sentemos las bases para la función de escaneo de la aplicación. La última línea de código en el método onCreate anterior es una llamada a initScan(), que es el método que usaremos para inicializar las clases relevantes para el proyecto.


El siguiente código muestra cómo creará una instancia de un objeto de la clase principal de escaneo de PDF de Foxit (PDFScanManager) y luego usará esa clase para inicializar el escáner y las funciones de compresión. El método final muestra la funcionalidad de escaneo una vez que hace clic en el botón de la cámara.


 PDFScanManager pdfScanManager = PDFScanManager.instance() if (!PDFScanManager.isInitializeScanner()) { long framework1 = 0; long framework2 = 0; PDFScanManager.initializeScanner(App.inst().getAppActivity().getApplication(), framework1, framework2); } if (!PDFScanManager.isInitializeCompression()) { long compression1 = 0; long compression2 = 0; PDFScanManager.initializeCompression(App.inst().getAppActivity().getApplication(), compression1, compression2); } if (PDFScanManager.isInitializeScanner() && PDFScanManager.isInitializeCompression()) { //Loaded Successfully pdfScanManager.showUI(activity.this); }


Luego, el código de inicialización se agrega al método initScan de la siguiente manera. Este método también se agregará a la clase MainActivity y se llamará tan pronto como se cargue el proyecto. Esto garantiza que su proyecto tendrá todas las bibliotecas y funciones de escaneo disponibles.


Las siguientes importaciones y variables son necesarias para el proyecto:


 import com.foxit.pdfscan.PDFScanManager; private ImageView mIvScan; private ViewGroup mRootView; private void initScan(){ final PDFScanManager pdfScanManager = PDFScanManager.instance(); mIvScan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!PDFScanManager.isInitializeScanner()) { long framework1 = 0; long framework2 = 0; PDFScanManager.initializeScanner(getApplication(), framework1, framework2); } if (!PDFScanManager.isInitializeCompression()) { long compression1 = 0; long compression2 = 0; PDFScanManager.initializeCompression(getApplication(), compression1, compression2); } if (PDFScanManager.isInitializeScanner() && PDFScanManager.isInitializeCompression()) { pdfScanManager.showUI((Activity) mContext); } else { UIToast.getInstance(getApplicationContext()) .show(AppResource.getString(getApplicationContext(), R.string.rv_invalid_license)); } } }); }


Ahora que hemos inicializado la biblioteca y se han establecido las bases, escribiremos dos interfaces de devolución de llamada básicas que se usarán para guardar el documento después de escanearlo: la primera, ScanPDFDoneCallBack, que es completamente personalizada, y la segunda es IPDFScanManagerListener, que está disponible de fábrica en el SDK. Vea ambos a continuación:


 public interface ScanPDFDoneCallBack { /** Success, and no error occurs */ int e_ErrSuccess = 0; /** Failed, any unknown error occurs. */ int e_ErrUnknown = 1; /** * After saving PDF successfully, return to the saving path * * @param errorCode if the scanned file is successfully saved as a pdf document, the errorCode is {@link #e_ErrSuccess}, otherwise is {@link #e_ErrUnknown} * @param savePath the document file path. */ void doneCallBack(int errorCode, String savePath); } public interface IPDFScanManagerListener { /** * Success, and no error occurs */ int e_ErrSuccess = 0; /** * Failed, any unknown error occurs. */ int e_ErrUnknown = 1; /** * Called when if the scanned file is successfully saved as a pdf document. * * @param errorCode if the scanned file is successfully saved as a pdf document, the errorCode is {@link #e_ErrSuccess}, otherwise is {@link #e_ErrUnknown} * @param path the document file path. */ void onDocumentAdded(int errorCode, String path); }


La diferencia entre las dos interfaces es que si la supervisión de ScanPDFDoneCallBack está configurada, cuando haga clic en el botón 'Listo' en la esquina inferior derecha de la figura siguiente, guardará directamente el documento en la ruta predeterminada y saldrá de la interfaz de escaneo, y regrese a la ruta de guardado predeterminada a través del parámetro savePath.


Si ScanPDFDoneCallBack no está configurado, cuando haga clic en el botón 'Listo' en la esquina inferior derecha de la figura a continuación, aparecerá una interfaz para seleccionar el directorio para guardar. El usuario selecciona el directorio especificado y el documento se guardará en el directorio seleccionado por el usuario.


https://developers.foxit.com/dk_utwp/2021/10/android-mobile-scanning-tool-pdf-sdk-app.mp4


Ahora, debes implementar las interfaces agregándolas a MainActivity.java.


 pdfScanManager.setDoneCallBack(new ScanPDFDoneCallBack() { @Override public void doneCallBack(int errorCode, final String savePath) { if (errorCode == e_ErrSuccess) { //The document was saved successfully } } }); PDFScanManager.registerManagerListener(new IPDFScanManagerListener() { @Override public void onDocumentAdded(int errorCode, String path) { if (errorCode == e_ErrSuccess) { //The document was saved successfully } } });


Si desea implementar más interfaces de la clase pdfscan, consulte los documentos de referencia de API en foxitpdfsdk_8_1_android/docs.


¡Hecho! La funcionalidad de escaneo se ha agregado exitosamente a su aplicación. Ejecute la aplicación, haga clic en el botón Escanear que creó anteriormente y comience su experiencia de escaneo.


Trabajamos con usted para agregar una funcionalidad completa de biblioteca de PDF a su proyecto y desarrollarlo en todas las plataformas y entornos en una API central. Realice una prueba gratuita de 30 días hoy haciendo clic aquí.


También publicado aquí .