如何以编程方式在android打印对话框中设置页面范围

时间:2014-11-05 12:55:50

标签: android printing android-print-framework

我正在开发一个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();
                        }
                    }

                }

仍然会出现带有“全部”选项的打印对话框,此处我也可以手动设置范围。但我想限制此行为,因为我以编程方式设置页面范围,对话框应显示前面已设置的页面范围,并仅打印那些特定页面。有没有办法禁用此“手动页面范围选择”并设置打印对话框的页面范围。 请帮帮我

1 个答案:

答案 0 :(得分:0)

onWriteFinished回调表示已实际写入destination的页面。您的代码会发送整个PDF,因此它应提供:

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

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