wrod pdf MP4... 等转数据流 进行下载 和 预览 wrod pdf 打印 pdf

<el-dialog :visible.sync="iframeOpen" title="文档" ref="appendixDialog" :show-close="true" :width="'900px'"
        class="dialog-div-pre-style" center>
        <div v-html="fileUrl"></div>
    </el-dialog>    

   // 下载pdf  和 wrod   MP4
        down(){
            const fileRoute = this.formData.responsibilityConfirmation ? this.formData.responsibilityConfirmation :
                '' // (新增与修改字段不同导致需要进行兼容)
            const type = fileRoute.substring(fileRoute.lastIndexOf('.') + 1).toLocaleLowerCase() // 后缀名
                this.fileUrl = process.env.VUE_APP_BASE_API + fileRoute
                    fetch(this.fileUrl).then(res => res.blob()).then(blob => { ///  MP4  转成文件流
                        const a = document.createElement('a');
                        document.body.appendChild(a)
                        a.style.display = 'none'
                        // 使用获取到的blob对象创建的url
                        const url = window.URL.createObjectURL(blob);
                          a.href = url;
                        // 指定下载的文件名
                        a.download = new Date().getTime() + "xxxx."+type;
                        a.click();
                        document.body.removeChild(a)
                        // 移除blob对象的url
                        window.URL.revokeObjectURL(url);
                    });
            
        },

         iframeOk() {
            // 读取  wrod  转成  html 渲染页面
            const fileRoute = this.formData.responsibilityConfirmation ?this.formData.responsibilityConfirmation :
                '' // (新增与修改字段不同导致需要进行兼容)
            const type = fileRoute.substring(fileRoute.lastIndexOf('.') + 1).toLocaleLowerCase() // 后缀名
            this.fileUrl = process.env.VUE_APP_BASE_API + fileRoute
            if(type=='pdf'){
                     window.open(this.fileUrl);
            }else{
                    this.iframeOpen = true
            this.fileName = '预览'
            if (type.indexOf('doc') !== -1 || type.indexOf('docx') !== -1) { // WORD
                this.fileType = 'doc'
                this.handlerDocPreview() // 现在不需要file对象,直接使用数据缓冲区
            }   
            }
            
        handlerDocPreview() {
            try {
                // ArrayBuffer
                const file = this.fileUrl
                this.fileUrl = '正在加载……'
                var xhr = new XMLHttpRequest()
                xhr.open('get', file, true)
                xhr.responseType = 'arraybuffer'
                const that = this
                xhr.onload = function(e) {
                    console.log(xhr)
                    if (xhr.status == 200) {
                        const data = new Uint8Array(xhr.response) // 可直接使用xhr.reponse
                        mammoth.convertToHtml({
                            arrayBuffer: data
                        }).then((result) => {
                            that.fileUrl = result.value
                        }).done()
                    }
                }
                xhr.send()
            } catch (e) {
                this.fileUrl = '<h1 style="text-align: center">' + this.emptyTips + '</h1>'
            }

        },

  
           // 打印内容
        printContext() {
            this.$print(this.$refs.print)
            this.$print(this.$refs.print, {
                'no-print': '.do-not-print-div'    //  这是不打印的 内容
            })
        },
image.png
image.png

image.png

image.png

print.js

 // 打印类属性、方法定义
/* eslint-disable */
 const Print = function (dom, options) {
  if (!(this instanceof Print)) return new Print(dom, options);

       this.options = this.extend({
     'noPrint': '.no-print'
          }, options);

      if ((typeof dom) === "string") {
this.dom = document.querySelector(dom);
    } else {
      this.isDOM(dom)
this.dom = this.isDOM(dom) ? dom : dom.$el;
 }

   this.init();
    };
      Print.prototype = {
     init: function () {
var content = this.getStyle() + this.getHtml();
this.writeIframe(content);
     },
    extend: function (obj, obj2) {
for (var k in obj2) {
  obj[k] = obj2[k];
}
return obj;
   },

      getStyle: function () {
var str = "",
  styles = document.querySelectorAll('style,link');
for (var i = 0; i < styles.length; i++) {
  str += styles[i].outerHTML;
}
str += "<style>" + (this.options.noPrint ? this.options.noPrint : '.no-print') + "{display:none;}</style>";

return str;
 },

          getHtml: function () {
var inputs = document.querySelectorAll('input');
var textareas = document.querySelectorAll('textarea');
var selects = document.querySelectorAll('select');

for (var k = 0; k < inputs.length; k++) {
  if (inputs[k].type == "checkbox" || inputs[k].type == "radio") {
    if (inputs[k].checked == true) {
      inputs[k].setAttribute('checked', "checked")
    } else {
      inputs[k].removeAttribute('checked')
    }
  } else if (inputs[k].type == "text") {
    inputs[k].setAttribute('value', inputs[k].value)
  } else {
    inputs[k].setAttribute('value', inputs[k].value)
  }
}

for (var k2 = 0; k2 < textareas.length; k2++) {
  if (textareas[k2].type == 'textarea') {
    textareas[k2].innerHTML = textareas[k2].value
  }
}

for (var k3 = 0; k3 < selects.length; k3++) {
  if (selects[k3].type == 'select-one') {
    var child = selects[k3].children;
    for (var i in child) {
      if (child[i].tagName == 'OPTION') {
        if (child[i].selected == true) {
          child[i].setAttribute('selected', "selected")
        } else {
          child[i].removeAttribute('selected')
        }
      }
    }
  }
}
// 包裹要打印的元素
// fix: https://github.com/xyl66/vuePlugs_printjs/issues/36
let outerHTML = this.wrapperRefDom(this.dom).outerHTML
return outerHTML;
    },
      // 向父级元素循环,包裹当前需要打印的元素
         // 防止根级别开头的 css 选择器不生效
        wrapperRefDom: function (refDom) {
let prevDom = null
let currDom = refDom
// 判断当前元素是否在 body 中,不在文档中则直接返回该节点
if (!this.isInBody(currDom)) return currDom

while (currDom) {
  if (prevDom) {
    let element = currDom.cloneNode(false)
    element.appendChild(prevDom)
    prevDom = element
  } else {
    prevDom = currDom.cloneNode(true)
  }

  currDom = currDom.parentElement
}

return prevDom
      },

    writeIframe: function (content) {
var w, doc, iframe = document.createElement('iframe'),
  f = document.body.appendChild(iframe);
iframe.id = "myIframe";
//iframe.style = "position:absolute;width:0;height:0;top:-10px;left:-10px;";
iframe.setAttribute('style', 'position:absolute;width:0;height:0;top:-10px;left:-10px;');
w = f.contentWindow || f.contentDocument;
doc = f.contentDocument || f.contentWindow.document;
doc.open();
doc.write(content);
doc.close();
var _this = this
iframe.onload = function(){
  _this.toPrint(w);
  setTimeout(function () {
    document.body.removeChild(iframe)
  }, 100)
}
       },

         toPrint: function (frameWindow) {
try {
  setTimeout(function () {
    frameWindow.focus();
    try {
      if (!frameWindow.document.execCommand('print', false, null)) {
        frameWindow.print();
      }
    } catch (e) {
      frameWindow.print();
    }
    frameWindow.close();
  }, 10);
} catch (err) {
  console.log('err', err);
}
       },
        // 检查一个元素是否是 body 元素的后代元素且非 body 元素本身
        isInBody: function (node) {
return (node === document.body) ? false : document.body.contains(node);
       },
       isDOM: (typeof HTMLElement === 'object') ?
function (obj) {
  return obj instanceof HTMLElement;
       } :
function (obj) {
  return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string';
}
       };
         const MyPlugin = {}
      MyPlugin.install = function (Vue, options) {
// 4. 添加实例方法
 Vue.prototype.$print = Print
 }
 export default MyPlugin
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容