类android.graphics.pdf.PdfRenderer源码实例Demo

下面列出了怎么用android.graphics.pdf.PdfRenderer的API类实例代码及写法,或者点击链接到github查看源代码。

@WorkerThread
private void openPdfRenderer() throws IOException {
    final File file = new File(getApplication().getCacheDir(), FILENAME);
    if (!file.exists()) {
        // Since PdfRenderer cannot handle the compressed asset file directly, we copy it into
        // the cache directory.
        final InputStream asset = getApplication().getAssets().open(FILENAME);
        final FileOutputStream output = new FileOutputStream(file);
        final byte[] buffer = new byte[1024];
        int size;
        while ((size = asset.read(buffer)) != -1) {
            output.write(buffer, 0, size);
        }
        asset.close();
        output.close();
    }
    mFileDescriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
    if (mFileDescriptor != null) {
        mPdfRenderer = new PdfRenderer(mFileDescriptor);
    }
}
 
@WorkerThread
private void showPage(int index) {
    // 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).
    final 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);
    mPageBitmap.postValue(bitmap);
    final int count = mPdfRenderer.getPageCount();
    mPageInfo.postValue(new PageInfo(index, count));
    mPreviousEnabled.postValue(index > 0);
    mNextEnabled.postValue(index + 1 < count);
}
 
源代码3 项目: fangzhuishushenqi   文件: BasePDFPagerAdapter.java
@Override
@SuppressWarnings("NewApi")
public Object instantiateItem(ViewGroup container, int position) {
    View v = inflater.inflate(R.layout.view_pdf_page, container, false);
    ImageView iv = (ImageView) v.findViewById(R.id.imageView);

    if (renderer == null || getCount() < position) {
        return v;
    }

    PdfRenderer.Page page = getPDFPage(renderer, position);

    Bitmap bitmap = bitmapContainer.get(position);
    page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
    page.close();

    iv.setImageBitmap(bitmap);
    container.addView(v, 0);

    return v;
}
 
源代码4 项目: PdfViewPager   文件: BasePDFPagerAdapter.java
@Override
@SuppressWarnings("NewApi")
public Object instantiateItem(ViewGroup container, int position) {
    View v = inflater.inflate(R.layout.view_pdf_page, container, false);
    ImageView iv = (ImageView) v.findViewById(R.id.imageView);

    if (renderer == null || getCount() < position) {
        return v;
    }

    PdfRenderer.Page page = getPDFPage(renderer, position);

    Bitmap bitmap = bitmapContainer.get(position);
    page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
    page.close();

    iv.setImageBitmap(bitmap);
    container.addView(v, 0);

    return v;
}
 
源代码5 项目: BookReader   文件: BasePDFPagerAdapter.java
@Override
@SuppressWarnings("NewApi")
public Object instantiateItem(ViewGroup container, int position) {
    View v = inflater.inflate(R.layout.view_pdf_page, container, false);
    ImageView iv = (ImageView) v.findViewById(R.id.imageView);

    if (renderer == null || getCount() < position) {
        return v;
    }

    PdfRenderer.Page page = getPDFPage(renderer, position);

    Bitmap bitmap = bitmapContainer.get(position);
    page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
    page.close();

    iv.setImageBitmap(bitmap);
    container.addView(v, 0);

    return v;
}
 
源代码6 项目: Pix-Art-Messenger   文件: FileBackend.java
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private Bitmap getPDFPreview(final File file, int size) {
    try {
        final ParcelFileDescriptor mFileDescriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
        if (mFileDescriptor == null) {
            return null;
        }
        final PdfRenderer renderer = new PdfRenderer(mFileDescriptor);
        final PdfRenderer.Page page = renderer.openPage(0);
        final Dimensions dimensions = scalePdfDimensions(new Dimensions(page.getHeight(), page.getWidth()));
        final Bitmap bitmap = Bitmap.createBitmap(dimensions.width, dimensions.height, Bitmap.Config.ARGB_8888);
        bitmap.eraseColor(Color.WHITE);
        page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
        drawOverlay(bitmap, R.drawable.show_pdf, 0.75f);
        page.close();
        renderer.close();
        return bitmap;
    } catch (Exception e) {
        e.printStackTrace();
        final Bitmap placeholder = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        placeholder.eraseColor(Color.WHITE);
        drawOverlay(placeholder, R.drawable.show_pdf, 0.75f);
        return placeholder;
    }
}
 
