1

我正在开发一个 pdf 打印应用程序,当我被要求使用 android PrintDocumentAdapter 设置页面范围时卡住了。我正在使用这样的android api设置页面范围

this.printManager.print(FilenameUtils.getName(pdfPath),
            new PrintDocumentAdapter() {

                @Override
                public void onWrite(PageRange[] pages,
                        ParcelFileDescriptor destination,
                        CancellationSignal cancellationSignal,
                        WriteResultCallback callback) {
                    OutputStream output = new FileOutputStream(destination
                            .getFileDescriptor());
                                            InputStream pdfInStream = null;
                    try {
                        pdfInStream = new FileInputStream(
                                PdfPrint.this.pdfPath);
                        IOUtils.copy(pdfInStream, output);

                        callback.onWriteFinished(new PageRange[] {new PageRange(0, 1), new PageRange(2, 4)});

                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {

                        try {
                            output.flush();
                            pdfInStream.close();
                            output.close();
                        } catch (IOException e) {

                            e.printStackTrace();
                        }
                    }

                }

打印对话框仍然显示“全部”选项,在这里我也可以手动设置范围。但是我想限制这种行为,因为我正在以编程方式设置页面范围,并且对话框应该显示之前设置的页面范围,并且只打印那些特定的页面。有没有办法禁用此“手动页面范围选择”并在打印对话框出现时设置页面范围。请帮我

4

1 回答 1

0

onWriteFinished回调向实际写入的页面发出信号destination。您的代码发送整个 PDF,因此它应该提供:

callback.onWriteFinished(new PageRange[] { PageRange.ALL_PAGES });

要将打印限制在某些页面,请发送仅包含这些页面的 PDF。

于 2020-01-14T19:18:15.903 回答