【问题标题】:Not showing the first page when started启动时不显示第一页
【发布时间】:2016-05-16 12:45:08
【问题描述】:

美好的一天,我几乎是 android studio 上的 pdf 渲染器的新手 > api 21,我找到了一个简单的代码来读取资产文件夹上的 pdf。 我的问题是,当它加载时,文件的第一页没有显示,除非我按下下一步按钮。我的应用程序旨在阅读用户手册 pdf。

package com.bloxofcode.phase1app;

import android.app.AlertDialog;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.graphics.pdf.PdfRenderer;
import android.os.ParcelFileDescriptor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class UsersManual extends AppCompatActivity {

    private ImageView imageView;
    private int currentPage = 0;
    private Button next, previous;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_users_manual);

        next = (Button) findViewById(R.id.next);
        previous = (Button) findViewById(R.id.previous);
        render();
        next.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                currentPage++;
                render();
            }
        });

        previous.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                currentPage--;
                render();
            }
        });


    }

    private void render() {
        try{
            imageView = (ImageView) findViewById(R.id.image);
            int REQ_WIDTH = imageView.getWidth();
            int REQ_HEIGHT = imageView.getHeight();

            Bitmap bitmap = Bitmap.createBitmap(REQ_WIDTH, REQ_HEIGHT, Bitmap.Config.ARGB_8888);
            //File file = new File("/sdcard/Download/sample.pdf");

            AssetManager assetManager = getAssets();

            InputStream in = null;
            OutputStream out = null;
            File file = new File(getFilesDir(), "Learning Python 5th Ed 2013.pdf");
            try
            {
                in = assetManager.open("Learning Python 5th Ed 2013.pdf");
                out = openFileOutput(file.getName(), Context.MODE_WORLD_READABLE);

                copyFile(in, out);
                in.close();
                in = null;
                out.flush();
                out.close();
                out = null;
            } catch (Exception e)
            {
                Log.e("tag", e.getMessage());
            }
            //ParcelFileDescriptor p = getApplicationContext().getAssets().openFd("Learning Python 5th Ed 2013.pdf").getParcelFileDescriptor();
            File f = new File(getFilesDir() + "/Learning Python 5th Ed 2013.pdf");
            PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY));

            if(currentPage <= 0) {
                currentPage = 0;
            } else if(currentPage > renderer.getPageCount()) {
                currentPage = renderer.getPageCount() - 1;
            }

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

        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    private void copyFile(InputStream in, OutputStream out) throws IOException
    {
        byte[] buffer = new byte[1024];
        int read;
        while ((read = in.read(buffer)) != -1)
        {
            out.write(buffer, 0, read);
        }
    }
}

【问题讨论】:

  • 如果在渲染前增加 onCreate 中的页面计数器会怎样?
  • 还是不行:(
  • 我不明白为什么不这样做。启动活动和计时按钮之间的区别在于增加页面并再次调用渲染。也许你实际上需要调用render,增加计数器,然后在onCreate中再次渲染

标签: android pdf android-studio


【解决方案1】:

REQ_WIDTH 和 REQ_HEIGHT 为 0。尝试向它们添加与屏幕尺寸相关的值

【讨论】:

    【解决方案2】:

    你能试试这段代码吗?我刚刚清理了一下

    import android.app.AlertDialog;
    import android.content.Context;
    import android.content.res.AssetManager;
    import android.graphics.Bitmap;
    import android.graphics.Matrix;
    import android.graphics.Rect;
    import android.graphics.pdf.PdfRenderer;
    import android.os.ParcelFileDescriptor;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    public class UsersManual extends AppCompatActivity {
    
        private ImageView imageView;
        private int currentPage = 0;
        private Button next, previous;
        private PdfRenderer renderer;
        int REQ_WIDTH = imageView.getWidth();
        int REQ_HEIGHT = imageView.getHeight();
        private int count;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_users_manual);
    
            next = (Button) findViewById(R.id.next);
            previous = (Button) findViewById(R.id.previous);
            render();
            display();
            next.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    currentPage++;
                    display();
                }
            });
    
            previous.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    currentPage--;
                    display();
                }
            });
    
    
        }
    
        private void render() {
            try {
                imageView = (ImageView) findViewById(R.id.image);
                REQ_WIDTH = imageView.getWidth();
                REQ_HEIGHT = imageView.getHeight();
    
                File f = new File(getFilesDir() + "/Learning Python 5th Ed 2013.pdf");
                renderer = new PdfRenderer(ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY));
                count = renderer.getPageCount();
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private void display(){
    
            if (currentPage <= 0) {
                currentPage = 0;
            } else if (currentPage > count) {
                currentPage = renderer.getPageCount() - 1;
            }
    
            Bitmap bitmap = Bitmap.createBitmap(REQ_WIDTH, REQ_HEIGHT, Bitmap.Config.ARGB_8888);
    
            Matrix m = imageView.getImageMatrix();
            Rect rect = new Rect(0, 0, REQ_WIDTH, REQ_HEIGHT);
            renderer.openPage(currentPage).render(bitmap, rect, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
            imageView.setImageMatrix(m);
            imageView.setImageBitmap(bitmap);
            imageView.invalidate();
        }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      相关资源
      最近更新 更多