如果我在打印机设置里自定义了一种纸张格式,请问如何通过java poi类来控制打印Excel时,自动选择我新定义的纸张格式.急救!

解决方案 »

  1.   

    POI无解,JCOM的话好象可以,直接调COM的接口
      

  2.   

    HSSFWorkbook肯定是没有的,你自己用Excel试一下就知道了,文件>页面设置>打印纸张只对当前sheet有效。HSSFPrintSetupHSSFPrintSetup ps = sheet.getPrintSetup();
    //以下对应的是页面设置里面的一些内容,比如
    ps.setHeaderMargin((double) 0.44); // 页边距
    ps.setFooterMargin((double) 0.2);
        ps.setLandscape(false); // 打印方向
        ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);  
        ps.setFitWidth((short)1); // 缩放
        ps.setFitHeight((short)1000);
      

  3.   

    HSSFPrintSetup 只能定义一般的纸张,不能使用自定义类型的.
     to:hellwindy(夜神·月) 有没有JCOM相关的简称,或者例子了.谢谢!
      

  4.   

    自认为任何API都无解(包括MS的API),除非你的代码运行在固定客户端,否则每台打印机上面都可以自定义N个不同的paper的,或者一个自定义的也没有。如果是针对特定环境,你可以这样,现用Excel建立一个.xls,并设置paper,然后通过POI的pageSetup读出来,看看是多少。以后程序就用这个了。反正我认为,怎么个实现都是治标不治本的方式,主要是Excel存储格式当初定义的太差,耦合度太高。最恶心的例子,就是列宽。保存在.xls里面的数字的含义是“以整个workbook里面第一种字体显示'0'的时候的宽度的1/256,作为一个单位时候的大小”
      

  5.   

    JCOM做过打印但没设置纸张    public boolean print(int from, int to, int copys, boolean isPreview)
                throws ReportPrintException {
            boolean success = false;
            if (filename != null) {
                ReleaseManager rm = new ReleaseManager();
                try {
                    ExcelApplication excel = new ExcelApplication(rm);                ExcelWorkbooks xlBooks = excel.Workbooks();
                    ExcelWorkbook xlBook = xlBooks.Open(filename);
                    ExcelWorksheet xlSheet = excel.ActiveSheet();
                    excel.Visible(true);
                    xlSheet.PrintOut(from, to, copys, isPreview);
                    xlBook.Close(false, null, false);
                    excel.Quit();                success = true;
                } catch (Exception e) {
                    e.printStackTrace();
                    throw new ReportPrintException(e.getMessage());
                } finally {
                    rm.release();
                }
            }
            return success;
        }
        public void printPreview() throws ReportPrintException {
            if (filename != null) {
                ReleaseManager rm = new ReleaseManager();
                try {
                    ExcelApplication excel = new ExcelApplication(rm);                ExcelWorkbooks xlBooks = excel.Workbooks();
                    ExcelWorkbook xlBook = xlBooks.Open(filename);
                    ExcelWorksheet xlSheet = excel.ActiveSheet();
                    excel.Visible(true);
                    xlSheet.method("PrintPreview", null);
                    xlBook.Close(false, null, false);
                    excel.Quit();
                } catch (Exception e) {
                    e.printStackTrace();
                    throw new ReportPrintException(e.getMessage());
                } finally {
                    rm.release();
                }
            }
        }其中,xlSheet.method("PrintPreview", null);就是直接调用COM的打印预览方法,这个要知道COM里定义的方法名字叫什么,就跟JNI一样,最好询问一下COM编程的人设置页面的方法和参数格式。