问题描述
我的应用程序创建PDF格式的可打印工作表。我在打印工作表时发现了一个小问题。工作表在我的手机上看起来很完美。
但是,当使用PrintDocumentAdapter()将PDF发送到打印机驱动程序时,等待打印的结果图像的字母会被随机的黑点包围,如下图所示:
解决方法
显然,问题是我使用PrintedPdfDocument.writeTo(FileOutputStream())来完成打印工作,这可能是有缺陷的,并导致了上述问题。
我尝试了另一种打印方法,如此处所述:https://stackoverflow.com/a/49298355/13869422 这种方法不再有问题!
这是我最后的有效代码:
@Override
public void onWrite(PageRange[] pageRanges,ParcelFileDescriptor ParcelFileDescriptor,CancellationSignal cancellationSignal,WriteResultCallback writeResultCallback) {
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = getContentResolver().openInputStream(pdfUri);
outputStream = new FileOutputStream(ParcelFileDescriptor.getFileDescriptor());
byte[] buff = new byte[16384];
int size;
while ((size = inputStream.read(buff)) >= 0
&& !cancellationSignal.isCanceled()) {
outputStream.write(buff,size);
}
if (cancellationSignal.isCanceled()) {
writeResultCallback.onWriteCancelled();
} else {
writeResultCallback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
}
} catch (Exception e) {
writeResultCallback.onWriteFailed(e.getMessage());
} finally {
try {
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}