【发布时间】:2017-06-12 14:21:24
【问题描述】:
我正在编写一个程序,该程序需要打印有关交付的注释。目前使用 JavaFX 8 打印方法,我已经能够创建一个基本的交货单,但是显示 TableView 的默认样式包含很多灰度,这使得物理打印副本看起来很奇怪且难以阅读。
我使用 CSS 将 TableView 设置为纯黑色和白色,但是在打印时它似乎忽略了我设置的 CSS。
这是我目前拥有的:
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;
}
CSS 文件如下所示(在表单上显示而不是打印时有效):
.table-row-cell{
-fx-table-cell-border-color: #424242;
}
.column-header{
-fx-border-color: #424242;
-fx-background-color: #ffffff;
}
在表单上应用了样式的 TableView 如下所示:
关于如何为正在打印的节点设置样式有什么想法吗?
【问题讨论】:
-
我想知道这是否是优先事项。尝试将
!important添加到声明中,例如-fx-border-color: #424242 !important; -
实际上效果很好!谢谢!我已经坚持了很多年了,不知道为什么我什至没有想到这一点。您能否将其添加为答案,以便我将其标记为正确?干杯
-
没问题。是的,我添加了一个包含更多信息的正确答案。