Hallo,
ich erstelle aus meinen Daten, die ich über die RecyclerView darstelle, parallel ein PDF-Dokument mit der Klasse "PDFdocument". Alles klappt wunderbar.
Leider überschreitet jetzt die Datenmenge eine PDF-Seite. Mein Wunsch ist klar. Wie kann ich die Seite erweitern ? Natürlich kann ich nachdem ich die erste Seite beendet habe vom Prinzip her eine zweite Seite bilden und die mit Daten füllen.
Mein Problem ist aber, daß ich den Seitenüberlauf erst in einer Schleife feststelle, in der ich die erste Seite gefüllt habe. Ich zeige Euch folgend meinen Code und lasse gewisse Anweisungen weg, die die variable Arbeit bei der Pixeldarstellung realisieren.
Es werden die Daten der RecyclerView in einer Schleife an den ViewAdapter übergeben. Parallel werden sie in das PDF-Dokument gespeichert. Der PDF-Aufbau wird über Canvas für jede Zeile realisert.
Innerhalb der Schleife stelle ich fest, dass eine PDF-Seite nicht ausreicht. Wie kann ich jetzt eine zweite Seite aktivieren ? Android Studio sagt mir, bevor ich eine neue Seite aufbaue, muss die erste beendet werden. Wie Ihr in der Befehlfolge sehen könnt, habe ich versucht je nach Zeilenanzahl in canvas oder canvas2 zu speichern. Aber canvas2 wird in der Schleife noch nicht erkannt. Wenn ich canvas2 vor der Schleife definiere muss ich vorher die erste "volle" Seite benden (finish).
Hat jemand einen Vorschlag , kann man das anders lösen ?
Die Idee, den zweiten Teil ( ab 35 Zeilen) irgendwie zwischen zu speichern, gefällt mir erst mal nicht, würde aber wahrscheinlich gehen !
Im Anhang ist die erste PDF Seite.
PdfDocument document = new PdfDocument();
PdfDocument.PageInfo mypageInfo = new PdfDocument.PageInfo.Builder(1080,2340,1).create();
PdfDocument.Page mypage = document.startPage(mypageInfo);
Paint title = new Paint(); // die Überschrift
......
Canvas canvas = mypage.getCanvas();
...
ueberschrift = lz.repeat(15) + "area" + lz.repeat(40) + "task" + lz.repeat(30) + "note"+ lz.repeat(45) + " date";
...
canvas.drawText("Tasks for " + marktName+ " / " + sdf.format(Calendar.getInstance().getTime()) , 300, 100, title);
canvas.drawText(ueberschrift,50,150,headline);
...
c = CursorErstellen(); // Datenbankabfrage
// -------------------------------------- Daten aus DB holen für View und PDF -------------------------------------------
while (c.moveToNext()) {
mTaskView.add(new DataModell_TasksView(c.getInt(0), c.getString(1), c.getString(2), c.getString(3), c.getString(4), c.getString(5) )) ;
...
// für die PDF-Zeilen
if (secondPDF) { // die zeilenzahl ist >= 35
canvas2.drawText("" + n, 50, 170 + k * a, zeile1); // canvas2 steht hier nicht zur Verfügung, was klar ist
// Datum
canvas2.drawText(c.getString(7), 920, 170 + k * a, task);
} else {
canvas.drawText("" + n, 50, 170 + k * a, zeile1);
// Datum
canvas.drawText(c.getString(7), 920, 170 + k * a, task);
}
...
if (k>=35 && secondPDF == false) { // die Seite ist voll 2. Seite aktivieren
document.finishPage(mypage);
// neues PDF eröffnen
s++; //Dokumentenzähler
secondPDF=true;
document.finishPage(mypage); // die erste Seite wird beendet
// die zweite Seite anlegen
PdfDocument.PageInfo mypageInfo2 = new PdfDocument.PageInfo.Builder(1080,2340,2).create();
PdfDocument.Page mypage2 = document.startPage(mypageInfo2);
Canvas canvas2 = mypage2.getCanvas();
k=1; // den Zeilenzähler auf Anfang stellen
}
}
// Ergebnis anzeigen mit Wechsel zum ViewAdapter
dataCountView= mTaskView.size();
listaufgaben_view.setHasFixedSize(true);
RV_Adapter = new ViewAdapter(getContext(),mTaskView,myCL);
RV_Adapter.notifyDataSetChanged();
listaufgaben_view.setLayoutManager(new LinearLayoutManager(getContext()));
emptyView = (TextView) view.findViewById(R.id.empty_view);
if (mTaskView.isEmpty()) {
emptyView.setText("The list is empty !");
listaufgaben_view.setVisibility(View.GONE);
emptyView.setVisibility(View.VISIBLE);
}
else {
if (row_index <0) { row_index=0;}
listaufgaben_view.setVisibility(View.VISIBLE);
emptyView.setVisibility(View.GONE);
listaufgaben_view.scrollToPosition(row_index);
}
listaufgaben_view.setAdapter(RV_Adapter);
//---------------------------------------------------- Ende Liste aufbauen
Alles anzeigen