2

我需要一个关于如何从 android 中的 PDF 文件中获取页数的明确解决方案。假设这个人已经在onActivityResult()上选择了文件,我想知道 PDF 文件有多少页。我想要一个适用于minSdkVersion 19的解决方案,并且不需要我为任何 PDF 处理软件付费,因为我已经在网上查过了,没有明确的解决方案。请它将不胜感激,因为我真的需要解决方案。我将它与 Firebase 一起使用,并想在上传文件时上传 PDF 的页数。

这是一个示例代码,我使用了 PDF Box: The error I keep getting is 08-10 21:07:57.533 20514-20514/com.example.android.firebaseupload E/file: Error: End-of-File, expected line在此之前我不得不手动输入文件路径,即使手动输入文件路径后也是同样的错误。如何将 pdf 文件从路径加载到 PDDocument.load() 中?

 try {

         PDDocument doc = PDDocument.load("file:///storage/emulated/0/Boom%20Player/cache/c2#.pdf".getBytes());
         Toast.makeText(MainActivity.this,"Number of pages: "+doc.getNumberOfPages(),Toast.LENGTH_LONG).show();
     }
     catch (Exception e)
     {

         Log.e("file",e.getMessage().toString());
     }
4

2 回答 2

2

找到了解决方案,而不是在 Uri 上调用 getpath() 并尝试使用新文件 (Uri.getPath()) 打开它,而是调用 openInputStream() 从 Uri 获取 InputStream。这里有很好的帮助... getContentResolver().openInputStream(uri) Android:从内容 URI 获取文件 URI?:) 也感谢链接https://commonsware.com/blog/2016/03/15/how-consume-content-uri.html让我了解更多。

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==pickimage && resultCode==RESULT_OK && data!=null && data.getData()!=null)
    {
        filepath=data.getData();...//rest of code...

   PDDocument doc = PDDocument.load(getContentResolver().openInputStream(filepath));//main line
于 2017-08-11T17:55:07.410 回答
1

PDFBox与您所要求的 Java 等价。它有一个适用于 Android 的端口,但我不确定它有多完整。

一个例子是:

PDDocument myDocument = PDDocument.load(new File("filename.pdf"));
int numPages = myDocument.getNumberOfPages();
于 2017-08-10T19:57:17.447 回答