paint-brush
Como construir sua própria ferramenta de digitalização de PDF móvel para Androidpor@foxitsoftware
7,546 leituras
7,546 leituras

Como construir sua própria ferramenta de digitalização de PDF móvel para Android

por Foxit Software10m2023/11/07
Read on Terminal Reader

Muito longo; Para ler

O guia a seguir descreve como você pode aproveitar o poder do Android PDF SDK da Foxit para desenvolver rapidamente um aplicativo com recursos robustos de digitalização. Esteja você capturando várias fotos ou selecionando imagens de sua galeria, gerar um PDF é tão simples quanto um único clique. Este projeto permite que você integre perfeitamente a digitalização aos seus fluxos de trabalho existentes, tornando-o uma adição valiosa ao seu aplicativo móvel.
featured image - Como construir sua própria ferramenta de digitalização de PDF móvel para Android
Foxit Software HackerNoon profile picture
0-item
1-item
2-item


A digitalização móvel diretamente para PDF pode revolucionar seus fluxos de trabalho de documentos. Equipado com recursos como detecção automática de páginas, flash integrado para melhor iluminação, gerenciamento preciso de cores e configurações de câmera personalizadas para a criação de PDFs de nível profissional, você pode obter resultados notáveis com apenas alguns toques em seu smartphone, graças a tecnologias de ponta. tecnologia.


O guia a seguir descreve como você pode aproveitar o poder do Android PDF SDK da Foxit para desenvolver rapidamente um aplicativo com recursos robustos de digitalização. Esteja você capturando várias fotos ou selecionando imagens de sua galeria, gerar um PDF é tão simples quanto um único clique. Este projeto permite que você integre perfeitamente a digitalização aos seus fluxos de trabalho existentes, tornando-o uma adição valiosa ao seu aplicativo móvel.


Você tem a liberdade de incorporar sua própria marca comercial ou de aplicativo sem esforço, sem a necessidade de alternar elementos ou redesenhar a interface do usuário. Ele fornece um visualizador de PDF em branco com um botão de digitalização móvel dedicado, servindo como base para a construção de seu aplicativo exclusivo.

Requisitos de sistema

Requisitos dos dispositivos Android:

  • Android 4.4 (API 19) ou superior

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


  • Android Studio 3.2 ou mais recente (suporta AndroidX)
    O ambiente de execução para nossas demonstrações:
    • Android Estúdio 3.2
    • JDK 1.8
    • Gradle versão 4.6
    • Ferramenta Gradle Build 3.2
    Observação: a partir da versão 8.2, o Foxit PDF SDK para Android oferecerá suporte apenas ao AndroidX e não atenderá mais a biblioteca de suporte do Android.

Configuração de desenvolvimento

Inicie o Android Studio e abra o projeto androidrdk/samples/viewer_ctrl_demo.


Iniciando o Android Studio

Adicione a biblioteca de dependência de digitalização no arquivo gradle (view_ctrl_demo/app/build.gradle) conforme abaixo:


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


Adicionando dependência

Definir configurações de permissão

Antes de chamar a função Scan, você precisa obter permissão de armazenamento e permissão para tirar fotos. Se a permissão para usar a câmera e o álbum de fotos não for obtida antes de chamar a função Scan, o aplicativo não funcionará corretamente. Siga as etapas abaixo para definir permissões.


Adicione declarações relacionadas à permissão no arquivo AndroidManifest usando o código abaixo:


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


Em seguida, adicione o seguinte código de solicitação de permissão em 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(); } }


Agora, vamos adicionar o código relacionado à função Scan:


Adicione um botão à IU para chamar a função Scan.


Adicionar um botão de IU

Primeiro, escreva algum código para adicionar o ícone do botão da câmera. Você definirá o layout, posicionamento e recurso de imagem do botão. Este código é adicionado ao método onCreate do arquivo MainActivity para garantir que o botão seja exibido assim que o projeto for carregado. Certifique-se de adicionar isso depois:


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


Agora, vamos definir a base para o recurso de digitalização do aplicativo. A última linha de código no método onCreate acima é uma chamada para initScan(), que é o método que usaremos para inicializar as classes relevantes para o projeto.


O código abaixo mostra como você instanciará um objeto da classe PDF Scan principal da Foxit (PDFScanManager) e, em seguida, usará essa classe para inicializar o scanner e os recursos de compactação. O método final exibe a funcionalidade de digitalização quando você clica no botão da câmera.


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


O código de inicialização é então adicionado ao método initScan da seguinte maneira. Este método também será adicionado à classe MainActivity e chamado assim que o projeto for carregado. Isso garante que seu projeto terá todas as bibliotecas e funcionalidades de digitalização disponíveis.


As seguintes importações e variáveis são necessárias para o projeto:


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


Agora que inicializamos a biblioteca e a base foi definida, escreveremos duas interfaces básicas de retorno de chamada que serão usadas para salvar o documento após sua digitalização: a primeira, ScanPDFDoneCallBack, que é totalmente personalizada, e a segunda é IPDFScanManagerListener, que está disponível pronto para uso no SDK. Veja ambos abaixo:


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


A diferença entre as duas interfaces é que se o monitoramento do ScanPDFDoneCallBack estiver configurado, ao clicar no botão 'Concluído' no canto inferior direito da figura abaixo, ele salvará diretamente o documento no caminho padrão e sairá da interface de digitalização, e retorne ao caminho de salvamento padrão através do parâmetro savePath.


Se ScanPDFDoneCallBack não estiver definido, ao clicar no botão 'Concluído' no canto inferior direito da figura abaixo, uma interface para selecionar o diretório de salvamento aparecerá. O usuário seleciona o diretório especificado e o documento será salvo no diretório selecionado pelo usuário.


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


Agora, você deve implementar as interfaces adicionando-as ao 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 } } });


Se você deseja implementar outras interfaces da classe pdfscan, consulte os documentos de referência da API em foxitpdfsdk_8_1_android/docs.


Feito! A funcionalidade de digitalização foi adicionada com sucesso ao seu aplicativo. Execute o aplicativo, clique no botão Digitalizar que você criou anteriormente e inicie sua experiência de digitalização.


Trabalhamos com você para adicionar funcionalidade completa de biblioteca de PDF ao seu projeto e desenvolver em todas as plataformas e ambientes em uma API central. Faça um teste gratuito de 30 dias hoje clicando aqui.


Também publicado aqui .