paint-brush
独自の Android モバイル PDF スキャン ツールを構築する方法@foxitsoftware
7,543 測定値
7,543 測定値

独自の Android モバイル PDF スキャン ツールを構築する方法

Foxit Software10m2023/11/07
Read on Terminal Reader

長すぎる; 読むには

次のガイドでは、Foxit の Android PDF SDK の力を利用して、堅牢なスキャン機能を備えたアプリを迅速に開発する方法について概要を説明します。複数の写真をキャプチャする場合でも、ギャラリーから画像を選択する場合でも、ワンクリックするだけで PDF を生成できます。このプロジェクトにより、スキャンを既存のワークフローにシームレスに統合できるようになり、モバイル アプリケーションへの価値ある追加となります。
featured image - 独自の Android モバイル PDF スキャン ツールを構築する方法
Foxit Software HackerNoon profile picture
0-item
1-item
2-item


モバイルでスキャンして PDF に直接保存すると、ドキュメントのワークフローに革命を起こすことができます。自動ページ検出、照明を改善するための内蔵フラッシュ、正確なカラー管理、プロ仕様の PDF の作成に合わせたカメラ設定などの機能を備えており、最先端のテクノロジーのおかげで、スマートフォンを数回タップするだけで素晴らしい結果を達成できます。テクノロジー。


次のガイドでは、Foxit の Android PDF SDK の力を利用して、堅牢なスキャン機能を備えたアプリを迅速に開発する方法について概要を説明します。複数の写真をキャプチャする場合でも、ギャラリーから画像を選択する場合でも、ワンクリックするだけで PDF を生成できます。このプロジェクトにより、スキャンを既存のワークフローにシームレスに統合できるようになり、モバイル アプリケーションへの価値ある追加となります。


要素を切り替えたり、ユーザー インターフェイスを再設計したりする必要がなく、独自のビジネスまたはアプリケーションのブランディングを自由に組み込むことができます。専用のモバイル スキャン ボタンを備えた空の PDF ビューアが提供され、独自のアプリを構築するための基盤として機能します。

システム要求

Android デバイスの要件:

  • Android 4.4 (API 19) 以降

  • 32/64 ビット ARM (armeabi-v7a/arm64-v8a) または 32/64 ビット Intel x86 CPU


  • Android Studio 3.2以降(AndroidXをサポート)
    デモ用のランタイム環境:
    • Android Studio 3.2
    • JDK 1.8
    • Gradle バージョン 4.6
    • Gradle ビルド ツール 3.2
    注: バージョン 8.2 以降、Foxit PDF SDK for Android は AndroidX のみをサポートし、Android サポート ライブラリはサービスしなくなりました。

開発構成

Android Studio を起動し、androidrdk/samples/viewer_ctrl_demo プロジェクトを開きます。


Android Studioを起動する

以下のように、gradle ファイル (view_ctrl_demo/app/build.gradle) にスキャン依存関係ライブラリを追加します。


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


依存関係の追加

権限設定を定義する

スキャン機能を呼び出す前に、ストレージの許可と写真の撮影の許可を取得する必要があります。スキャン機能を呼び出す前にカメラやフォトアルバムの使用許可を取得していない場合、アプリは正しく動作しません。以下の手順に従って権限を設定します。


以下のコードを使用して、AndroidManifest ファイルに権限関連の宣言を追加します。


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


次に、次の権限リクエスト コードを 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(); } }


次に、Scan 関数に関連するコードを追加しましょう。


スキャン機能を呼び出すためのボタンを UI に追加します。


UIボタンを追加する

まず、カメラ ボタン アイコンを追加するコードを記述します。ボタンのレイアウト、位置、画像リソースを定義します。このコードは MainActivity ファイルの onCreate メソッドに追加され、プロジェクトが読み込まれるとすぐにボタンが表示されるようになります。これを次の後に追加してください。


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


次に、アプリのスキャン機能の基礎を設定しましょう。上記の onCreate メソッドのコードの最後の行は、initScan() の呼び出しです。これは、プロジェクトの関連クラスを初期化するために使用するメソッドです。


以下のコードは、Foxit のメイン PDF Scan クラス (PDFScanManager) からオブジェクトをインスタンス化し、そのクラスを使用してスキャナーと圧縮機能を初期化する方法を示しています。最後の方法では、カメラ ボタンをクリックするとスキャン機能が表示されます。


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


次に、次のように初期化コードが initScan メソッドに追加されます。このメソッドは MainActivity クラスにも追加され、プロジェクトが読み込まれるとすぐに呼び出されます。これにより、プロジェクトにすべてのスキャン ライブラリと機能が利用可能になります。


プロジェクトには次のインポートと変数が必要です。


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


ライブラリを初期化し、基盤を設定したので、スキャン後にドキュメントを保存するために使用する 2 つの基本的なコールバック インターフェイスを作成します。1 つ目は完全にカスタムの ScanPDFDoneCallBack、2 つ目は IPDFScanManagerListener です。 SDK ですぐに使用できます。以下の両方を参照してください。


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


2 つのインターフェイスの違いは、ScanPDFDoneCallBack の監視が設定されている場合、下図の右下隅にある [完了] ボタンをクリックすると、ドキュメントがデフォルトのパスに直接保存され、スキャン インターフェイスが終了することです。パラメータ savePath を通じてデフォルトの保存パスに戻ります。


ScanPDFDoneCallBack が設定されていない場合、下図の右下隅にある「完了」ボタンをクリックすると、保存ディレクトリを選択するインターフェイスがポップアップ表示されます。ユーザーが指定したディレクトリを選択すると、ドキュメントはユーザーが選択したディレクトリに保存されます。


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


次に、インターフェースを 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 } } });


pdfscan クラスのインターフェイスをさらに実装したい場合は、foxitpdfsdk_8_1_android/docs にある API リファレンス ドキュメントを参照してください。


終わり!スキャン機能がアプリケーションに正常に追加されました。アプリを実行し、前に作成した [スキャン] ボタンをクリックして、スキャン エクスペリエンスを開始します。


私たちはお客様と協力して、完全な PDF ライブラリ機能をプロジェクトに追加し、1 つのコア API ですべてのプラットフォームと環境にわたって開発します。 ここをクリックして、今すぐ 30 日間の無料トライアルを試してください。


ここでも公開されています。