android pdf 在线阅读,Android PDF阅读

在米多财富的时候遇到PDF阅读的问题,搞了很久,显示效果都不怎么样,后来放弃在APP中显示

在世纪保众又遇到了这个PDF阅读的需求,通过查阅Android官方的API发现了

0818b9ca8b590ca3270a3433284dd417.png

显示的效果

0818b9ca8b590ca3270a3433284dd417.png

主要代码:

/*

* Copyright (C) 2014 The Android Open Source Project

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package com.example.android.pdfrendererbasic;

import android.app.Activity;

import android.app.Fragment;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.pdf.PdfRenderer;

import android.os.Bundle;

import android.os.ParcelFileDescriptor;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.Toast;

import java.io.IOException;

/**

* This fragment has a big {@ImageView} that shows PDF pages, and 2 {@link android.widget.Button}s to move between

* pages. We use a {@link android.graphics.pdf.PdfRenderer} to render PDF pages as {@link android.graphics.Bitmap}s.

*/

public class PdfRendererBasicFragment extends Fragment implements View.OnClickListener {

/**

* Key string for saving the state of current page index.

*/

private static final String STATE_CURRENT_PAGE_INDEX = "current_page_index";

/**

* File descriptor of the PDF.

*/

private ParcelFileDescriptor mFileDescriptor;

/**

* {@link android.graphics.pdf.PdfRenderer} to render the PDF.

*/

private PdfRenderer mPdfRenderer;

/**

* Page that is currently shown on the screen.

*/

private PdfRenderer.Page mCurrentPage;

/**

* {@link android.widget.ImageView} that shows a PDF page as a {@link android.graphics.Bitmap}

*/

private ImageView mImageView;

/**

* {@link android.widget.Button} to move to the previous page.

*/

private Button mButtonPrevious;

/**

* {@link android.widget.Button} to move to the next page.

*/

private Button mButtonNext;

public PdfRendererBasicFragment() {

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

return inflater.inflate(R.layout.fragment_pdf_renderer_basic, container, false);

}

@Override

public void onViewCreated(View view, Bundle savedInstanceState) {

super.onViewCreated(view, savedInstanceState);

// Retain view references.

mImageView = (ImageView) view.findViewById(R.id.image);

mButtonPrevious = (Button) view.findViewById(R.id.previous);

mButtonNext = (Button) view.findViewById(R.id.next);

// Bind events.

mButtonPrevious.setOnClickListener(this);

mButtonNext.setOnClickListener(this);

// Show the first page by default.

int index = 0;

// If there is a savedInstanceState (screen orientations, etc.), we restore the page index.

if (null != savedInstanceState) {

index = savedInstanceState.getInt(STATE_CURRENT_PAGE_INDEX, 0);

}

showPage(index);

}

@Override

public void onAttach(Activity activity) {

super.onAttach(activity);

try {

openRenderer(activity);

} catch (IOException e) {

e.printStackTrace();

Toast.makeText(activity, "Error! " + e.getMessage(), Toast.LENGTH_SHORT).show();

activity.finish();

}

}

@Override

public void onDetach() {

try {

closeRenderer();

} catch (IOException e) {

e.printStackTrace();

}

super.onDetach();

}

@Override

public void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

if (null != mCurrentPage) {

outState.putInt(STATE_CURRENT_PAGE_INDEX, mCurrentPage.getIndex());

}

}

/**

* Sets up a {@link android.graphics.pdf.PdfRenderer} and related resources.

*/

private void openRenderer(Context context) throws IOException {

// In this sample, we read a PDF from the assets directory.

mFileDescriptor = context.getAssets().openFd("sample.pdf").getParcelFileDescriptor();

// This is the PdfRenderer we use to render the PDF.

mPdfRenderer = new PdfRenderer(mFileDescriptor);

}

/**

* Closes the {@link android.graphics.pdf.PdfRenderer} and related resources.

*

* @throws java.io.IOException When the PDF file cannot be closed.

*/

private void closeRenderer() throws IOException {

if (null != mCurrentPage) {

mCurrentPage.close();

}

mPdfRenderer.close();

mFileDescriptor.close();

}

/**

* Shows the specified page of PDF to the screen.

*

* @param index The page index.

*/

private void showPage(int index) {

if (mPdfRenderer.getPageCount() <= index) {

return;

}

// Make sure to close the current page before opening another one.

if (null != mCurrentPage) {

mCurrentPage.close();

}

// Use `openPage` to open a specific page in PDF.

mCurrentPage = mPdfRenderer.openPage(index);

// Important: the destination bitmap must be ARGB (not RGB).

Bitmap bitmap = Bitmap.createBitmap(mCurrentPage.getWidth(), mCurrentPage.getHeight(),

Bitmap.Config.ARGB_8888);

// Here, we render the page onto the Bitmap.

// To render a portion of the page, use the second and third parameter. Pass nulls to get

// the default result.

// Pass either RENDER_MODE_FOR_DISPLAY or RENDER_MODE_FOR_PRINT for the last parameter.

mCurrentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

// We are ready to show the Bitmap to user.

mImageView.setImageBitmap(bitmap);

updateUi();

}

/**

* Updates the state of 2 control buttons in response to the current page index.

*/

private void updateUi() {

int index = mCurrentPage.getIndex();

int pageCount = mPdfRenderer.getPageCount();

mButtonPrevious.setEnabled(0 != index);

mButtonNext.setEnabled(index + 1 < pageCount);

getActivity().setTitle(getString(R.string.app_name_with_index, index + 1, pageCount));

}

/**

* Gets the number of pages in the PDF. This method is marked as public for testing.

*

* @return The number of pages.

*/

public int getPageCount() {

return mPdfRenderer.getPageCount();

}

@Override

public void onClick(View view) {

switch (view.getId()) {

case R.id.previous: {

// Move to the previous page

showPage(mCurrentPage.getIndex() - 1);

break;

}

case R.id.next: {

// Move to the next page

showPage(mCurrentPage.getIndex() + 1);

break;

}

}

}

} 资源下载地址:http://download.csdn.net/detail/qq_18833399/9522929

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值