为什么PDFRenderer会创建黑色边框?

时间:2018-01-15 15:23:22

标签: android pdfrenderer

我尝试从此PDF file生成位图。 我的代码是以下代码:

    mFileDescriptor = ParcelFileDescriptor.open(pdfFile, ParcelFileDescriptor.MODE_READ_ONLY);
    // This is the PdfRenderer we use to render the PDF.
    if (mFileDescriptor != null) {
        mPdfRenderer = new PdfRenderer(mFileDescriptor);
    }

    if (mPdfRenderer != null) {

        for (int i = 0; i < mPdfRenderer.getPageCount(); i++) {
            printPage(i);
        }
    }

....

private void printPage(int index) {
    byte[] img;
    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);


    int width = (int)(203.0 / 72.0 * mCurrentPage.getWidth() + 0.5);
    int height = (int)(203.0 / 72.0 * mCurrentPage.getHeight() + 0.5);
    // Important: the destination bitmap must be ARGB (not RGB).
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

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

    try {
        sendImageToPrinter(PrinterEventsProto.Image.parseFrom(bitmap), getApplicationContext());
    } catch (InvalidProtocolBufferException e) {
        e.printStackTrace();
    }
}

相应的位图就是这个我不明白这个黑色边框来自哪里的位图。有什么想法吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

这很可能是因为位图的宽度和高度与屏幕(活动窗口)的宽度和高度不匹配。

请勿像在此处那样将位图的高度和宽度设置为任意值:int width = (int)(203.0 / 72.0 * mCurrentPage.getWidth() + 0.5)

您可以尝试将位图的宽度设置为mCurrentPage.getWidth(),将高度设置为mCurrentPage.getHeight()。然后,如果将要显示的ImageView的比例类型设置为适合,它将显示为整个页面的宽度和高度。

或者,如果您将其发送到打印机,则它应该打印整页,并且不会剪切掉任何内容。虽然,您可能需要更改位图的高度和宽度以适合要打印的纸张类型。在这种情况下,请使用以下信息为A4纸生成适当比例的位图:

  

8.27“ x 11.69”等效的A4纸尺寸(以300 DPI和72 DPI为像素)分别是:2480像素x 3508像素(打印分辨率)   595像素x 842像素(屏幕分辨率)   http://www.graphic-design-employment.com/a4-paper-dimensions.html