从“RES /原始”访问PDF文件或文件夹的资产与编程给出的方法解析(Access PDF file

2019-09-18 02:17发布

从“RES /原始”访问PDF文件或文件夹的资产与编程给出的方法解析

说明:

现在这个程序访问从取选定的文件路径,并把它设置为“mFilename”的EditText字段中的文件管理器的文件。 下面的节目PDF按钮侦听显示字符串“pdffilename”被分配包含在“mFilename”的EditText字段中的String。 该PdfViewerActivity开始和字符串“pdffilename”作为一个额外的通过。 在OnCreate()的意图进行检查,如果空或不是。 这是我认为的改变可以/应。 字符串“pdffilename”分配你看到下面的东西。 我想要做的是两种方式......一个PDF文件存储的int“RES /生/ example_folder /为例.pdf”或资产的文件夹。 我想分配“pdffilename”编程与我在哪里存储这些PDF文件的路径。 我已经尝试了许多不同的方法所有这些都既没有编制,导致的错误,或造成“文件:RES /生/ example_folder /为例.pdf不存在!”。

所以基本上...

  • 我想PDF文件存储在“RES /生/ folder_example /为例.pdf”或资产的文件夹
  • 我想从代码中访问这些文件中我并不需要使用文件管理器
  • 无论如何,这将解决这将是最大的帮助,我与Java相当不错的,但我绝不是一个超级明星,所以请解释一下你的代码

谢谢你这么多,我会站在回答评论和编辑这篇文章。 我希望这篇文章将有助于其他用户,所以我将张贴的解决方案的代码。 当完成。 再次感谢你!

显示在PdfFileSelectActivity PDF按钮,监听器...

OnClickListener ShowPdfListener = new OnClickListener()
{
    public void onClick(View v)
    {
        mFilename = (EditText) findViewById(R.id.filename);
        String pdffilename = mFilename.getText().toString();
        Intent intent = new Intent(PdfFileSelectActivity.this,
        PdfViewerActivity.class)
        .putExtra(EXTRA_PDFFILENAME, pdffilename);
        startActivity(intent);
    }
};

PdfViewerActivity的onCreate()从上面显示PDF监听器调用...

Intent intent = getIntent();

if (intent != null)
{
    if ("android.intent.action.VIEW".equals(intent.getAction()))
    {
        pdffilename = storeUriContentToFile(intent.getData());
    }
    else {
        pdffilename = getIntent().getStringExtra(PdfFileSelectActivity.EXTRA_PDFFILENAME);
    }
}

if (pdffilename == null)
    pdffilename = "no file selected";

setContent(null);

(如果需要)setContent()从上面传来叫...

private void setContent(String password)
{
    try {
        parsePDF(pdffilename, password);
    }
    catch (PDFAuthenticationFailureException e)
    {
        System.out.println("Password needed");
    }
}

(如果需要)parsePDF()从上面传来叫...

    private void parsePDF(String filename, String password) throws PDFAuthenticationFailureException
    {
        long startTime = System.currentTimeMillis();
        try {
            File f = new File(filename);
            long len = f.length();
            if (len == 0) {
                mGraphView.showText("file '" + filename + "' not found");
            }
            else {
                mGraphView.showText("file '" + filename + "' has " + len + " bytes");
                openFile(f, password);
            }
        }
        catch (PDFAuthenticationFailureException e)
        {
            throw e;
        } catch (Throwable e) {
            e.printStackTrace();
            mGraphView.showText("Exception: "+e.getMessage());
        }
        long stopTime = System.currentTimeMillis();
        mGraphView.fileMillis = stopTime-startTime;

   }

再次感谢你!

Answer 1:

要访问它作为资产输入流:

in = new BufferedReader(new InputStreamReader(activity.getAssets().open(yourfile.pdf)));


Answer 2:

很多很多的时间和相当多的香烟休息后,这里是解决方案。 一旦readToByteBuffer返回字节缓冲区是为创建一个新的PDFFile这需要在字节缓冲区一样容易。

请享用...

ShowPDF按钮监听...

OnClickListener ShowPdfListener = new OnClickListener() {
    public void onClick(View v)
    {
        Intent intent = new Intent(PdfFileSelectActivity.this,
        PdfViewerActivity.class);
        startActivity(intent);
    }
};

在的onCreate()PdfViewerActivity ...

openFile2(readToByteBuffer(this.getAssets().open("test.pdf")), null);

编辑readToByteBuffer()从这里

public ByteBuffer readToByteBuffer(InputStream inStream) throws IOException
{
    long startTime = System.currentTimeMillis();
    BufferedReader in = new BufferedReader(new InputStreamReader(this.getAssets().open("test.pdf")));
    StringBuilder total = new StringBuilder();
    String line;
    while ((line = in.readLine()) != null) {
        total.append(line);
    }

    int length = total.length();
    byte[] buffer = new byte[length];
    ByteArrayOutputStream outStream = new ByteArrayOutputStream(length);
    int read;
    while (true) {
      read = inStream.read(buffer);
      if (read == -1)
        break;
      outStream.write(buffer, 0, read);
    }
    ByteBuffer byteData = ByteBuffer.wrap(outStream.toByteArray());
    long stopTime = System.currentTimeMillis();
    mGraphView.fileMillis = stopTime-startTime;
    return byteData;
  }


文章来源: Access PDF files from 'res/raw' or assets folder programmatically to parse with given methods