找回密码
 立即注册

QQ登录

只需一步,快速开始

海川

注册会员

6

主题

18

帖子

54

积分

注册会员

积分
54
海川
注册会员   /  发表于:2021-9-13 11:24  /   查看:2101  /  回复:4
excel表格设置好打印页边距后,导入spreadjs 打印,发现 页边距尺寸不对,打印页面有放缩。
测试excel 表,spread打印边距偏差 切图,导出PDF 见附件。
spread 打印API 设置代码如下:
//设置页面打印参数
function setPrintinfo(ocxtable) {

    /*
    *
(1)
数据报告采用同际标准A4型纸(即长×宽为297mm x210mm )。
(2)
横表页边距宜设置为:上2 .0cm-79、下1.5 cm-59、左1. 5 cm、右1. 5cm。
(3)
纵表页边距宜设置为:上1. 5cm、下1. 5 cm、左2.5 cm-98、右1.5 cm o
(4)
页眉、页脚宜分别设置为:0.5cm o-20
(5)
表格外边框宜用1. 5磅粗实线,基本信息区与检验数据区之间分隔线宜用1. 5磅粗实线。
(6 )除标题区中表格名称用16号宋体字加粗外,数据报告中固化内容宜用10号宋体字,填充内容'宜用10号仿宋字。
    * */

    //ocxtable.options.backColor = 'white';

    //获取总数
    var sheetCount = ocxtable.getSheetCount();
    //alert(p_spread.getActiveSheetIndex());

    ocxtable.options.backColor = 'white';




    for (var i = 0; i < sheetCount; i++) {

        //获取每个页面
        var activeSheet = ocxtable.sheets[i];

        //activeSheet.getRange(-1,1,-1,20).backColor("red");

        //activeSheet.getCell(-1,1).backColor(undefined);
        //activeSheet.getCell(1,-1).backColor(undefined);

        var printInfo = activeSheet.printInfo();

      

        printInfo.bestFitColumns(false);//:打印时是否每一列都自适应宽度。

        printInfo.bestFitRows(false);//:打印时是否每一行都自适应高度。

        //printInfo.blackAndWhite(true);//:彩色打印还是黑白打印(true为黑白打印,false为彩色打印)


        //设置A4纸

        printInfo.paperSize(new GC.Spread.Sheets.Print.PaperSize(GC.Spread.Sheets.Print.PaperKind.a4));

        //printInfo.paperSize(new GC.Spread.Sheets.Print.PaperSize(927, 1269)); //宽210mm-827,高297mm-1169


        //printInfo.margin({top:20, bottom:20, left:45, right:20, header:20, footer:20});
        //printInfo.margin({top: 30, bottom: 30, left: 70, right: 30, header: 20, footer: 20});

        printInfo.margin({top: 10, bottom: 0, left: 98, right: 0, header: 20, footer: 20});//纵向打印设置

        //printInfo.margin({top: 79, bottom: 0, left: 59, right: 0, header: 20, footer: 20});//横向打印设置

        //printInfo.centering(GC.Spread.Sheets.Print.PrintCentering.both);//打印水平垂直居中

        //printInfo.margin({top: 59, bottom: 59, left: 98, right: 59});

        //printInfo.orientation(GC.Spread.Sheets.Print.PrintPageOrientation.landscape); //横向打印
        //printInfo.orientation(GC.Spread.Sheets.Print.PrintPageOrientation.portrait);//打印的页面方向。portrait纵 landscape 横向

        //printInfo.zoomFactor(1); //放缩比例

        printInfo.showColumnHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);//获取或设置是否打印列标题。
        printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);//隐藏行头


        printInfo.centering(GC.Spread.Sheets.Print.PrintCentering.horizontal);//打印页面水平居中  both:水平垂直均居中,horizontal:水平居中,vertical:垂直居中,none:不居中。

        printInfo.centering(GC.Spread.Sheets.Print.PrintCentering.vertical);//打印页面垂直居中  both:水平垂直均居中,horizontal:水平居中,vertical:垂直居中,none:不居中。


        //是否打印控件的外边框
        printInfo.showBorder(false);

        //printInfo.bestFitColumns(true);//打印时是否每一列都自适应宽度。

        //printInfo.bestFitRows(true);//打印时是否每一行都自适应高度。

        //printInfo.qualityFactor(8); // 打印质量,value为1~8的一个数值,越高则打印效果越好。

        //printInfo.footerCenter("&P/&N");

        //是否打印网格线(默认打印)
        //printInfo.showGridLine(false);

    }


}



打印边距.pdf

218.91 KB, 下载次数: 51

testprint.rar

38.85 KB, 下载次数: 45

4 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-13 16:05:20
推荐
你好,spreadjs调用浏览器的打印功能进行打印,没有办法做到和office excel完全一致。
由于不同的浏览器本身打印时,就会有不同的默认边距,这里只能你这边的需求具体分析

目前您主要是需要将sheet中的内容自使用缩放以放在一页中显示,这个可以通过下面代码设置
  1. printinfo.fitPagesTall(1);
  2. printinfo.fitPagesWide(1);
复制代码


同时要居中的话:
  1. printinfo.centering(GC.Spread.Sheets.Print.PrintCentering.both)
复制代码


边距需要自己通过代码重新设置(单位为百分之一英寸),无法获取excel中已经设置的边距
  1. pi.margin({top:0, bottom:0, left:0, right:0, header:0, footer:0});
复制代码


边距这里需要注意的是,如上所说浏览器本身会有默认的边距,比如chrome浏览器,在任一网页中按ctrl+p,可以看到打印对话框,可以自定义边距,然后将边距都设置为0后退出打印,这样再去给spread设置打印边距后,打印出的就是上面的margin代码设置的实际边距了

image.png277319335.png
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-13 12:23:18
沙发
收到,我会先用你的demo确认一下具体问题,然后看看有没有解决方案
回复 使用道具 举报
海川
注册会员   /  发表于:2021-9-13 16:15:29
地板
好的,谢谢!我按你方法测试一下。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-13 16:37:38
5#
不客气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部