Java 小程序在Windows上可以正常打印,但在Mac上不能
我们在.net中为收据构建了一个mvc。我们编写了一个小applet,它接收一个指向视图的url,并将在该url生成的收据打印到用户的默认打印机 有一个特定的收据不使用我们的mvc,因为它与销售无关,只是服务的小费单。此收据之间的主要区别在于,显示收据预览以及打印按钮的页面与小程序用于打印收据的页面相同。因此,小程序本质上获取预览的url,但在查询字符串中有一个额外的参数,告诉它除了提示条内容之外不要呈现任何内容 这一切都可以在任何浏览器的Windows上完美运行。然而,当我们切换到Mac电脑时,小费单只打印大约15%的时间,其余时间它只打印一小块空白。这就好像小程序没有从url获得任何内容,即使当我通过浏览器链接到确切的url时,我也会得到提示条内容 我想这可能是个时间问题。可能小程序没有等到提示条被呈现出来 这是小程序的打印方法代码:Java 小程序在Windows上可以正常打印,但在Mac上不能,java,macos,applet,jeditorpane,Java,Macos,Applet,Jeditorpane,我们在.net中为收据构建了一个mvc。我们编写了一个小applet,它接收一个指向视图的url,并将在该url生成的收据打印到用户的默认打印机 有一个特定的收据不使用我们的mvc,因为它与销售无关,只是服务的小费单。此收据之间的主要区别在于,显示收据预览以及打印按钮的页面与小程序用于打印收据的页面相同。因此,小程序本质上获取预览的url,但在查询字符串中有一个额外的参数,告诉它除了提示条内容之外不要呈现任何内容 这一切都可以在任何浏览器的Windows上完美运行。然而,当我们切换到Mac电脑时
public void printDocument(final String url, final boolean ccInfo,
final boolean printDialog)
{
AccessController.doPrivileged(new PrivilegedAction<Object>() {
@Override
public Object run()
{
try
{
new ParserDelegator();
JEditorPane jEditorPane = new JEditorPane();
jEditorPane.setEditorKit(new HTMLEditorKit() {
@Override
public ViewFactory getViewFactory()
{
return new HTMLFactory() {
@Override
public View create(Element elem)
{
View view = super.create(elem);
if (view instanceof ImageView)
{
((ImageView) view)
.setLoadsSynchronously(true);
}
return view;
}
};
}
});
jEditorPane.setPage(url);
JeditorRendererer docRenderer = new JeditorRendererer();
}
catch (IOException e)
{
System.out.println("IO Exception");
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
});
}
如您所见,为了使我们的条形码不显示为损坏的图像图标,我重写了创建ImageView的方法,以便它同步加载。其他html内容是否有类似的内容?收据将全部为html文本,底部为图像标记。是否尝试延迟打印,直到小程序使用处理完所有事件?您甚至可以尝试触发一个等待1秒的线程,然后通过java.awt.EventQueueinvokeLater触发打印 我不排除在Mac上打印错误的小程序。坦率地说,我从未见过人们通过小程序打印
如果你在MAC上花费太多时间调试Applet,我会考虑以下两个:
在HTML中布局收据,可能使用生成的PNG图像,并让用户手动打印;甚至还有一种方法可以使用JavaScript从HTML页面调用打印功能。 生成PDF文件并让他们下载-每个人都有打印PDF文件的方法。是的,我们已经有了一种在所有平台上打印收据的替代方法。对于我们的用户来说,这只是一个更简单的即时打印选项。除了Mac电脑上的这一点,它还能工作。我也已经在那里有一个时间延迟,这是因为我以前的图像加载问题。即使是7秒,小费单在mac电脑上也不起作用。我完全不知道为什么它不工作。当然你知道你可以从HTML页面启动打印功能,就像谷歌地图一样?听起来很容易…是的,我刚才就是这么说的。我们已经有了一种允许用户打印的方法。问题是我不希望打印对话框突然打开。我希望他们能够点击一个按钮,并立即打印到他们的默认打印机。这就是小程序的全部要点。除了Mac电脑上的小费单之外,它还能工作。