paint-brush
Comment créer votre propre outil de numérisation PDF mobile Androidpar@foxitsoftware
7,546 lectures
7,546 lectures

Comment créer votre propre outil de numérisation PDF mobile Android

par Foxit Software10m2023/11/07
Read on Terminal Reader

Trop long; Pour lire

Le guide suivant explique comment exploiter la puissance du SDK PDF Android de Foxit pour développer rapidement une application dotée de fonctionnalités de numérisation robustes. Que vous capturiez plusieurs photos ou sélectionniez des images dans votre galerie, générer un PDF est aussi simple qu'un simple clic. Ce projet vous permet d'intégrer de manière transparente la numérisation dans vos flux de travail existants, ce qui en fait un ajout précieux à votre application mobile.
featured image - Comment créer votre propre outil de numérisation PDF mobile Android
Foxit Software HackerNoon profile picture
0-item
1-item
2-item


La numérisation mobile directement au format PDF peut révolutionner vos flux de travail documentaires. Équipé de fonctionnalités telles que la détection automatique des pages, le flash intégré pour un meilleur éclairage, la gestion précise des couleurs et les paramètres de l'appareil photo adaptés à la création de PDF de qualité professionnelle, vous pouvez obtenir des résultats remarquables en quelques clics sur votre smartphone, grâce à des technologies de pointe. technologie.


Le guide suivant explique comment exploiter la puissance du SDK PDF Android de Foxit pour développer rapidement une application dotée de fonctionnalités de numérisation robustes. Que vous capturiez plusieurs photos ou sélectionniez des images dans votre galerie, générer un PDF est aussi simple qu'un simple clic. Ce projet vous permet d'intégrer de manière transparente la numérisation dans vos flux de travail existants, ce qui en fait un ajout précieux à votre application mobile.


Vous avez la liberté d’incorporer votre propre marque d’entreprise ou d’application sans effort, sans avoir besoin de basculer entre les éléments ou de repenser l’interface utilisateur. Il fournit une visionneuse PDF vierge avec un bouton de numérisation mobile dédié, servant de base à la création de votre application unique.

Configuration requise

Exigences des appareils Android :

  • Android 4.4 (API 19) ou supérieur

  • ARM 32/64 bits (armeabi-v7a/arm64-v8a) ou processeur Intel x86 32/64 bits


  • Android Studio 3.2 ou version ultérieure (prend en charge AndroidX)
    L'environnement d'exécution de nos démos :
    •Android Studio 3.2
    • JDK 1.8
    • Gradle version 4.6
    • Outil de création Gradle 3.2
    Remarque : à partir de la version 8.2, Foxit PDF SDK pour Android prendra uniquement en charge AndroidX et ne prendra plus en charge la bibliothèque de support Android.

Configuration de développement

Démarrez Android Studio et ouvrez le projet androidrdk/samples/viewer_ctrl_demo.


Démarrage d'Android Studio

Ajoutez la bibliothèque de dépendances d'analyse dans le fichier gradle (view_ctrl_demo/app/build.gradle) comme ci-dessous :


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


Ajout de dépendance

Définir les paramètres d'autorisation

Avant d'appeler la fonction Scan, vous devez obtenir l'autorisation de stockage et l'autorisation de prendre des photos. Si l'autorisation d'utiliser l'appareil photo et l'album photo n'est pas obtenue avant d'appeler la fonction Scan, l'application ne fonctionnera pas correctement. Suivez les étapes ci-dessous pour définir les autorisations.


Ajoutez des déclarations liées aux autorisations dans le fichier AndroidManifest à l'aide du code ci-dessous :


 <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" />


Ajoutez ensuite le code de demande d'autorisation suivant dans 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(); } }


Maintenant, ajoutons le code lié à la fonction Scan :


Ajoutez un bouton à l'interface utilisateur pour appeler la fonction Scan.


Ajouter un bouton d'interface utilisateur

Tout d’abord, écrivez du code pour ajouter l’icône du bouton de l’appareil photo. Vous définirez la disposition, le positionnement et la ressource image du bouton. Ce code est ajouté à la méthode onCreate du fichier MainActivity pour s'assurer que le bouton s'affiche dès le chargement du projet. Assurez-vous d'ajouter ceci aprè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(); }


Maintenant, définissons les bases de la fonction d'analyse de l'application. La dernière ligne de code de la méthode onCreate ci-dessus est un appel à initScan(), qui est la méthode que nous utiliserons pour initialiser les classes pertinentes pour le projet.


Le code ci-dessous montre comment vous allez instancier un objet à partir de la classe PDF Scan principale de Foxit (PDFScanManager), puis utiliser cette classe pour initialiser le scanner et les fonctionnalités de compression. La méthode finale affiche la fonctionnalité de numérisation une fois que vous cliquez sur le bouton de l'appareil photo.


 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); }


Le code d'initialisation est ensuite ajouté à la méthode initScan comme suit. Cette méthode sera également ajoutée à la classe MainActivity et appelée dès le chargement du projet. Cela garantit que votre projet disposera de toutes les bibliothèques et fonctionnalités de numérisation disponibles.


Les importations et variables suivantes sont nécessaires au projet :


 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)); } } }); }


Maintenant que nous avons initialisé la bibliothèque et que les bases ont été définies, nous allons écrire deux interfaces de rappel de base qui seront utilisées pour enregistrer le document après sa numérisation : la première, ScanPDFDoneCallBack, qui est entièrement personnalisée, et la seconde est IPDFScanManagerListener, qui est disponible immédiatement dans le SDK. Voir les deux ci-dessous :


 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 différence entre les deux interfaces est que si la surveillance de ScanPDFDoneCallBack est définie, lorsque vous cliquez sur le bouton « Terminé » dans le coin inférieur droit de la figure ci-dessous, le document sera directement enregistré dans le chemin par défaut et quittera l'interface de numérisation, et revenez au chemin de sauvegarde par défaut via le paramètre savePath.


Si ScanPDFDoneCallBack n'est pas défini, lorsque vous cliquez sur le bouton « Terminé » dans le coin inférieur droit de la figure ci-dessous, une interface permettant de sélectionner le répertoire de sauvegarde apparaîtra. L'utilisateur sélectionne le répertoire spécifié et le document sera enregistré dans le répertoire sélectionné par l'utilisateur.


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


Maintenant, vous devez implémenter les interfaces en les ajoutant à 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 vous souhaitez implémenter d'autres interfaces de la classe pdfscan, veuillez vous référer aux documents de référence de l'API dans foxitpdfsdk_8_1_android/docs.


Fait! La fonctionnalité de numérisation a été ajoutée avec succès à votre application. Exécutez l'application, cliquez sur le bouton Numériser que vous avez créé précédemment et démarrez votre expérience de numérisation.


Nous travaillons avec vous pour ajouter une fonctionnalité complète de bibliothèque PDF à votre projet et développer sur toutes les plateformes et environnements sur une seule API principale. Faites un essai gratuit de 30 jours aujourd'hui en cliquant ici.


Également publié ici .