打印常见问题

  • Last update:  2022-09-23
  • 1. 概述

    本文介绍 打印 时遇到的问题、解决方案以及常见的排查思路。

    2. 常见问题排查思路

    常见打印问题以及排查思路如下图所示:

    2.1 打印失败的排查思路

    打印失败的排查步骤如下:

    1)确认打印软件启动是否成功:首先观察电脑本地程序打印是否已经启动,如果无说明没有启动成功

    2)确认具体的现象

    • 偶发出现还是必定出现,如果是首次启动失败,需要点击多次才能正常打印,一般是启动超时问题。

    • 若是必定复现,首先保证检查打印软件是否存在多个版本互相冲突,并且保证打印软件不要安装在设计器目录下

    3)检查端口占用情况:本地打印软件默认接口的 9092,若被占用,可释放相应的接口或者修改本地打印软件的端口号,另外本地打印软件的配置文件也要修改成一样的端口,修改完保存重启。

    4)检查配置:若是https环境想要调用本地软件,首先得配置好本地打印的https,可参考文档 本地打印https配置说明,其次检查配置文件的httpsMode 选项,设为 true,则为 https 模式;设为 false,则为 http 模式。

    5)检查是否为浏览器限制问题或杀毒软件的问题。

    6)检查插件和 JAR 包是否匹配。

    7)查看 bin 目录下的 debug.log 日志查看报错,进行具体分析。

    2.2 打印慢的排查思路

    1)排查模板问题:需要确定是个别模板打印慢还是所有模板打印都慢。

    • 若个别模板打印慢:可以检查模板的具体设置。比如:是否有过多的图片插入,条形码转换,单元格形态设置多,数据量大,本身导出pdf文件就很大,可以尝试优化具体的模板,或者加大内存设置。

    • 若是所有模板都慢:可能是工程问题,可尝试升级JAR包。

    2)检查是否是浏览器问题:单个浏览器调用打印慢,可升级浏览器或者重置浏览器的设置,IE浏览器可尝试关闭兼容性视图。

    3)排查是否为网络因素导致的打印慢。

    4)排查是否为杀毒软件的问题。

    2.3 打印偏移的排查思路

    根据产生偏移的因素,可简要分为外部和内部两个因素,通常内部因素对单个模板较常见,外部因素通常对工程所有模板起效,如下图所示:

    3. 内置打印功能常见问题

    3.1 打印软件不生效

    问题描述

    升级至 2020-04-26 之后的 JAR 包,打印软件不生效。

    原因分析

    一般是由于打印软件版本过低,使用 打印 文档中 3.3.1 节提供的 FinePrint  V5 版本即可。

    3.2 本地打印软件启动失败

    问题描述

    1)选择「本地软件打印」时,提示本地打印软件启动失败,如下图所示:

    2.png

    2)本地打印,提示本地打印软件启动失败,但是fineprint进程在的,右下角也是有图标的

    解决方案

    1)点击提示中的「下载安装」,下载并启动本地打印软件。并注意以下几点:

    • 本地打印不要安装在设计器的安装目录下。

    • 若已安装好本地打印软件,提示启动失败,请检查 9092 端口是否被占用。

    • 若机器性能较差,会导致首次启动消耗时间较长。出现以上报错时请耐心等待,或稍后再次尝试打印。

    2)检查工程是 http 还是 https ,其次检查配置文件的httpsMode 选项,设为 true,则为 https 模式;设为 false,则为 http 模式。根据工程的配置修改即可,可参考文档 本地打印https配置说明

    3.3 IE浏览器打印没反应或者打印不跳转窗口

    问题描述

    1)IE浏览器下点击打印按钮没有弹窗显示。

    2)IE浏览器点击打印卡在“正在加载PDF”然后无响应。

    解决方案

    1)安装或者重装Adobe Reader。

    在线安装Adobe Reader:https://get.adobe.com/cn/reader/

    离线安装Adobe Reader:https://get.adobe.com/cn/reader/enterprise/

    2)取消兼容视图设置。

    3.4 自定义纸张打印不全

    问题描述

    当「模板>页面设置」中纸张大小为「自定义」时,本地软件打印的内容可能会显示不全。

    1646989398662201.png

    原因分析

    因为 Java 默认的打印,会从打印机纸张里寻找相近的纸张进行匹配。如果没有在打印软件中添加自定义纸张,可能找出来的是别的纸张。从而导致打印内容被截断。

    解决方案

    需要在打印软件中添加自定义纸张大小。具体设置请参见:Java 读取打印机自定义纸张

    3.5 打印字体重叠

    问题描述

    用户是「零客户端打印」,打印后,字体重叠。

    解决方案

    服务器缺失字体导致。详情请参见:字体缺失检测 或 服务器安装字体

    3.6 Flash 打印不可用

    问题描述

    FineReport 独创了 Flash 打印技术,可以精确分页打印,连打都可以做到,非常的方便,完美解决了困扰报表行业十几年的基于浏览器的打印问题。由于某些原因 Flash 打印没法使用,下面详细介绍无法使用的原因。

    注1:10.0设计器和部署包使用的都是 openjdk,而使用 openjdk 无法启动 flash 打印,但使用 Oracle/sun jdk 可以。

    注2:flash 打印目前是已经被淘汰了的技术,很多浏览器都将不再支持 flash 打印,建议客户使用零客户端或本地打印。

    解决方案

    1)没有安装 Flash Player 插件:客户端点击Flash打印会触发 Flash Player 插件,通过打印插件把要打印的数据画出来,再传到打印机把数据就打印出来,因此浏览器必须安装插件才可以进行打印。

    2)当前版本没有此功能:由于 Flash 打印是我们特有的高级功能,所以注册的低版本可能没有 Flash 打印功能,点击 Flash 打印弹出如下对话框时,说明您购买的版本中没有此功能,如果您需要使用这个功能的话,您可以联系我们的商务。

    3)使用 Chrome 浏览器自带的打印插件:

    一般来说,浏览器打印功能都是使用 NPAPI 方式,但是在 Chrome20 之后,Chrome 浏览器的打印方式默认是采用 PPAPI 的,将默认打印方式停用即可。在 URL 地址栏里面输入 chrome://plugins/,进入 Chrome 览器插件设置页面,将 Adobe Flash Player 插件里的 Shockwave Flash 23.0 r0 System 停用即可,如下图:

    停用之后效果:

    注1:如果打开插件设置界面,没有显示上面的界面,而是显示收缩页面,则点击详细信息展开

    注2:如果插件设置界面上没有 NPAPI 插件,则说明浏览器中的 Flash 版本中不包含 NPAPI 插件,需要去 Adobe Flash Player 官网下载 Flash,安装后重启 Chrome 即可。

    3.7 如何控制打印时有无水印

    问题描述

    打印到纸上时需要显示水印,或者客户打印报表的时候,希望根据自己情况选择打印模板是否带有水印

    解决方案

    请参考:如何控制打印时有无水印

    3.8 文本的对齐设置,预览打印时效果不一致

    问题描述

    设计器中已调整成对齐样式,但是网页预览和打印预览时,会出现较大的不一致现象,如下图:

    原因分析

    目前只支持全角空格的前后端一致效果,半角空格不支持,但是输入法默认的就是半角。

    解决方案

    将所有半角空格替换为全角空格。

    3.9 base64图片打印显示的很小

    问题描述

    base64 展示图片并打印,预览正常,打印的时候,图片缩的很小。

    解决方案

    html 里的单位改成 pt 即可。

    4. 调用打印方法常见问题

    4.1 invalid sheet index

    问题描述

    JS 调用打印,指定不弹出 sheet ,打印报错:invalid sheet index

    代码如下:

    /*单个模板打印*/
    var printurl="http://localhost:8075/webroot/decision/view/report";
    var reportlets ="[{reportlet: 'GettingStarted.cpt', 地区: '华北'}]";
    var config = {
    printUrl : printurl,
    isPopUp : true, 
    // 是否弹出设置窗口,true为弹出,false为不弹出
    data :{ 
    reportlets: reportlets // 需要打印的模版列表
    },
    printType : 1, // 打印类型,0为零客户端打印,1为本地打印
    // 以下为零客户端打印的参数,仅当 printType 为 0 时生效
    ieQuietPrint : true,// IE静默打印设置 true为静默,false为不静默
    // 以下为本地打印的参数,仅当 printType 为 1 时生效
    //printerName : '', // 打印机名
    isSheetSelectPopUp:false,
    pageType: 1, // 打印页码类型:0:所有页,1:当前页,2:指定页
    pageIndex: 2, // 页码范围。当 pageType 为 2 时有效
    copy: 2, // 打印份数
    };
    FR.doURLPrint(config);

    解决方案

    config 代码中需要指定 sheetIndex 。sheetIndex 介绍请参见:JS 调用 FR 打印方法

    注:isSheetSelectPopUp 参数介绍请参见 JS 调用 FR 打印方法

    4.2 报错 404

    问题描述

    Tomcat 上调用 FR 工程的本地打印,如果 Tomcat 上无 FR 工程,下面这个请求报错 404,如下图所示:

    注:该问题在 Finereport 10.0 和 Finereport 9.0 中都会出现。

    原因分析

    执行 FineReport.js 的时候,会尝试从本服务器上加载资源,而调用者的服务器上,没有报表工程,加载不到资源,所以报错。 

    解决方案

    在跨域调用新打印时,需要额外引入两个 js,分别是 socket.io.js 和 jquery.watermark.js (引入位置在 FineReport.js 后面),示例代码如下所示:

    注:Tomcat 下不能有报表工程。

    1)10.0 示例

    <script type="text/javascript" 
    src="http://localhost:8075/webroot/decision/view/report?op=resource&resource=/com/fr/web/core/js/socket.io.js"></script>
    <script type="text/javascript" 
    src="http://localhost:8075/webroot/decision/view/report?op=resource&resource=/com/fr/web/core/js/jquery.watermark.js"></script>

    2)9.0 示例

    <script type="text/javascript" 
    src="http://localhost:8075/WebReport/ReportServer?op=resource&resource=/com/fr/web/core/js/socket.io.js"></script> 
    <script type="text/javascript" 
    src="http://localhost:8075/WebReport/ReportServer?op=resource&resource=/com/fr/web/core/js/jquery.watermark.js"></script>

    4.3 一直显示正在加载控件

    问题描述

    在页面中调用 finereport.js 下的 FR.doURLPDFPrint(url) 时,会一直显示"正在打印 正在加载控件...",如下图所示:

    您引用的 finereport.js 和页面不在同一个应用下,如您的 Web 工程名为 FR,而您调用 finereport.js 的语句是:

    <script type="text/javascript" src="http://localhost:8075/webroot/decision/view/report?op=emb&resource=finereport.js"></script>

    这就涉及到跨域访问js,从而出现如上情况。

    解决方案

    1)若您应用为 Java 应用,且页面没有通过 iframe 嵌入报表,而是希望不预览模板直接打印或者批量打印报表,则可以采用如下方案:

    将报表应用 嵌入式部署 到 Java 应用中,修改调用 finereport.js 语句,使用相对路径引用 JS,如修改后的调用 finereport.js 的语句为:

    <script type="text/javascript" src="/工程名/decision/view/report?op=emb&resource=finereport.js"></script>

    2)若您页面通过 iframe 嵌入了报表,希望打印该报表,则可以采用如下方案(Java/非 Java 应用都可以,可以为独立的报表应用):

    不调用 finereport.js 下的FR.doURLPDFPrint(url)进行打印,而是获取 iframe 中的报表直接打印,即使用 iframe 解决跨域问题。

    假设 iframe 的 id 是 reportFrame,则打印方法如下:

    function doprint(){
       document.getElementById('reportFrame').contentWindow.contentPane.pdfPrint();
    }

    4.4 缺少相关文件

    问题描述

    使用 JS 调用 FineReport 打印方法时,有如下报错:

    Access to XMLHttpRequest at 'file:///F:/webroot/decision/view/report?op=resource&resource=/com/fr/web/core/js/socket.io.js' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https

    原因分析

    经控制台查看发现是缺少相关文件:

    解决方案

    缺少文件,补齐即可,在html中做如下引用:

    <script type="text/javascript" src="http://localhost:8075/webroot/decision/view/report?op=resource&resource=/com/fr/web/core/js/socket.io.js"></script> <script type="text/javascript" src="<a href="http://localhost:8075/webroot/decision/view/report?op=resource&resource=/com/fr/web/core/js/jquery.watermark.js">

    Attachment List


    Theme: 报表专题
    Already the First
    • Helpful
    • Not helpful
    • Only read

    滑鼠選中內容,快速回饋問題

    滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

    不再提示

    10s後關閉

    Get
    Help
    Online Support
    Professional technical support is provided to quickly help you solve problems.
    Online support is available from 9:00-12:00 and 13:30-17:30 on weekdays.
    Page Feedback
    You can provide suggestions and feedback for the current web page.
    Pre-Sales Consultation
    Business Consultation
    Business: international@fanruan.com
    Support: support@fanruan.com
    Page Feedback
    *Problem Type
    Cannot be empty
    Problem Description
    0/1000
    Cannot be empty

    Submitted successfully

    Network busy