在安卓系统的assetsraw文件夹中的TextView中显示pdf。

问题描述 投票:-2回答:2

我有两个活动,MainActivity.java和SampleActivity.java,我在assets文件夹中存储了一个pdf文件,我在第一个活动中设置了一个按钮,当我点击这个按钮时,我希望pdf文件能够显示在SampleActivity.java的文本视图中。第二个活动也会有一个下载按钮来下载pdf文件。

我不想使用webview或使用外部程序来显示。我试过用.txt文件,它工作正常,但对pdf文件同样不工作。

是否有任何方法来实现这一点。

先谢谢了。

我用于.txt的代码是

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sample);

    txt=(TextView) findViewById(R.id.textView1);

    try
    {
        InputStream is=getAssets().open("hello.txt");
        int size=is.available();
        byte[] buffer=new byte[size];
        is.read(buffer);
        is.close();

        String text=new String(buffer);

        txt.setText(text);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
java android textview
2个回答
0
投票

当我点击那个按钮时,我想让pdf文件显示在SampleActivity.java的文本视图中。

这是不可能的。TextView 不能渲染PDF。

在Android 5.0+上,打印框架中有一些东西可以将PDF转换为图像,目的是为了打印预览。你应该可以让它与一个叫做 "PDF "的文件一起工作。ImageView,虽然我还没有玩过。另外,现在,Android 5.0+占Android设备的10%左右。

或者,欢迎你找一个PDF渲染库,你把它包含在你的应用中。

第二个活动也会有一个下载按钮来下载pdf文件。

这是不可能的,因为你无法替换一个PDF文件,它在 assets/. 资产在运行时是只读的。欢迎你把PDF文件下载到某个可读可写的地方,比如内部存储。然而,你仍然不能在一个文件中显示PDF文件。TextView.

我试过用.txt文件,它工作正常,但同样没有'nt工作的PDF文件。

除了上面提到的所有问题,PDF文件不是文本文件。他们是二进制文件。你不能把一个PDF文件读到一个 String.


0
投票

下面是在Android中的imageeview中显示pdf(来自资产文件夹)内容的代码。

private void openPDF() throws IOException {

    //open file in assets


    File fileCopy = new File(getCacheDir(), "source_of_information.pdf");

    InputStream input = getAssets().open("source_of_information.pdf");
    FileOutputStream output = new FileOutputStream(fileCopy);

    byte[] buffer = new byte[1024];
    int size;
    // Copy the entire contents of the file
    while ((size = input.read(buffer)) != -1) {
        output.write(buffer, 0, size);
    }
    //Close the buffer
    input.close();
    output.close();

    // We get a page from the PDF doc by calling 'open'
    ParcelFileDescriptor fileDescriptor =
            ParcelFileDescriptor.open(fileCopy,
                    ParcelFileDescriptor.MODE_READ_ONLY);
    PdfRenderer mPdfRenderer = new PdfRenderer(fileDescriptor);
    PdfRenderer.Page mPdfPage = mPdfRenderer.openPage(0);

    // Create a new bitmap and render the page contents into it
    Bitmap bitmap = Bitmap.createBitmap(mPdfPage.getWidth(),
            mPdfPage.getHeight(),
            Bitmap.Config.ARGB_8888);
    mPdfPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

    // Set the bitmap in the ImageView
    imageView.setImageBitmap(bitmap);
}
© www.soinside.com 2019 - 2024. All rights reserved.