/**
 * 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.
    File file = new File(context.getCacheDir(), FILENAME);
    if (!file.exists()) {
        // Since PdfRenderer cannot handle the compressed asset file directly, we copy it into
        // the cache directory.
        InputStream asset = context.getAssets().open(FILENAME);
        FileOutputStream output = new FileOutputStream(file);
        final byte[] buffer = new byte[1024];
        int size;
        while ((size = asset.read(buffer)) != -1) {
            output.write(buffer, 0, size);
        }
        asset.close();
        output.close();
    }
    mFileDescriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
    // This is the PdfRenderer we use to render the PDF.
    if (mFileDescriptor != null) {
        mPdfRenderer = new PdfRenderer(mFileDescriptor);
    }
}
 
/**
 * 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();
}
 
源代码9 项目: PDFCreatorAndroid   文件: PDFUtil.java
/**
 * Convert PDF to bitmap, only works on devices above LOLLIPOP
 *
 * @param pdfFile pdf file
 * @return list of bitmap of every page
 * @throws Exception
 */
public static ArrayList<Bitmap> pdfToBitmap(File pdfFile) throws Exception, IllegalStateException {
    if (pdfFile == null || pdfFile.exists() == false) {
        throw new IllegalStateException("");
    }

    ArrayList<Bitmap> bitmaps = new ArrayList<>();

    try {
        PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(pdfFile, ParcelFileDescriptor.MODE_READ_ONLY));

        Bitmap bitmap;
        final int pageCount = renderer.getPageCount();
        for (int i = 0; i < pageCount; i++) {
            PdfRenderer.Page page = renderer.openPage(i);

            int width = page.getWidth();
            int height = page.getHeight();

            /* FOR HIGHER QUALITY IMAGES, USE:
            int width = context.getResources().getDisplayMetrics().densityDpi / 72 * page.getWidth();
            int height = context.getResources().getDisplayMetrics().densityDpi / 72 * page.getHeight();
            */

            bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

            bitmaps.add(bitmap);

            // close the page
            page.close();
        }
        // close the renderer
        renderer.close();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return bitmaps;
}
 
源代码10 项目: PDFCreatorAndroid   文件: PDFUtil.java
/**
 * Get total number of pages
 *
 * @param pdfFile pdf file to get page count of
 * @return pdf page count
 * @throws IOException
 * @throws Exception
 */
private int getTotalPages(File pdfFile) throws IOException, Exception {
    ParcelFileDescriptor parcelFileDescriptor = ParcelFileDescriptor.open(pdfFile, ParcelFileDescriptor.MODE_READ_ONLY);
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        PdfRenderer pdfRenderer = new PdfRenderer(parcelFileDescriptor);
        return pdfRenderer.getPageCount();
    } else {
        throw new Exception("PDF cannot be processed in this device");
    }
}
 
源代码11 项目: fangzhuishushenqi   文件: PDFPagerAdapter.java
@Override
@SuppressWarnings("NewApi")
public Object instantiateItem(ViewGroup container, int position) {
    View v = inflater.inflate(R.layout.view_pdf_page, container, false);
    ImageView iv = (ImageView) v.findViewById(R.id.imageView);

    if (renderer == null || getCount() < position) {
        return v;
    }

    PdfRenderer.Page page = getPDFPage(renderer, position);

    Bitmap bitmap = bitmapContainer.get(position);
    page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
    page.close();

    PhotoViewAttacher attacher = new PhotoViewAttacher(iv);
    attacher.setScale(scale.getScale(), scale.getCenterX(), scale.getCenterY(), true);
    attacher.setOnMatrixChangeListener(this);

    attachers.put(position, new WeakReference<PhotoViewAttacher>(attacher));

    iv.setImageBitmap(bitmap);
    attacher.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {
        @Override
        public void onPhotoTap(View view, float x, float y) {
            if (pageClickListener != null) {
                pageClickListener.onPageTap(view, x, y);
            }
        }
    });
    attacher.update();
    container.addView(v, 0);

    return v;
}
 
