【问题标题】:ICEPDF Printing ProblemICEPDF打印问题
【发布时间】:2011-07-05 02:55:17
【问题描述】:

我正在使用 ICEPDF 在我的 Java 应用程序中显示和打印 PDF 文档。

我得到以下异常:

org.icepdf.core.pobjects.Catalog <clinit>
INFO: ICEsoft ICEpdf Core 4.1.4 
Exception in thread "Thread-4" java.lang.ArrayIndexOutOfBoundsException: 0
    at org.icepdf.ri.common.PrintHelper.getSetupDialog(PrintHelper.java:526)
    at org.icepdf.ri.common.PrintHelper.setupPrintService(PrintHelper.java:199)
    at org.icepdf.ri.common.SwingController.initialisePrinting(SwingController.java:2590)
    at org.icepdf.ri.common.SwingController.access$400(SwingController.java:102)
    at org.icepdf.ri.common.SwingController$3.run(SwingController.java:2548)
    at java.lang.Thread.run(Thread.java:680)

我使用的代码是:

public class ViewerComponentExample {
    public static void main(String[] args) {
        // Get a file from the command line to open
        String filePath = "boll.pdf";

        // build a component controller
        SwingController controller = new SwingController();

        SwingViewBuilder factory = new SwingViewBuilder(controller);

        JPanel viewerComponentPanel = factory.buildViewerPanel();

        // add interactive mouse link annotation support via callback
        controller.getDocumentViewController().setAnnotationCallback(
                new org.icepdf.ri.common.MyAnnotationCallback(
                        controller.getDocumentViewController()));

        JFrame applicationFrame = new JFrame();
        applicationFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        applicationFrame.getContentPane().add(viewerComponentPanel);

        // Now that the GUI is all in place, we can try openning a PDF
        controller.openDocument(filePath);

        // show the component
        applicationFrame.pack();
        applicationFrame.setVisible(true);
    }
}

以上显示查看器很好,它允许除打印之外的所有操作! (见上面的例外)。

非常感谢任何帮助。

谢谢

【问题讨论】:

  • 你试过icepdf帮助论坛吗?他们通常很擅长回答问题。
  • 我整理好了。问题是我的打印机没有设置为默认打印机!没有“无默认打印机”的处理,如果它不存在(即使你有打印机)icepdf 会抛出异常。无论如何感谢您的帮助:)

标签: java pdf printing icepdf


【解决方案1】:

不幸的是,当您的操作系统上没有可用的打印机时,会出现此异常。 下面是icepdf源码:

return ServiceUI.printDialog(graphicsConfiguration,
    point.x,
    point.y,
    services, services[0],
    DocFlavor.SERVICE_FORMATTED.PRINTABLE,
    printRequestAttributeSet);

“服务”是这样定义的:

private PrintService[] lookForPrintServices() {
    PrintService[] services = PrintServiceLookup.lookupPrintServices(
        DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);
    PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
    if (defaultService != null && services.length &gt; 1) {
        PrintService printService;
        for (int i = 1, max = services.length; i &lt; max; i++) {
            printService = services[i];
            if (printService.equals(defaultService)) {
                PrintService tmp = services[0];
                services[0] = defaultService;
                services[i] = tmp;
                break;
            }
        }
    }
    return services;
}

如果没有匹配的服务,“服务”数组的长度为零: http://docs.oracle.com/javase/6/docs/api/javax/print/PrintServiceLookup.html#lookupPrintServices(javax.print.DocFlavor, javax.print.attribute.AttributeSet)

也许一个解决方案是创建一个“/dev/null”打印机。我不知道这是否容易做到......

【讨论】:

    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多