java - 使用蓝牙打印机打印时位图看起来严重倾斜
问题描述
我正在尝试使用蓝牙打印机打印 PDF,我正在尝试将 PDF 转换为位图,然后将位图转换为字节数组,并通过蓝牙发送,到目前为止我已经能够打印位图图像没有问题,但是当涉及到 PDF 时,打印的图像看起来非常倾斜,这是一个非常奇怪的结果,我尝试将 PDF 转换为位图,然后将其保存为 PNG,生成的文件看起来完全很好,但不是印刷版。
这是我用来将 PDF 转换为位图的代码。
public static Bitmap fileToBitmap(File file) {
try {
PdfRenderer pdfRenderer = new PdfRenderer(ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY));
PdfRenderer.Page page = pdfRenderer.openPage(0);
int pdfWidth = page.getWidth();
int pdfHeight = page.getHeight();
Bitmap pdfBitmap = Bitmap.createBitmap(pdfWidth, pdfHeight, Bitmap.Config.ARGB_8888);
page.render(pdfBitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
page.close();
pdfRenderer.close();
final Bitmap finalBitmap = Bitmap.createBitmap(pdfBitmap.getWidth(), pdfBitmap.getHeight(), pdfBitmap.getConfig());
Canvas canvas = new Canvas(finalBitmap);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(pdfBitmap, 0, 0, null);
return finalBitmap;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
我使用白色位图作为背景,因为不支持透明度。我已经尝试了几个公式来尝试正确缩放位图,使其适合纸张,其中一些打印出来的尺寸比纸张小,所以我猜这个问题不应该是打印机错误地缩放它之类的问题。
这是磁盘中写入的 PNG 外观的屏幕截图(它是从位图转换而来的,位图是从 PDF 转换而来的,因此打印应该看起来像它,但不是)。 截屏
以下是打印的 PDF 的外观: 打印 您可以看到我从 Google 获取的 Panda 图像看起来不错。
这里是仔细看看。如果你仔细看,你会发现 PDF 正在打印,但它看起来很倾斜,在某些情况下,你甚至可以看到正在打印的徽标,但它看起来又是倾斜的。 仔细看看
打印机型号:商米V1s-G。Android 版本:6.0 targetSdkVersion 28 minSdkVersion 21
提前致谢。
解决方案
在打印机的 SDK 中找到了一种方法来缩放位图并防止这种情况发生。这可能是仅与此特定打印机型号有关的问题,因此其他打印机可能不会发生这种情况。
推荐阅读
- ios - Crashlytics 日志记录的循环问题?
- google-dl-platform - 如何在 dl VM 上启动和停止 jupyter notebook
- javascript - 如何获得几个按钮的一个值?“未捕获的类型错误:无法读取属性”
- xml - 使用属性解组 xml
- python - Python以编程方式将尾随逗号添加到元组的末尾
- terminal - 在 PhpStorm 中显示奇怪的电力线字体
- parsing - 用备用文件名解析多个文本文件,找到总和,然后用批处理文件编译输出
- c# - 如何使用输出绑定而不必赋值?
- javascript - 由于目标被视为被动,无法在被动事件侦听器中阻止默认值 - Chrome
- python - os.chdir() 命令给出 FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\ in jupyter notebook