Hallo,
Per programmierung erstelle ich ein PDF Dokument. Dummerweise ist die Grundfarbe der ganzen Seite Schwarz. Seit stunden suche ich eine Möglichkeit die Farbe der ganzen Seite auf Weiss zu ändern.
Ich habe versuch die Hintergrundfrabe der ganzen View zu ändern, was aber nichts gebracht hat :-(.
Java
private void drawPage(PdfDocument.Page page, int pagenumber, StringBuilder datumSB, List<User> druckenVitalstoffe, List<User> lebensmittelAuswahlListe) {
Log.d(VitalstoffListe.class.getSimpleName(), "pdf dokument erstellen anfang");
try {
View view = ((Activity)context).getWindow().getDecorView().findViewById(android.R.id.content);
view.setBackgroundColor(Color.WHITE);
Alles anzeigen
Gibt es eine Möglichkeit direkt das PDF Dokument anzusprechen und so die Hintergrundfarbe zu ändern? Vielleicht hilft es, wenn ich den Code der ganzen Klasse einstelle.
Code
private StringBuilder datumSB;
private List<User> druckenVitalstoffe;
private List<User> lebensmittelAuswahlListe;
private int totalpages = 1;
private Context context;
private PrintedPdfDocument pdf;
private int pageHeight;
private int pageWidth;
FListeDrucken(Context context, StringBuilder datumSB, List<User> druckenVitalstoffe, List<User> lebensmittelAuswahlListe) {
this.context = context;
this.datumSB = datumSB;
this.druckenVitalstoffe = druckenVitalstoffe;
this.lebensmittelAuswahlListe = lebensmittelAuswahlListe;
}
@Override // muss implementiert werden
public void onLayout(PrintAttributes oldAttributes,
PrintAttributes newAttributes,
CancellationSignal cancellationSignal,
LayoutResultCallback callback,
Bundle extras) {
try {
Log.d(FListeDrucken.class.getSimpleName(), "layout anfang");
// sofern vorhanden, altes freigeben
disposePdf();
pageHeight = newAttributes.getMediaSize().getHeightMils() / 240 * 72;
pageWidth = newAttributes.getMediaSize().getWidthMils() / 240 * 72;
// neues PDF-Dokument mit den gewünschten Attributen erzeugen
pdf = new PrintedPdfDocument(context, newAttributes);
// auf Abbruchwunsch reagieren
Log.d(FListeDrucken.class.getSimpleName(), "layout vor cancel");
if (cancellationSignal.isCanceled()) {
callback.onLayoutCancelled();
disposePdf();
return;
}
if (totalpages > 0) {
// Informationen an das Print-Framework zurückliefern
PrintDocumentInfo info = new PrintDocumentInfo.Builder(context.getString(R.string.vitallstoffliste))
.setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).setPageCount(totalpages).build();
callback.onLayoutFinished(info, !newAttributes.equals(oldAttributes));
} else {
// einen Fehler melden
callback.onLayoutFailed("Fehler beim Berechnen der Seitenzahl");
}
Log.d(FListeDrucken.class.getSimpleName(), "layout ende");
} catch (Exception e) {
e.printStackTrace();
}
}
private boolean pageInRange(PageRange[] pageRanges, int page) {
try {
for (int i = 0; i < pageRanges.length; i++) {
if ((page >= pageRanges[i].getStart()) &&
(page <= pageRanges[i].getEnd()))
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Override // muss implementiert werden
public void onWrite(PageRange[] pageRanges,
ParcelFileDescriptor destination,
CancellationSignal cancellationSignal,
WriteResultCallback callback) {
try {
Log.d(FListeDrucken.class.getSimpleName(), "write anfang");
for (int i = 0; i < totalpages; i++) {
if (pageInRange(pageRanges, i)) {
PdfDocument.PageInfo newPage = new PdfDocument.PageInfo.Builder(pageWidth, pageHeight, 1).create();
PdfDocument.Page page = pdf.startPage(newPage);
if (cancellationSignal.isCanceled()) {
callback.onWriteCancelled();
pdf.close();
pdf = null;
return;
}
drawPage(page, i, datumSB, druckenVitalstoffe, lebensmittelAuswahlListe);
pdf.finishPage(page);
}
}
// PDF-Dokument schreiben
try {
pdf.writeTo(new FileOutputStream(
destination.getFileDescriptor()));
} catch (IOException e) {
callback.onWriteFailed(e.toString());
Log.d(FListeDrucken.class.getSimpleName(), "Write Fehler");
return;
}
callback.onWriteFinished(pageRanges);
Log.d(FListeDrucken.class.getSimpleName(), "layout ende");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onFinish() {
disposePdf();
}
private void disposePdf() {
try {
Log.d(FListeDrucken.class.getSimpleName(), "dispose anfang");
if (pdf != null) {
pdf.close();
pdf = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void drawPage(PdfDocument.Page page, int pagenumber, StringBuilder datumSB, List<User> druckenVitalstoffe, List<User> lebensmittelAuswahlListe) {
Log.d(VitalstoffListe.class.getSimpleName(), "pdf dokument erstellen anfang");
try {
View view = ((Activity)context).getWindow().getDecorView().findViewById(android.R.id.content);
view.setBackgroundColor(Color.WHITE);
Canvas canvas = page.getCanvas();
Paint paint = new Paint();
canvas.drawPaint(paint);
// Überschrift mit Datum
int x = 200;
String datum = "Tagesbedarf in % von " + datumSB.toString();
paint.setColor(Color.WHITE);
paint.setTextSize(50);
canvas.drawText(datum, 250, 200, paint);
Alles anzeigen