将 PDF 传递到打印机应用程序时,灰色字母被黑点包围
When passing PDF to printer app, grey letters are surrounded with black dots
我的应用程序创建 PDF 格式的可打印工作表。我在打印工作表时发现了一个小问题。这些工作表在我的 phone.
上看起来很完美
但是,当使用PrintDocumentAdapter()将PDF发送到打印机驱动应用程序时,等待打印的结果图像的字母被随机黑点包围,如图所示:
我该如何解决这个问题?或者这是无法避免的打印功能的继承限制?
显然问题是我使用 PrintedPdfDocument.writeTo(FileOutputStream()) 来完成打印工作,这可能有缺陷并导致了上述工件。
我尝试了另一种方法来按照此处所述进行打印:
使用此方法不再有问题!
这是我的最终代码:
@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, 0, 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();
}
}
}
我的应用程序创建 PDF 格式的可打印工作表。我在打印工作表时发现了一个小问题。这些工作表在我的 phone.
上看起来很完美但是,当使用PrintDocumentAdapter()将PDF发送到打印机驱动应用程序时,等待打印的结果图像的字母被随机黑点包围,如图所示:
我该如何解决这个问题?或者这是无法避免的打印功能的继承限制?
显然问题是我使用 PrintedPdfDocument.writeTo(FileOutputStream()) 来完成打印工作,这可能有缺陷并导致了上述工件。
我尝试了另一种方法来按照此处所述进行打印:
这是我的最终代码:
@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, 0, 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();
}
}
}