Tenho uma rotina de leitura de arquivos que, através de uma RegEx , ele captura um conteúdo "X" do arquivo, conforme exemplo abaixo:
public void stripText(View v) {
String parsedText = null;
PDDocument document = null;
try {
document = PDDocument.load(assetManager.open("NUBank.pdf"));
} catch(IOException e) {
e.printStackTrace();
}
try {
PDFTextStripper pdfStripper = new PDFTextStripper();
pdfStripper.setStartPage(0);
pdfStripper.setEndPage(1);
parsedText = "Parsed text: " + pdfStripper.getText(document);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (document != null) document.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Log.i("Texto do PDF: ", parsedText);
}
Nesse trecho, o arquivo "NUbank.pdf" está na pasta "Assets" do projeto, e o pdf é normalmente lido e parseado.
O que preciso agora é que o usuário , ao selecionar o arquivo no celular, ele busque o caminho do arquivo e o coloque na rotina "PPDocument.load". Tentei o caminho abaixo, dentre outros, sem sucesso:
public class MainActivity extends Activity {
File root;
AssetManager assetManager;
Bitmap pageImage;
TextView tv;
private static final int ARQUIVOBOLETO = 123;
String caminhoPdf;
File arquivoPdf;
Button btnSelArq = (Button) findViewById(R.id.btnAbrir);
btnSelArq.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent chamaStore = new Intent((Intent.ACTION_OPEN_DOCUMENT));
chamaStore.setType("application/pdf");
startActivityForResult(Intent.createChooser(chamaStore,"Selecione Arquivo"),ARQUIVOBOLETO);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ARQUIVOBOLETO){
if (resultCode == Activity.RESULT_OK){
Uri pdfSelecionado = data.getData();
caminhoPdf = pdfSelecionado.toString();
System.out.println("Caminho: " + caminhoPdf);
String parsedText = null;
PDDocument document = null;
try {
document = PDDocument.load(assetManager.open(caminhoPdf));
} catch(IOException e) {
e.printStackTrace();
}
try {
PDFTextStripper pdfStripper = new PDFTextStripper();
pdfStripper.setStartPage(0);
pdfStripper.setEndPage(1);
parsedText = "Parsed text: " + pdfStripper.getText(document);
} catch (Exception e) {
e.printStackTrace();
Nessa situação, ele retornou o erro:
Caused by: java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.i(Log.java:198)
at com.tom_roush.pdfbox.sample.MainActivity.onActivityResult(MainActivity.java:116)
Então, como posso colocar o arquivo selecionado pelo usuário dentro dessa rotina?
Obs: O PDDocument.load aceita duas entradas:
PDDocument.load(Nome do Arquivo); PDDocument.load(assetManager.open(caminhDoArquivoEmString))
Obrigado desde já