将PDF传递到打印机应用程序时,灰色字母被黑点包围

问题描述

我的应用程序创建PDF格式的可打印工作表。我在打印工作表时发现了一个小问题。工作表在我的手机上看起来很完美。

enter image description here

但是,当使用PrintDocumentAdapter()将PDF发送到打印机驱动程序时,等待打印的结果图像的字母会被随机的黑点包围,如下图所示:

enter image description here

我该如何解决?还是这是无法避免的对打印功能的继承限制?

解决方法

显然,问题是我使用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();
            }
        }
    }