【问题标题】:get number of pages from PDF in android code在android代码中从PDF获取页数
【发布时间】:2017-08-10 19:31:47
【问题描述】:

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

这是一个示例代码,我使用了 PDF Box:我不断收到的错误是 08-10 21:07:57.533 20514-20514/com.example.android.firebaseupload E/file: Error: End- of-File, 预期行 我之前必须手动输入文件路径,即使手动输入文件路径后仍然出现同样的错误。 如何将 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());
     }

【问题讨论】:

  • stackoverflow.com/q/35629451/115145 stackoverflow.com/q/6026971/115145 stackoverflow.com/q/4134949/115145 和许多其他页面出现在 java count pages pdf 上的 Google 搜索中。 stackoverflow.com/q/30483373/115145 出现在 android count pages pdf 上的 Google 搜索中。你的问题和那些有什么不同?
  • 我看过这些,如果不是全部的话,大部分都遇到过。他们都没有给我一个有效的答案。我尝试了“建议”的解决方案,但无济于事。 ...或者我应该打印出我遇到的错误?因为在我检查的所有内容中,没有一个给我正确的答案。
  • 我建议您提出一个单独的 Stack Overflow 问题,并在其中提供 minimal reproducible example 说明您尝试了什么以及遇到了哪些具体问题。
  • PDDocument doc = PDDocument.load("file:///storage/emulated/0/Boom%20Player/cache/c2#.pdf".getBytes()); 在我看来好像您正在将字节序列加载为 PDF。 PDF 文件不以“file://”开头,而是以“%PDF”开头。请传递一个文件对象。
  • 确实getByte‌​s() 调用是完全错误的。

标签: android pdf pdfbox onactivityresult android-pdf-api


【解决方案1】:

找到了解决方案,我没有在 Uri 上调用 getpath() 并尝试使用新文件 (Uri.getPath()) 打开它,而是调用 openInputStream() 从 Uri 获取 InputStream。这里有很好的帮助... getContentResolver().openInputStream(uri) Android: Getting a file URI from a content 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

【讨论】:

    【解决方案2】:

    PDFBox 是 Java 等价于您所要求的。有一个port of it for Android,虽然我不确定它有多完整。

    一个例子是:

    PDDocument myDocument = PDDocument.load(new File("filename.pdf"));
    int numPages = myDocument.getNumberOfPages();
    

    【讨论】:

    • 谢谢,我在研究时也看到,主要问题是第一行的 NEW FILE 部分,我如何将它定向到 PDF 文件而不给我一个错误。我已经尝试过 Bytes[] 和类似的解决方案,但一直给我错误:文件结束,预期行
    • 尝试只发送 PDF 而不是字节表示
    • 使用绝对路径还是只使用文件名?
    • file:///storage/emulated/0/Boom%20Player/cache/c2#.pdf
    • 您对此有疑问吗? PDDocument.load(new File("file:///storage/emulated/0/Boom%20Player/cache/c2#.pdf"));
    猜你喜欢
    • 1970-01-01
    • 2011-04-02
    • 2015-07-07
    • 2016-11-05
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2015-08-07
    • 2011-03-09
    相关资源
    最近更新 更多