Android PDF не найден - PullRequest
       147

Android PDF не найден

0 голосов
/ 07 августа 2020
public class PDF extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_pdf, container, false);

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.setType("application/pdf");
    startActivityForResult(intent, 1212);

    return rootView;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case 1212:
            if (resultCode == RESULT_OK) {
                Uri uri = data.getData();
                String uriString = uri.toString();
                File myFile = new File(uriString);
                String path = myFile.getAbsolutePath();
                String displayName = null;

                String p = uri.toString(); // "file:///mnt/sdcard/FileName.mp3"
                    File f = new File(uriString);
                    String pathhh = f.getAbsolutePath();
                    Log.d("rwdsvcx", pathhh);


                if (uriString.startsWith("content://")) {
                    Cursor cursor = null;
                    try {
                        Log.d("rwdscxwa", "FilePath : " + path);
                        cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
                        if (cursor != null && cursor.moveToFirst()) {
                            displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
                            openPDF(path);

                        }
                    } finally {
                        cursor.close();
                    }
                } else if (uriString.startsWith("file://")) {
                    displayName = myFile.getName();
                }
            }
            break;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

public void openPDF(String filePath){

    try {
        String parsedText="";
        PdfReader reader = new PdfReader("/storage/emulated/0/Download/sample.pdf");
        int n = reader.getNumberOfPages();
        for (int i = 0; i <n ; i++) {
            parsedText   = parsedText+ PdfTextExtractor.getTextFromPage(reader, i+1).trim()+"\n"; //Extracting the content from the different pages
        }
        Log.d("rwdscxwa", parsedText);
        reader.close();
    } catch (Exception e) {
        Log.d("rwdscxwa", ": "+e.getMessage());
    }

}
}

Я получаю путь к файлу /content:/com.mi.android.globalFileexplorer.myprovider/external_files/Download/sample.pdf

Я даже пробовал путь / хранилище / эмулированный /0/Download/sample.pdf

Оба пути я получаю одну и ту же ошибку:

/storage/emulated/0/Download/sample.pdf not found as file or resource.

Manifest

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />

Я использую библиотеку iText и пытаюсь получить текст из PDF. Где я ошибся? Есть ли еще какая-нибудь хорошая библиотека для получения текста из PDF? Любая помощь приветствуется

1 Ответ

0 голосов
/ 07 августа 2020

вам нужен провайдер

MainActivity:

     Uri uri;
            if (Build.VERSION.SDK_INT < 24) {
                uri = Uri.fromFile(file);
            } else {
                uri = FileProvider.getUriForFile(MainActivity.this, MainActivity.this.getApplicationContext().getPackageName() + ".provider", file);
            }

            Intent viewPdf = new Intent(Intent.ACTION_VIEW);
            viewPdf.setDataAndType(uri, "application/pdf");
            viewPdf.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            MainActivity.this.startActivity(viewPdf);

res / xml / external_files. xml

    <?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

Manifest:

<application>
...

 <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/external_files"/>
    </provider>
</application>

Если есть вопрос, готов ответить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...