gpt4 book ai didi

JavaFX (OpenJFX) 不让我打印

转载 作者:行者123 更新时间:2023-12-05 01:31:36 25 4
gpt4 key购买 nike

我的 JavaFX 程序准备并打印出一组 VBox。

这是 ModPrintCycle。这是提供打印选项的窗口

public PrintCycle data;
//PrintCycle is a HashMap of VBoxes containing all the details
PrinterJob pj;
ChoiceBox<String> cbxPrinters = new ChoiceBox<String>();
ArrayList<Printer> arrPrinters = new ArrayList<Printer>();

//util.say just pops out a messagebox attached to ModPrintCycle.

public void printAll(ArrayList<String> pageList){
if(cbxPrinters.getSelectionModel().getSelectedIndex() >=0){
if (data.tables.size() > 0){
Printer curP = Printer.getDefaultPrinter();
if(arrPrinters.size() > 0 ){
curP = arrPrinters.get(cbxPrinters.getSelectionModel().getSelectedIndex());
}
try{
pj = PrinterJob.createPrinterJob(curP);
PageLayout pp = curP.createPageLayout(Paper.LEGAL, PageOrientation.PORTRAIT, MarginType.DEFAULT);
PageLayout pl = curP.createPageLayout(Paper.LEGAL, PageOrientation.LANDSCAPE, MarginType.DEFAULT);

for(String p : pageList){
Printable pt = data.tables.get(p);
pt.scaleToFit();
if(pt.isLandscape()){
pj.printPage(pl,pt);
}
else{
pj.printPage(pp,pt);
}
}

pj.endJob();
}catch(Exception e){
util.say(ModPrintCycle.this, "Error on Print");
}
}else{
util.say(ModPrintCycle.this, "Nothing to print");
}
}
else{
util.say(ModPrintCycle.this, "No Printer Selected");
}
}

打印机已安装并设置为默认打印机,我的程序检测到它。但是当我打印时,没有错误弹出,打印机也没有收到任何作业。

我确定我的程序之前运行良好(Lubuntu 15.10,32 位)。但是现在,我将它转移到另一台计算机上。 Lubuntu 15.10,64 位。我安装了 openjfx 和 openjdk 版本“1.8.0_66-internal”。

我该怎么做才能找出它不打印的原因?


尝试制作较小的打印作业,但效果相同。

Button testPrint = new Button("Test Print");

testPrint.setOnAction(new EventHandler<ActionEvent>(){

@Override
public void handle(ActionEvent arg0) {
try{
Printer p = Printer.getDefaultPrinter();
PrinterJob pj = PrinterJob.createPrinterJob(p);
//util.say(ModShortcuts.this, "Print: " + pj.getJobStatus());
Boolean k = pj.printPage(p.createPageLayout(Paper.LEGAL,PageOrientation.PORTRAIT,MarginType.DEFAULT), new Text("Hey"));
//util.password(); //reused for a showAndWait() dialog
//util.say(ModShortcuts.this, "Print: " + pj.getJobStatus());
//util.say(ModShortcuts.this, "attempted Print using: " + pj.getPrinter().getName());


if(k){
//util.say(ModShortcuts.this, "Print: " + pj.getJobStatus());
pj.endJob();
//util.say(ModShortcuts.this, "Print: " + pj.getJobStatus());
}

}catch(Exception e){
e.printStackTrace();
}

}

});

vbox.getChildren().add(testPrint);

取消注释,输出为

Print: Not Printing
Print: Printing
attempted Print using: AstinePrinter
Print: Printing
Print: Done

AstinePrinter 是我的打印机的名称。


编辑:使用

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

我安装了Oracle Java 8,还是一样的问题。

编辑:还有 Oracle Java 7。

编辑:

尝试禁用防火墙,以防是端口问题

sudo ufw disable

仍然没有。

最佳答案

我发现了一个叫做 CUPS4J 的东西,它让我可以绕过 Java 在 64 位 Ubuntu 中尝试访问 CUPS 时遇到的问题。它使用字节数组打印出来,幸运的是,JavaFX 有一种方法可以对所选节点进行快照。

有点模糊,但已经足够好了。 注意:我不是专家,我不知道为什么需要这样做。但这样做让我可以毫无错误地使用 CUPS4J,所以它一定是正确的。

  • 所以,首先,下载 [ECLIPSE PROJECT]对于 cups4j,因为存在必须修复的依赖项。将其导入您的项目。

编辑:之所以需要以下内容,是因为不知何故,我的包没有随附 org.slf4j。如果您的类路径表明您拥有它,请跳过这些步骤。

  • 接下来,对于那里的每个类,Logger 的所有实例(cAsEsEnSiTiVe) 应替换为 Log,并修复您的导入 (Ctrl+Shift+O)。这将建议 Log 的版本,并且 LogFactory 将被自动检测。我的导入路径是 org.apache.commons.logging.*

  • 最后,在库下的构建路径中删除 org.slf4j 的库依赖项。

(我确定使用 Runnable Jar 没问题,但我就是这样做的,因为使用 Runnable Jar 会出错)

这是我对打印功能所做的简化。

private void print(Region node){
//Make the image with the proper sizes
WritableImage wi = new WritableImage(
(int) Math.round(Math.ceil(node.getWidth())),
(int) Math.round(Math.ceil(node.getHeight())));
//shoot the image
wi = node.snapshot(new SnapshotParameters(), wi);

//write the image into a readable context
ByteArrayOutputStream out = new ByteArrayOutputStream();
try{
ImageIO.write(SwingFXUtils.fromFXImage(wi, null), "png", out);
}catch(Exception e){
System.out.println("Error with SnapShot function");
}

//Get your printer
CupsClient cc = new CupsClient();
CupsPrinter cp = cc.getDefaultPrinter();

//print the readable context
cp.print(new PrintJob.Builder(out.toByteArray()).build());

//unlike PrinterJob, you do not need to end it.
}

我不确定,但我在 CUPS4J 论坛上看到错误报告说多个页面存在问题,但我还没有遇到过。

如果有人有更好的答案,欢迎补充。但到目前为止,这对我有用。

关于JavaFX (OpenJFX) 不让我打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36393305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com