2017-02-21 44 views
2

Итак, я пытаюсь создать PDF-файл из Webview. Прямо сейчас я могу создать изображение из webview, но у меня возникли проблемы с разложением документа на многих страницах.Создайте PDF из Webview на Android

Во-первых, создать Bitmap из WebView:

public static Bitmap screenShot(View view) { 
     Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), 
       view.getHeight(), Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmap); 
     canvas.drawColor(Color.WHITE); 
     view.draw(canvas); 
     return bitmap; 
    } 

Во-вторых, я создаю и показываю PDF:

public void criaPdf(){ 
     Bitmap bitmap = Utils.screenShot(mContratoWebview); 

     Document doc = new Document(); 


     File dir = new File(getFilesDir(), "app_imageDir"); 

     if(!dir.exists()) { 
      dir.mkdirs(); 
     } 

     File file = new File(dir, "contratoPdf.pdf"); 

     try { 
      FileOutputStream fOut = new FileOutputStream(file); 

      PdfWriter.getInstance(doc, fOut); 

      //open the document 
      doc.open(); 

      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 

      byte[] byteArray = stream.toByteArray(); 
      Image image = Image.getInstance(byteArray); 
      image.scaleToFit(PageSize.A4.getHeight(), PageSize.A4.getWidth()); 

      doc.newPage(); 
      doc.add(image); 
     } catch (DocumentException de) { 
      Log.e("PDFCreator", "DocumentException:" + de); 
     } catch (IOException e) { 
      Log.e("PDFCreator", "ioException:" + e); 
     } 
     finally { 
      doc.close(); 
     } 

     mPdfView.fromFile(file) 
       .pages(0, 1) // all pages are displayed by default 
       .enableSwipe(true) 
       .load(); 
     mPdfView.setVisibility(View.VISIBLE); 
} 

Это то, что я до сих пор:

enter image description here

Моя проблема: Содержимое Webview слишком велик, чтобы вписаться в PDF. Как я могу это решить?

ответ

4

WebView имеет встроенные функции для создания PDF-файлов, которые доступны с помощью PrintManager Service специально для печати. Но для вашего конкретного использования я предлагаю вам написать (сохранить) окончательный вывод PrintAdapter WebView, который является файлом PDF, в локальный файл и перейти оттуда.

Эта ссылка проведет вас через детали и реализацию. http://www.annalytics.co.uk/android/pdf/2017/04/06/Save-PDF-From-An-Android-WebView/

Вы можете достичь совместимости API уровня 19 (KitKat) с небольшими изменениями для вышеуказанного решения.

Это должно решить вашу проблему, но если у вас возникнут какие-либо проблемы с реализацией, дайте мне знать.

+0

Я пытаюсь использовать код, упомянутый в ссылке http://www.annalytics.co.uk/android/pdf/2017/04/06/Save-PDF-From-An-Android-WebView/ но когда я создаю класс PdfPrint, он дает ошибку, что PrintDocumentAdapter.WriteResultCallback не является t public и не могут быть доступны из внешнего пакета. –

+1

Мне нужно создать пакет android.print –

+0

Когда я создаю документ, его размер равен 0 байт –

1

создать PDF из WebView вам нужно Android> KitKat -> SDK> = 19

btnSave.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { 

       createWebPrintJob(webView); 
      } else { 



      } 

     } 
    }); 

//// Функция:

private void createWebPrintJob(WebView webView) { 

    PrintManager printManager = (PrintManager) this 
      .getSystemService(Context.PRINT_SERVICE); 

    PrintDocumentAdapter printAdapter = 
      webView.createPrintDocumentAdapter(); 

    String jobName = getString(R.string.app_name) + " Print Test"; 

    if (printManager != null) { 
     printManager.print(jobName, printAdapter, 
       new PrintAttributes.Builder().build()); 
    } 
} 

У меня есть проблема в создании образа из WebView :))))