从手机读取pdf并将其存储在Android Studio中的字符串中

普拉奇

我正在开发一个Android应用程序,该应用程序需要从手机浏览pdf,然后将其内容存储到String中。我有以下代码:

 //src= location of the pdf file obtained from while browsing pdf from the phone (eg:"/sdcard/bluetooth/My_pdf.pdf")
        public void convertPDFToText(String src) {
        try {
               //create pdf reader
               PdfReader pr = new PdfReader(src);    

              //get the number of pages in the document
               int pNum = pr.getNumberOfPages();

            //extract text from each page and write it to the output text file
            for (int page = 1; page <= pNum; page++) {

            //text is the required String (initialized as "" )
            text = text + PdfTextExtractor.getTextFromPage(pr, page);
              }
            } catch (Exception e) {
        e.printStackTrace();
           }
         }

当我在java文件中单独运行此代码时,它运行得很好(根据系统中pdf的位置更改src输入),但是当我在android studio中运行相同的代码时,它给了我一个例外:

java.io.IOException: /sdcard/bluetooth/My_pdf.pdf not found as file or resource.
at com.itextpdf.text.io.RandomAccessSourceFactory.createByReadingToMemory(RandomAccessSourceFactory.java:263)
at com.itextpdf.text.io.RandomAccessSourceFactory.createBestSource(RandomAccessSourceFactory.java:173)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:223)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:207)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:197)
at com.example.prachisingh.summer.DisplayActivity.convertPDFToText(DisplayActivity.java:112)
at com.example.prachisingh.summer.DisplayActivity.onCreate(DisplayActivity.java:70)
at android.app.Activity.performCreate(Activity.java:6259)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) resource.I need help figuring out the cause of this error.

这是我的AndroidMAnifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.Computer.app_name">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".DisplayActivity" >
    </activity>

    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
</application>

皮科斯

添加权限:

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

到您的AndroidManifest.xml

另外,如果您的目标SDK为23或更高版本,则您必须在应用运行时请求此权限。更多信息在这里

示例实现可能如下所示:

  1. 创建帮助程序类以请求权限

    public class PermissionChecker {
    
        private final Activity activity;
        private final View layout;
        private final int requestCode;
        private final String permission;
        private final String description;
    
        public PermissionChecker(@NonNull Activity activity, @NonNull View layout,
                         int requestCode,
                         @NonNull String permission,
                         @NonNull String description) {
            this.activity = activity;
            this.layout = layout;
    
            this.requestCode = requestCode;
            this.permission = permission;
            this.description = description;
        }
    
        public void requestPermission() {
            if (ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)) {
                // Provide an additional rationale to the user if the permission was not granted
                // and the user would benefit from additional context for the use of the permission.
                // Display a SnackBar with a button to request the missing permission.
                Snackbar.make(layout, description, Snackbar.LENGTH_INDEFINITE).setAction("OK", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        requestPermission(activity, permission, requestCode);
                    }
                }).show();
            } else {
                // No explanation needed, we can request the permission.
                requestPermission(activity, permission, requestCode);
            }
        }
    
        public boolean checkPermission() {
            return ContextCompat.checkSelfPermission(activity, permission) == PackageManager.PERMISSION_GRANTED;
        }
    
        public boolean onRequestPermissionsResult(int requestCode, int[] grantResults) {
            return requestCode == this.requestCode
                && ((grantResults.length > 0)
                && (grantResults[0] == PackageManager.PERMISSION_GRANTED));
        }
    
        private void requestPermission(Activity activityContext, String permission, int requestCode) {
            ActivityCompat.requestPermissions(activityContext, new String[] { permission }, requestCode);
        }
    }
    
  2. 您的活动应实现OnRequestPermissionsResultCallback

    实现ActivityCompat.OnRequestPermissionsResultCallback
  3. 用于外部存储权限的Init PermissionChecker。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        // ...
    
        View rootView = getWindow().getDecorView().getRootView();
    
        readExternalStoragePermissionChecker = new PermissionChecker(this, rootView,
            PERMISSION_REQUEST_READ_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE,
            "Read external storage access is required to read pdfs from sdcard."
            );
    
        if (readExternalStoragePermissionChecker.checkPermission()) {
            convertPDFToText(path);
        }
        else {
            readExternalStoragePermissionChecker.requestPermission();
        }
    
        // ...
    }
    
  4. 在您的Activity中覆盖onRequestPermissionsResult方法。

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (readExternalStoragePermissionChecker.onRequestPermissionsResult(requestCode, grantResults)) {
            convertPDFToText(path);
        }
    }
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Studio 中的字符串等于

