我尝试从此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();
}
}
相应的位图就是这个我不明白这个黑色边框来自哪里的位图。有什么想法吗?
答案 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