Проблема добавления нескольких изображений в PDF с использованием PdfDocument - PullRequest
0 голосов
/ 29 марта 2020

Я пытался создать PDF с несколькими изображениями на одной странице, но он генерирует только одно изображение на страницу. Я беру растровое изображение из вида (GraphView) и помещаю его в PDF через Canvas с drawBitmap. Есть ли другой способ сделать это?

Странно то, что он позволяет мне добавлять только одно изображение на страницу, как если бы на холсте страницы было ограничение. graph имеет график в реальном времени.

activiy. xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<com.jjoe64.graphview.GraphView
    android:id="@+id/graph"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:layout_gravity="center"
    android:gravity="center" />

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:onClick="PDF"
    android:text="@string/txt_btn"/>
</android.support.constraint.ConstraintLayout>

код. java

Graphview graph;
//inside of onCreate:
graph = findViewById(R.id.graph);
public void PDF(View view) throws IOException {
        PdfDocument document = new PdfDocument();
        PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, 1).create();//A4 format
        PdfDocument.Page page = document.startPage(pageInfo);//page 1
        Canvas canvas = page.getCanvas();

        Bitmap picture = Bitmap.createBitmap(graph.getWidth(), graph.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas Img = new Canvas(picture);
        graph.draw(Img);

        Paint black = new Paint();
        black.setColor(Color.BLACK);

        canvas.drawText("Hello world", 36, 36, black);
        //Creating a Rect to resize the bitmap
        Rect dstRect = new Rect(36, 38, graph.getWidth()/3, graph.getWidth()/3);
        canvas.drawBitmap(picture, null, dstRect, new Paint());

        canvas.drawText("The image below is not visible", 36, 40+getHeight()/3, black);    

        Bitmap picture2 = Bitmap.createBitmap(graph.getWidth(), graph.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas Img2 = new Canvas(picture2);
        graph.draw(Img2);

        Rect dstRect2 = new Rect(36, 38+graph.getHeight()/3, graph.getWidth()/3, graph.getWidth()/3);
        canvas.drawBitmap(picture, null, dstRect2, new Paint());    

        canvas.drawText("The image above is not visible", 36, 42+getHeight()/3, black);

        document.finishPage(page);

        File filepath = Environment.getExternalStorageDirectory();
        File dir = new File(filepath.getAbsolutePath() + "/PDF/");
        if (!dir.exists()) dir.mkdir();
        File file = new File(dir, "PDF.pdf");

        try {
            outputStream = new FileOutputStream(file);
            document.writeTo(outputStream);
            document.close();
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();

        }
}
...