源代码12 项目: fangzhuishushenqi   文件: BasePDFPagerAdapter.java
@SuppressWarnings("NewApi")
protected void init() {
    try {
        renderer = new PdfRenderer(getSeekableFileDescriptor(pdfPath));
        inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        PdfRendererParams params = extractPdfParamsFromFirstPage(renderer, renderQuality);
        bitmapContainer = new SimpleBitmapPool(params);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
 
源代码13 项目: fangzhuishushenqi   文件: BasePDFPagerAdapter.java
@SuppressWarnings("NewApi")
private PdfRendererParams extractPdfParamsFromFirstPage(PdfRenderer renderer, float renderQuality) {
    PdfRenderer.Page samplePage = getPDFPage(renderer, FIRST_PAGE);
    PdfRendererParams params = new PdfRendererParams();

    params.setRenderQuality(renderQuality);
    params.setOffScreenSize(offScreenSize);
    params.setWidth((int) (samplePage.getWidth() * renderQuality));
    params.setHeight((int) (samplePage.getHeight() * renderQuality));

    samplePage.close();

    return params;
}
 
源代码14 项目: PdfViewPager   文件: BasePDFPagerAdapter.java
@SuppressWarnings("NewApi")
protected void init() {
    try {
        renderer = new PdfRenderer(getSeekableFileDescriptor(pdfPath));
        inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        PdfRendererParams params = extractPdfParamsFromFirstPage(renderer, renderQuality);
        bitmapContainer = new SimpleBitmapPool(params);
    } catch (IOException e) {
        errorHandler.onPdfError(e);
    }
}
 
源代码15 项目: PdfViewPager   文件: BasePDFPagerAdapter.java
@SuppressWarnings("NewApi")
protected PdfRendererParams extractPdfParamsFromFirstPage(PdfRenderer renderer, float renderQuality) {
    PdfRenderer.Page samplePage = getPDFPage(renderer, FIRST_PAGE);
    PdfRendererParams params = new PdfRendererParams();

    params.setRenderQuality(renderQuality);
    params.setOffScreenSize(offScreenSize);
    params.setWidth((int) (samplePage.getWidth() * renderQuality));
    params.setHeight((int) (samplePage.getHeight() * renderQuality));

    samplePage.close();

    return params;
}
 
源代码16 项目: BookReader   文件: PDFPagerAdapter.java
@Override
@SuppressWarnings("NewApi")
public Object instantiateItem(ViewGroup container, int position) {
    View v = inflater.inflate(R.layout.view_pdf_page, container, false);
    ImageView iv = (ImageView) v.findViewById(R.id.imageView);

    if (renderer == null || getCount() < position) {
        return v;
    }

    PdfRenderer.Page page = getPDFPage(renderer, position);

    Bitmap bitmap = bitmapContainer.get(position);
    page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
    page.close();

    PhotoViewAttacher attacher = new PhotoViewAttacher(iv);
    attacher.setScale(scale.getScale(), scale.getCenterX(), scale.getCenterY(), true);
    attacher.setOnMatrixChangeListener(this);

    attachers.put(position, new WeakReference<PhotoViewAttacher>(attacher));

    iv.setImageBitmap(bitmap);
    attacher.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {
        @Override
        public void onPhotoTap(View view, float x, float y) {
            if (pageClickListener != null) {
                pageClickListener.onPageTap(view, x, y);
            }
        }
    });
    attacher.update();
    container.addView(v, 0);

    return v;
}
 
源代码17 项目: BookReader   文件: BasePDFPagerAdapter.java
@SuppressWarnings("NewApi")
protected void init() {
    try {
        renderer = new PdfRenderer(getSeekableFileDescriptor(pdfPath));
        inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        PdfRendererParams params = extractPdfParamsFromFirstPage(renderer, renderQuality);
        bitmapContainer = new SimpleBitmapPool(params);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
 
源代码18 项目: BookReader   文件: BasePDFPagerAdapter.java
@SuppressWarnings("NewApi")
private PdfRendererParams extractPdfParamsFromFirstPage(PdfRenderer renderer, float renderQuality) {
    PdfRenderer.Page samplePage = getPDFPage(renderer, FIRST_PAGE);
    PdfRendererParams params = new PdfRendererParams();

    params.setRenderQuality(renderQuality);
    params.setOffScreenSize(offScreenSize);
    params.setWidth((int) (samplePage.getWidth() * renderQuality));
    params.setHeight((int) (samplePage.getHeight() * renderQuality));

    samplePage.close();

    return params;
}
 
源代码19 项目: Conversations   文件: FileBackend.java
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private Bitmap renderPdfDocument(ParcelFileDescriptor fileDescriptor, int targetSize, boolean fit) throws IOException {
    final PdfRenderer pdfRenderer = new PdfRenderer(fileDescriptor);
    final PdfRenderer.Page page = pdfRenderer.openPage(0);
    final Dimensions dimensions = scalePdfDimensions(new Dimensions(page.getHeight(), page.getWidth()), targetSize, fit);
    final Bitmap rendered = Bitmap.createBitmap(dimensions.width, dimensions.height, Bitmap.Config.ARGB_8888);
    rendered.eraseColor(0xffffffff);
    page.render(rendered, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
    page.close();
    pdfRenderer.close();
    fileDescriptor.close();
    return rendered;
}
 
源代码20 项目: fangzhuishushenqi   文件: BasePDFPagerAdapter.java
@SuppressWarnings("NewApi")
protected PdfRenderer.Page getPDFPage(PdfRenderer renderer, int position) {
    return renderer.openPage(position);
}
 
源代码21 项目: PdfViewPager   文件: BasePDFPagerAdapter.java
@SuppressWarnings("NewApi")
protected PdfRenderer.Page getPDFPage(PdfRenderer renderer, int position) {
    return renderer.openPage(position);
}
 
源代码22 项目: BookReader   文件: BasePDFPagerAdapter.java
@SuppressWarnings("NewApi")
protected PdfRenderer.Page getPDFPage(PdfRenderer renderer, int position) {
    return renderer.openPage(position);
}
 
 类所在包
 类方法
 同包方法