Подскажите как сформировать отчетность в pdf файл?

Мне нужно в приложении формировать отчетность в pdf файл, подскажите как это делать, в pdf файле должен находиться текст, табличка и график построенный на Activity с помощью MPAndroidChart

package com.example.mobileapp.viewmodel;

import android.os.Bundle;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.example.mobileapp.R;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.jjoe64.graphview.series.BarGraphSeries;
import com.jjoe64.graphview.series.DataPoint;

import java.util.ArrayList;

public class GraphActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_graph2);
        Bundle arguments = getIntent().getExtras();
        String date = arguments.getString("Date").toString();//получение даты ошибки
        ArrayList<String> labels=getIntent().getStringArrayListExtra("Значения label");//получение лейблов
        ArrayList<Integer> dataErrors=getIntent().getIntegerArrayListExtra("Значения duration");//получ знач durat
        String nameErB=getIntent().getStringExtra("Имя ошибки");//получение имени ошибки
        TextView textView = (TextView) findViewById(R.id.textView);
        //GraphView graph=(GraphView) findViewById(R.id.graph);
        textView.append(nameErB);
        BarChart barChart;
        barChart=(BarChart) findViewById(R.id.bargraph);
        ArrayList<BarEntry> barEntries=new ArrayList<>();
        for(int i=0;i<dataErrors.size();i++){
            barEntries.add(new BarEntry(dataErrors.get(i),i));
        }
        BarDataSet barDataSet=new BarDataSet(barEntries,"Измеряемое значение");
        ArrayList<String> theDates=new ArrayList<>();
        for(int i=0;i<labels.size();i++){
            theDates.add(labels.get(i));
        }
        BarData theData=new BarData(theDates,barDataSet);
        barChart.setData(theData);
        barChart.setTouchEnabled(true);
        barChart.setDragEnabled(true);
        barChart.setScaleEnabled(true);
        BarGraphSeries<DataPoint> series=new BarGraphSeries<DataPoint>();

    }
}

Отображение графиков


package com.example.mobileapp.viewmodel;

import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.example.mobileapp.DatebaseHelper;
import com.example.mobileapp.R;

import java.util.ArrayList;

public class BackBrakePressureEmergencyActivity extends AppCompatActivity implements View.OnClickListener {

    Button btnGraph;
    String date;
    ArrayList<String> labels;
    ArrayList<Integer> dataErrors;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_back_brake_pressure_emergency);
        btnGraph = (Button) findViewById(R.id.forGraph);
        btnGraph.setOnClickListener(this);
        Bundle arguments = getIntent().getExtras();
        date = arguments.getString("ky").toString();
        int i = 0;
        SQLiteDatabase db = getBaseContext().openOrCreateDatabase("Mydb.db", MODE_PRIVATE, null);
        Cursor query = db.rawQuery("SELECT * FROM " + DatebaseHelper.TABLEbackbrakepressureemergency + " WHERE instr(STARTDATE,'" + date + "');", null);
        labels = new ArrayList<>();
        dataErrors = new ArrayList<>();
        TextView textView = (TextView) findViewById(R.id.textView);
        if (query.moveToFirst()) {
            do {
                int turnover = query.getInt(1);
                String startDate = query.getString(2);
                labels.add(i,startDate);
                String endDate = query.getString(3);
                int duration = query.getInt(4);
                dataErrors.add(i,duration);
                textView.append("Обороты:" + turnover + " Начало события: " + startDate + " Конец события: " + endDate + " Длительность: " + duration +"\n");
                i++;
            }
            while (query.moveToNext());
        }
            query.close();
            db.close();
            if (i == 0) {
            textView.append("За выбранную дату, ошибок не обнаружено");
            } else {
             }
        }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.forGraph:
                Intent intentGraph = new Intent(this, GraphActivity.class);
                intentGraph.putExtra("Date", date);//передача даты
                intentGraph.putStringArrayListExtra("Значения label", labels);
                intentGraph.putIntegerArrayListExtra("Значения duration", dataErrors);
                intentGraph.putExtra("Имя ошибки", "Аварийное давление в заднем тормозном контуре");
                startActivity(intentGraph);
                break;
        }
    }
}

Пример отображения данных и таблицы базы даных


Ответы (0 шт):