Я понимаю, что этот вопрос довольно старый. Но я только что понял, как это можно сделать разумно.
По существу, в соответствии с вопросом вы можете использовать упомянутый выше метод createPrintDocumentAdapter
и передать результат своей собственной «поддельной» реализации PrintManager, которая просто переопределяет метод onWrite для сохранения вывода в ваш собственный файл. В приведенном ниже фрагменте показано, как принимать любые PrintDocumentAdapter
и отправлять выходные данные из файла в файл.
public void print(PrintDocumentAdapter printAdapter, final File path, final String fileName) {
printAdapter.onLayout(null, printAttributes, null, new PrintDocumentAdapter.LayoutResultCallback() {
@Override
public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {
printAdapter.onWrite(null, getOutputFile(path, fileName), new CancellationSignal(), new PrintDocumentAdapter.WriteResultCallback() {
@Override
public void onWriteFinished(PageRange[] pages) {
super.onWriteFinished(pages);
}
});
}
}, null);
}
Как вы можете видеть, что есть довольно много нулей, передаваемые в методы адаптеров, но я проверил исходный код Chromium и эти переменные никогда не используются, так что обнуляет все в порядке.
Я создал блог о том, как сделать это здесь: http://www.annalytics.co.uk/android/pdf/2017/04/06/Save-PDF-From-An-Android-WebView/
Спасибо за ваш ответ. Именно это и было моим решением. К сожалению, я забыл обновить эту страницу. Посмотрите на этот вопрос, чтобы использовать другой пакет, чем файл android.print, возможно, вы хотите обновить свой пост в блоге :) – Andreas
@Andreas благодарит за ответ, я видел ваше сообщение в блоге об этом, но как создать класс в android.print пакет, это системный пакет? – Houssem
Извините, я забыл опубликовать ссылку на вопрос, который я упомянул. http://stackoverflow.com/questions/29353382/instance-of-abstract-class-with-hidden-constructor С помощью этого решения нет необходимости создавать класс в пакете android.print – Andreas