Как конвертировать Android View в PDF

Я создал приложение Android Invoice. Сгенерированный счет-фактура - это стандартная макета Android с вложенными представлениями. Я ищу библиотеку, которую я могу использовать для преобразования этого представления в pdf-документ.

Я удивлен, что в моем поиске нет прямого варианта, или, возможно, я сделал последнее, что нужно. Или, возможно, то, что я ищу, невозможно.

Кто-нибудь, пожалуйста, помогите мне указать инструмент, который поможет мне конвертировать или генерировать PDF файл с Android-представления. Я открыт для бесплатного и скромного платного варианта. Или дайте мне знать, если то, что я ищу, невозможно.

Ответ 1

Возьмите экран на своем устройстве:

Bitmap screen;
View v1 = MyView.getRootView();
v1.setDrawingCacheEnabled(true);
screen= Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);

Если у вас есть ScrollView как корневой вид, то:

LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
RelativeLayout root = (RelativeLayout) inflater.inflate(R.layout.activity_main, null); //RelativeLayout is root view of my UI(xml) file.
root.setDrawingCacheEnabled(true);
Bitmap screen= getBitmapFromView(this.getWindow().findViewById(R.id.relativelayout)); // here give id of our root layout (here its my RelativeLayout id)

Вот метод getBitmapFromView():

public static Bitmap getBitmapFromView(View view) {
    //Define a bitmap with the same size as the view
    Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
    //Bind a canvas to it
    Canvas canvas = new Canvas(returnedBitmap);
    //Get the view background
    Drawable bgDrawable =view.getBackground();
    if (bgDrawable!=null) 
        //has background drawable, then draw it on the canvas
        bgDrawable.draw(canvas);
    else 
        //does not have background drawable, then draw white background on the canvas
        canvas.drawColor(Color.WHITE);
    // draw the view on the canvas
    view.draw(canvas);
    //return the bitmap
    return returnedBitmap;
}

Он отобразит весь экран, включая контент, скрытый в вашем ScrollView. Теперь, когда у нас есть растровый экран, сохраните его в формате pdf (вам нужно скачать itextpdf-5.3.2.jar файл и добавить в свой проект..)

private static String FILE = "mnt/sdcard/invoice.pdf"; // add permission in your manifest...

try 
{
    Document document = new Document();

    PdfWriter.getInstance(document, new FileOutputStream(FILE));
    document.open();
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    screen.compress(Bitmap.CompressFormat.PNG, 100, stream);
    byte[] byteArray = stream.toByteArray();
    addImage(document,byteArray);
    document.close();
}

catch (Exception e) 
{
    e.printStackTrace();
}

private static void addImage(Document document,byte[] byteArray) 
{
    try 
    {
        image = Image.getInstance(byteArray);  
    } 
    catch (BadElementException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (MalformedURLException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (IOException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     // image.scaleAbsolute(150f, 150f);
      try 
      {
        document.add(image);
    } catch (DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Не тестировали ничего. Вот все источники, которые я использовал: source1, source2, source3.

Ответ 2

Вы можете использовать пользовательскую библиотеку, такую как https://github.com/HendrixString/Android-PdfMyXml. Я предпочитаю эту библиотеку, чем любой другой метод. Просто пройди через них.

но есть и другой способ - Как конвертировать Android View в PDF - сгенерировать PDF файл, содержащий растровое изображение вашего макета