来自分类Dev

计算以x开头的字符串,并将其存储在Array Android Studio中

来自分类Dev

如何从Android中的视频URL捕获/记录剪辑并将其保存到手机

来自分类Dev

从Android Studio的布局文件中的字符串数组访问字符串

来自分类Dev

在Android Studio中串联字符串时的最大字符串长度

来自分类Dev

在Android Studio中快速翻译字符串

来自分类Dev

从Android Studio中的字符串获取Drawable对象

来自分类Dev

在 android studio 中检索 if/else 子句的字符串

来自分类Dev

无法在 android studio 中设置字符串值

来自分类Dev

如何拆分字符串并将其存储在变量中?

来自分类Dev

C ++读取文件并将其存储到字符串中

来自分类Dev

如何读取字符串数据并只从中获取数字并将其存储在列表中

来自分类Dev

无法从 json 中读取 URL 字符串并将其应用于 Android 中的对象

来自分类Dev

Android解析:从parsequeryadapter中获取字符串并将其存储到ArrayList中

来自分类Dev

从文件中仅读取一些字符串并将其存储在Java中的堆栈中

来自分类Dev

android - 从edittext获取字符串并将其存储在数组中

来自分类Dev

Android Studio:将扫描程序的字符串存储在/ assets中的文件的String数组中

来自分类Dev

我想从文本文件中读取特定的字符串并将其存储在Excel工作表中

来自分类Dev

如何读取n个字符串并将其存储到c中的指针数组中

来自分类Dev

从字符串中读取字符并将其设置在textviews中

来自分类Dev

将字符串作为输入并将其存储在C中的字符数组中

来自分类Dev

将连接字符串存储在字符串中

来自分类Dev

Android在字符串中搜索字符

来自分类Dev

从字符串数组android studio中删除第一个字符串

来自分类Dev

如何在字符串中查找特定字符并将其放在字符串末尾

来自分类Dev

如何在字符串中查找特定字符并将其放在字符串末尾

来自分类Dev

如何使用换行符读取字符串并将其存储到Pandas数据框或python列表中

来自分类Dev

在Android Studio中从JSON中的数组获取字符串

来自分类Dev

如何获取复选框值并将其存储到Android中的字符串数组中

Related 相关文章

  1. 1

    Android Studio 中的字符串等于

  2. 2

    计算以x开头的字符串,并将其存储在Array Android Studio中

  3. 3

    如何从Android中的视频URL捕获/记录剪辑并将其保存到手机

  4. 4

    从Android Studio的布局文件中的字符串数组访问字符串

  5. 5

    在Android Studio中串联字符串时的最大字符串长度

  6. 6

    在Android Studio中快速翻译字符串

  7. 7

    从Android Studio中的字符串获取Drawable对象

  8. 8

    在 android studio 中检索 if/else 子句的字符串

  9. 9

    无法在 android studio 中设置字符串值

  10. 10

    如何拆分字符串并将其存储在变量中?

  11. 11

    C ++读取文件并将其存储到字符串中

  12. 12

    如何读取字符串数据并只从中获取数字并将其存储在列表中

  13. 13

    无法从 json 中读取 URL 字符串并将其应用于 Android 中的对象

  14. 14

    Android解析:从parsequeryadapter中获取字符串并将其存储到ArrayList中

  15. 15

    从文件中仅读取一些字符串并将其存储在Java中的堆栈中

  16. 16

    android - 从edittext获取字符串并将其存储在数组中

  17. 17

    Android Studio:将扫描程序的字符串存储在/ assets中的文件的String数组中

  18. 18

    我想从文本文件中读取特定的字符串并将其存储在Excel工作表中

  19. 19

    如何读取n个字符串并将其存储到c中的指针数组中

  20. 20

    从字符串中读取字符并将其设置在textviews中

  21. 21

    将字符串作为输入并将其存储在C中的字符数组中

  22. 22

    将连接字符串存储在字符串中

  23. 23

    Android在字符串中搜索字符

  24. 24

    从字符串数组android studio中删除第一个字符串

  25. 25

    如何在字符串中查找特定字符并将其放在字符串末尾

  26. 26

    如何在字符串中查找特定字符并将其放在字符串末尾

  27. 27

    如何使用换行符读取字符串并将其存储到Pandas数据框或python列表中

  28. 28

    在Android Studio中从JSON中的数组获取字符串

  29. 29

    如何获取复选框值并将其存储到Android中的字符串数组中

热门标签

归档