paint-brush
Как создать свой собственный мобильный инструмент для сканирования PDF-файлов на базе Androidк@foxitsoftware
7,543 чтения
7,543 чтения

Как создать свой собственный мобильный инструмент для сканирования PDF-файлов на базе Android

к Foxit Software10m2023/11/07
Read on Terminal Reader

Слишком долго; Читать

В следующем руководстве описывается, как можно использовать возможности Foxit Android PDF SDK для быстрой разработки приложения с надежными возможностями сканирования. Независимо от того, снимаете ли вы несколько фотографий или выбираете изображения из галереи, создание PDF-файла выполняется одним щелчком мыши. Этот проект позволит вам легко интегрировать сканирование в существующие рабочие процессы, что сделает его ценным дополнением к вашему мобильному приложению.
featured image - Как создать свой собственный мобильный инструмент для сканирования PDF-файлов на базе Android
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.


  • Android Studio 3.2 или новее (поддерживает AndroidX)
    Среда выполнения для наших демонстраций:
    • Android-студия 3.2.
    • JDK 1.8
    • Gradle версии 4.6.
    • Инструмент сборки Gradle 3.2.
    Примечание. Начиная с версии 8.2, Foxit PDF SDK для Android будет поддерживать только AndroidX и больше не будет обслуживать библиотеку поддержки Android.

Конфигурация разработки

Запустите Android Studio и откройте проект androidrdk/samples/viewer_ctrl_demo.


Запуск Android-студии

Добавьте библиотеку зависимостей сканирования в файл градиента (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(); } }


Теперь давайте добавим код, связанный с функцией сканирования:


Добавьте в пользовательский интерфейс кнопку для вызова функции сканирования.


Добавить кнопку пользовательского интерфейса

Сначала напишите код, чтобы добавить значок кнопки камеры. Вы определите макет, расположение и ресурс изображения для кнопки. Этот код добавляется в метод onCreate файла MainActivity, чтобы гарантировать, что кнопка отображается сразу после загрузки проекта. Обязательно добавьте это после:


 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(), метода, который мы будем использовать для инициализации соответствующих классов для проекта.


В приведенном ниже коде показано, как создать экземпляр объекта из основного класса сканирования PDF-файлов Foxit (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)); } } }); }


Теперь, когда мы инициализировали библиотеку и заложили основу, мы напишем два основных интерфейса обратного вызова, которые будут использоваться для сохранения документа после его сканирования: первый — ScanPDFDoneCallBack, полностью настраиваемый, а второй — 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); }


Разница между двумя интерфейсами заключается в том, что если установлен мониторинг 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, обратитесь к справочным документам по API в foxitpdfsdk_8_1_android/docs.


Сделанный! Функция сканирования была успешно добавлена в ваше приложение. Запустите приложение, нажмите кнопку «Сканировать», которую вы создали ранее, и начните сканирование.


Мы работаем вместе с вами, чтобы добавить в ваш проект полную функциональность библиотеки PDF и разрабатывать его для всех платформ и сред с использованием одного основного API. Воспользуйтесь 30-дневной бесплатной пробной версией сегодня, нажав здесь.


Также опубликовано здесь .