2014-11-10 4 views
3

Я хочу сохранить свой веб-просмотр в файл PDF. Я знаю, что я могу распечатать WebView с помощью WebView.createPrintDocumentAdapter() и PrintManager.print(). Но мне нужен способ сохранить PDF-файл, который создается внутри PrintDocumentAdapter, без каких-либо взаимодействий с пользователем, потому что мне нужен файл для дальнейшей обработки внутри моего приложения.Сохранить PDF из Webview на Android

Любые идеи?

ответ

0

Я понимаю, что этот вопрос довольно старый. Но я только что понял, как это можно сделать разумно.

По существу, в соответствии с вопросом вы можете использовать упомянутый выше метод 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/

+0

Спасибо за ваш ответ. Именно это и было моим решением. К сожалению, я забыл обновить эту страницу. Посмотрите на этот вопрос, чтобы использовать другой пакет, чем файл android.print, возможно, вы хотите обновить свой пост в блоге :) – Andreas

+0

@Andreas благодарит за ответ, я видел ваше сообщение в блоге об этом, но как создать класс в android.print пакет, это системный пакет? – Houssem

+0

Извините, я забыл опубликовать ссылку на вопрос, который я упомянул. http://stackoverflow.com/questions/29353382/instance-of-abstract-class-with-hidden-constructor С помощью этого решения нет необходимости создавать класс в пакете android.print – Andreas

0

Создать обычай WebViewClient (reference) и установить его на WebView.

В этом WebViewClient вы должны переопределить shouldOverrideUrlLoading (WebView view, String url). Здесь вы можете загрузить PDF вручную при нажатии.

Смежные вопросы