Applet在Windows上打印很好,但在Mac上打印不行

时间:2011-04-20 19:28:19

标签: java macos applet jeditorpane

我们在.net中为收据建立了一个mvc。我们编写了一个小applet,它在我们的视图中输入了一个url,并将在该url处生成的收据打印到用户默认打印机。

有一个特定收据不使用我们的mvc,因为它与销售无关,仅仅是服务的小费。此收据之间的主要区别在于显示其预览的页面(以及用于打印它的按钮)与applet用于打印它的页面相同。因此,applet实际上是获取预览的url,但在查询字符串中有一个额外的参数,告诉它除了提示滑动内容之外不再渲染任何内容。

这在所有浏览器上都可以在Windows上完美运行。然而,当我们切换到Mac时,尖端滑动仅打印约15%的时间,其余时间它只打印一小部分空白。这就好像applet没有从url获取内容,即使我通过浏览器链接到那个确切的url我得到了提示内容。

我认为这可能是一个时间问题。也许小程序不会等到呈现提示单。

这是applet的打印方法代码:

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 个答案:

答案 0 :(得分:0)

在使用java.awt.EventQueue#invokeLater小程序处理所有事件之前,您是否尝试延迟打印?您甚至可以尝试触发等待1秒的线程,然后通过java.awt.EventQueue#invokeLater触发打印。

我不排除Mac上有缺陷的小程序打印。坦率地说,我从未见过人们通过小程序打印。

如果您发现在Mac上花费太多时间调试applet,我会考虑其中一个:

  1. 以HTML格式布局收据,可能使用生成的PNG图像并让用户手动打印;甚至可以使用JavaScript从HTML页面调用打印功能。
  2. 生成PDF文件并让它们下载 - 每个人都有办法打印PDF文件。