2016-11-10 198 views
0

這裏是我用來渲染所謂的一個儲存在「下載/安裝Adobe Reader/answerkey.pdf」的PDF渲染器類沒有在Android上渲染PDF SDK 21

package com.practice.pdftest; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Matrix; 
import android.graphics.Rect; 
import android.graphics.pdf.PdfRenderer; 
import android.os.Environment; 
import android.os.ParcelFileDescriptor; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.IOException; 

public class MainActivity extends Activity { 


    private ImageView imageView; 
    private Button next, previous; 
    private TextView tv; 
    private int currentPage = 0; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     next = (Button)findViewById(R.id.next); 
     next.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       currentPage++; 
       render(); 
      } 
     }); 

     previous = (Button)findViewById(R.id.previous); 
     previous.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       currentPage--; 
       render(); 
      } 
     }); 
//  tv = (TextView)findViewById(R.id.testText); 
//  tv.setText(Environment.getExternalStorageDirectory().getAbsolutePath()); 
// 
//  Toast toast = Toast.makeText(getApplicationContext(),Environment.getExternalStorageDirectory().getAbsolutePath(),Toast.LENGTH_LONG); 
//  toast.show(); 
    } 

    private void render() { 
     try { 
      imageView = (ImageView)findViewById(R.id.imageView); 

      int REQ_WIDTH = 1; 
      int REQ_HEIGHT = 1; 

      REQ_WIDTH = imageView.getWidth(); 
      REQ_HEIGHT = imageView.getHeight(); 
      Bitmap bitmap = Bitmap.createBitmap(REQ_WIDTH, REQ_HEIGHT, Bitmap.Config.ARGB_4444); 
      File file = new File(Environment.getDataDirectory().getPath()+"Adobe Reader/answerkey.pdf"); 
      PdfRenderer pdfRenderer = new PdfRenderer(ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)); 
      if(currentPage < 0) { 
       currentPage=0; 
      } 
      else if (currentPage > pdfRenderer.getPageCount()) { 
       currentPage = pdfRenderer.getPageCount()-1; 
      } 

      Matrix matrix = imageView.getImageMatrix(); 
      Rect rect = new Rect(0,0,REQ_HEIGHT,REQ_WIDTH); 
      pdfRenderer.openPage(currentPage).render(bitmap,rect,matrix,PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY); 
      imageView.setImageMatrix(matrix); 
      imageView.setImageBitmap(bitmap); 
      imageView.invalidate(); 


     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
「answerkey.pdf」 PDF的代碼

這裏是我做了layout.xml文件 -

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:orientation="vertical" 
    tools:context="com.practice.pdftest.MainActivity"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView" 
     android:layout_weight="4" 
     android:background="@android:color/white" 
     android:layout_marginBottom="20dp" 
     /> 
    <!--<TextView--> 
     <!--android:layout_width="wrap_content"--> 
     <!--android:layout_height="wrap_content"--> 
     <!--android:id="@+id/testText"--> 
     <!--android:text="Test"--> 

     <!--/>--> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:orientation="horizontal" 
     android:layout_weight="2" 
     android:gravity="center" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="-100dp"> 

     <Button 
      android:id="@+id/previous" 
      android:layout_width="200dp" 
      android:layout_height="wrap_content" 
      android:text="Previous" 
      /> 

     <Button 
      android:id="@+id/next" 
      android:layout_width="200dp" 
      android:layout_height="wrap_content" 
      android:text="Next" /> 

    </LinearLayout> 
</LinearLayout> 

出於某種原因,PDF只是沒有被顯示在屏幕上,我不斷收到一個白色的空白背景。我究竟做錯了什麼?路徑不正確?我的設備上沒有SD卡。或者我在做位圖錯誤?

回答

0

路徑不正確?

是的。

我有我的設備

即罰款上沒有SD卡。那將是removable storage。我正在解釋「Download/Adob​​e Reader/answerkey.pdf」,指的是external storage上的內容。

推薦的方式來獲得這個位置將取代:

File file = new File(Environment.getDataDirectory().getPath()+"Adobe Reader/answerkey.pdf"); 

有:

File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "Adobe Reader/answerkey.pdf"); 

請注意,您的應用程序將需要請求READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE權限,將涉及在Android 6.0及更高版本(如果您的targetSdkVersion爲23或更高版本)上爲runtime permissions