反饋已提交
網絡繁忙
本文介紹 列印 時遇到的問題、解決方案以及常見的排查思路。
常見列印問題以及排查思路如下圖所示:
注:建議在列印前將印表機的縮放比例設定調整為100%,否則可能導致列印預覽上方出現空白 。
列印失敗的排查步驟如下:
1)確認列印軟體啟動是否成功:首先觀察電腦本地程式列印是否已經啟動,如果無說明沒有啟動成功
2)確認具體的現象
偶發出現還是必定出現,如果是首次啟動失敗,需要點選多次才能正常列印,一般是啟動逾時問題。
若是必定復現,首先保證檢查列印軟體是否存在多個版本互相沖突,並且保證列印軟體不要安裝在設計器目錄下
3)檢查埠占用情況:本地列印軟體預設API的 9092,若被佔用,可釋放相應的API或者修改本地列印軟體的埠號,另外本地列印軟體的配置檔案也要修改成一樣的埠,修改完儲存重啟。
4)檢查配置:若是https環境想要呼叫本地軟體,首先得配置好本地列印的https,可參考文檔 本機列印https配置說明,其次檢查配置檔案的httpsMode 選項,設為 true,則為 https 模式;設為 false,則為 http 模式。
5)檢查是否為瀏覽器限制問題或殺毒軟體的問題。
6)檢查插件和 JAR 包是否匹配。
7)查看 bin 目錄下的 debug.log 日誌查看報錯,進行具體分析。
1)排查範本問題:需要確定是個別範本列印慢還是所有範本列印都慢。
若個別範本列印慢:可以檢查範本的具體設定。比如:是否有過多的圖片插入,條碼轉換,儲存格形態設定多,資料量大,本身匯出pdf檔案就很大,可以嘗試優化具體的範本,或者加大記憶體設定。
若是所有範本都慢:可能是工程問題,可嘗試升級JAR包。
2)檢查是否是瀏覽器問題:單個瀏覽器呼叫列印慢,可升級瀏覽器或者重置瀏覽器的設定,IE瀏覽器可嘗試關閉相容性檢視表。
3)排查是否為網路因素導致的列印慢。
4)排查是否為殺毒軟體的問題。
根據產生偏移的因素,可簡要分為外部和內部兩個因素,通常內部因素對單個範本較常見,外部因素通常對工程所有範本起效,如下圖所示:
問題描述
升級後,列印軟體不生效。
原因分析
一般是由於列印軟體版本過低,使用 列印 文檔中 3.3.1 節提供的 FinePrint 版本即可。
1)選擇「本地軟體列印」時,提示本地列印軟體啟動失敗,如下圖所示:
2)本地列印,提示本地列印軟體啟動失敗,但是fineprint進程在的,右下角也是有圖示的
解決方案
1)點選提示中的「下載安裝」,下載並啟動本地列印軟體。並注意以下幾點:
本地列印不要安裝在設計器的安裝目錄下。
若已安裝好本地列印軟體,提示啟動失敗,請檢查 9092 埠是否被佔用。
若機器效能較差,會導致首次啟動消耗時間較長。出現以上報錯時請耐心等待,或稍後再次嘗試列印。
2)檢查工程是 http 還是 https ,其次檢查配置檔案的httpsMode 選項,設為 true,則為 https 模式;設為 false,則為 http 模式。根據工程的配置修改即可,可參考文檔 本機列印https配置說明。
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)取消相容檢視表設定。
當「範本>頁面設定」中紙張大小為「自訂」時,本地軟體列印的內容可能會顯示不全。
因為 Java 預設列印,會從印表機紙張裏尋找相近的紙張進行匹配。如果沒有在列印軟體中新增自訂紙張,可能找出來的是別的紙張。進而導致列印內容被截斷。
需要在列印軟體中新增自訂紙張大小。具體設定請參見:Java 讀取印表機自訂紙張
使用者是「零用戶端列印」,列印後,字體重疊。
伺服器缺失字體導致。詳情請參見:字型缺失檢測 或 伺服器安裝字體
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 即可。
列印到紙上時需要顯示水印,或者客戶列印報表的時候,希望根據自己情況選擇列印範本是否帶有水印
請參考:如何控制列印時有無水印
設計器中已調整成對齊樣式,但是網頁預覽和列印預覽時,會出現較大的不一致現象,如下圖:
目前只支援全角空格的前後端一致效果,半角空格不支援,但是輸入法預設就是半角。
將所有半角空格更換為全角空格。
base64 展示圖片並列印,預覽正常,列印的時候,圖片縮的很小。
html 裏的單位改成 pt 即可。
使用火狐瀏覽器列印,印表機設定為縱向,但是點選列印時,方向卻是橫向的。
火狐瀏覽器建議使用 113 版本,或更換谷歌瀏覽器進行列印。
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列印方法
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>
在頁面中呼叫 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();}
使用 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">
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