0

我尝试从此PDF 文件生成位图。我的代码如下:

    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();
    }
}

而对应的位图是我不明白这个黑色边框来自哪里的位图。任何想法 ?

在此处输入图像描述

4

1 回答 1

0

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

不要像您在这里所做的那样将您的位图高度和宽度设置为任意值:int width = (int)(203.0 / 72.0 * mCurrentPage.getWidth() + 0.5)

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

或者,如果您将其发送到打印机,它应该打印整页而不是切断任何内容。虽然,您可能需要更改位图的高度和宽度以适合您正在打印的纸张类型。在这种情况下,使用此信息为 A4 纸生成正确缩放的位图:

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

于 2018-09-06T15:41:51.333 回答