uni-app打印


1.手機端調用window.print()方法無效,無論是在瀏覽器或者app中或者webview中,(可能有的手機瀏覽器可以)。

2.uniapp app端無法直接獲取dom元素,,沒有document對象,可使用renderjs處理,在app中只能使用原生的html元素如button(在元素上添加點擊事件)調用renderjs中的方法,在例如u-button中就調用無效

在renderjs里需要調用 主js的saveImg方法,傳值,因為在renderjs模塊里無法獲取uni對象,因此需要調用主js

3.jspdf.js插件在手機端無法正常使用,在瀏覽器中時頁面打不開,在app中頁面能正常打開但下載pdf時一直下載失敗。

最終解決方案:

uniapp的renderjs+html2canvas+后台轉pdf+android原生打印插件(這個插件是在HBuilder的插件市場安裝的,地址:https://ext.dcloud.net.cn/plugin?id=1633)

使用uniapp的renderjs,在renderjs里面調用html2canvas的頁面轉圖片功能生成base64的圖片,然后調用后台接口將base64圖片轉成pdf(本來這里是使用jspdf插件進行圖片轉pdf,但是在手機端這里一直無法正常轉換,詳情見3.),

再調用uni的文件下載接口下載pdf文件,然后查看文件下載后在手機本地的存儲路徑,調用安卓原生打印插件(該插件只能打印pdf文件,且文件路徑必須是本地絕對路徑),連接打印機進行打印(打印機通過wlan鏈接,因此打印時設備應在同一網絡下)

 

<button class="printBtn" type='primary' @click="renderTest.changeToImg1">打印</button>
<script>
    import {        
        loadPdf
    } from '../../api/common.js'
    import {
        baseUrl
    } from '../../api/api.js'
const printPdf = uni.requireNativePlugin('YanYu-PrintPDF');
    export default {
        data() {
            return {}
    },
    methods:{      saveImg(src) { loadPdf({ image: src }).then(res
=> { console.log(res.result) uni.downloadFile({ url: res.result, //url:"http://61.162.225.227:19000/wechat/static/direct.png", success: function(res) { console.log('save success-------'); console.log(res) let base = "/storage/emulated/0/Android/data/store.yard.law/apps/__UNI__A6E30DD/" var savedFilePath = res.tempFilePath.substr(1); printPdf.managerPrint(base + savedFilePath); }, fail(err) { console.log('save err-------------'); console.log(err); } }); }) }     }  }
</script>

 

<script module="renderTest" lang="renderjs">
    import html2canvas from 'html2canvas';  

    export default {
        data() {
            return {}
        },
        methods: {
            changeToImg1(event, ownerInstance) {
                var dom = document.querySelector("#dy"); // 獲取dom元素                
                html2canvas(dom, {
                    useCORS: true, //支持圖片跨域
                    width: "950",
                    height: "1344"
                }).then(function(canvas) {
                    var image = new Image();
                    let src = image.src = canvas.toDataURL("image/png");
           // 調用 service層的saveImg方法,傳值,因為在renderjs模塊里無法獲取uni對象,因此需要調用主js

            ownerInstance.callMethod('saveImg', src)
          }); 
        }
      }
  }
</script>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM