Подскажите как сформировать отчетность в 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;
}
}
}
Пример отображения данных и таблицы базы даных