Ich schreibe ein Programm, das Notizen über die getätigten Lieferungen drucken soll. Momentan benutze ich die JavaFX 8-Druckmethoden, um einen einfachen Lieferschein zu erstellen. Der Standard-Stil für die Anzeige eines TableViews enthält jedoch viele Graustufen, die eine gedruckte Kopie merkwürdig und schwer lesbar erscheinen lassen.Einstellung von CSS zum Drucken von JavaFX
Ich habe CSS verwendet, um das TableView als solides Schwarz-Weiß zu gestalten, aber beim Drucken scheint es die CSS zu ignorieren, die ich eingestellt habe.
Hier ist, was ich habe zur Zeit:
private void printDeliveryNote(){
PrinterJob job = PrinterJob.createPrinterJob();
PageLayout pageLayout = Printer.getDefaultPrinter().createPageLayout(Paper.A4, PageOrientation.PORTRAIT, Printer.MarginType.HARDWARE_MINIMUM);
Group pane = new Group();
pane.getChildren().addAll(getNodeToPrint());
pane.getStylesheets().add("css/main.css");
if (job != null && job.showPrintDialog(new Stage())){
boolean success = job.printPage(pageLayout, pane);
if (success){
job.endJob();
}
}
}
private Node getNodeToPrint() {
Group group = new Group();
Label prntDeliveryId = new Label("Delivery Id: " + txtDeliveryId.getText());
prntDeliveryId.setLayoutX(txtDeliveryId.getLayoutX());
prntDeliveryId.setLayoutY(txtDeliveryId.getLayoutY());
Label prntDate = new Label("Date: " + txtDate.getText());
prntDate.setLayoutX(txtDate.getLayoutX() - 20);
prntDate.setLayoutY(txtDate.getLayoutY());
Label prntTitle = new Label(lblTitle.getText());
prntTitle.setLayoutX(lblTitle.getLayoutX());
prntTitle.setLayoutY(lblTitle.getLayoutY());
prntTitle.setFont(lblTitle.getFont());
ImageView imgBarcode = new ImageView(SwingFXUtils.toFXImage(handleBarcode(txtDeliveryId.getText()), null));
imgBarcode.setLayoutX(txtDeliveryId.getLayoutX());
imgBarcode.setLayoutY(txtDeliveryId.getLayoutY());
TableView<InstrumentContainer> prntInstrumentList = new TableView<InstrumentContainer>();
setupInstrumentList(prntInstrumentList);
prntInstrumentList.setLayoutY(lstInstruments.getLayoutY() + 40);
prntInstrumentList.setPrefWidth(lstInstruments.getPrefWidth());
System.out.println(prntInstrumentList.getHeight());
prntInstrumentList.setLayoutX(lstInstruments.getLayoutX());
group.getChildren().addAll(
prntDeliveryId,
prntDate,
prntInstrumentList,
prntTitle,
imgBarcode
);
return group;
}
Die CSS-Datei sieht wie folgt aus (die funktioniert, wenn auf einem Formular anzuzeigen, anstatt wenn sie gedruckt):
.table-row-cell{
-fx-table-cell-border-color: #424242;
}
.column-header{
-fx-border-color: #424242;
-fx-background-color: #ffffff;
}
Der Tableview mit dem Stil angewendet es sieht aus wie auf dem Formular:
Aber wenn es gedruckt wird, hat es immer noch den Standardstil:
Irgendwelche Ideen, wie man einen Knoten stylt, der gedruckt wird?
Ich frage mich, ob es eine Sache der Vorrang ist. Fügen Sie den Deklarationen z. B. "! Wichtig" hinzu. '-fx-border-color: # 424242! wichtig;' – Michael
Das hat wirklich perfekt funktioniert! Vielen Dank! Ich stecke seit Ewigkeiten darauf, keine Ahnung, warum ich nicht einmal daran gedacht habe. Könnten Sie das als Antwort hinzufügen, damit ich es als richtig markieren kann? Prost – Toymos
Kein Problem. Ja, ich habe eine richtige Antwort mit ein bisschen mehr Info hinzugefügt. – Michael