vue 解决打印预览格式错乱

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue 解决打印预览格式错乱相关的知识,希望对你有一定的参考价值。

参考技术A 用到了 html2canvas printJS

1.html 内容

 <div ref="printTest" id="printTest" class="printDetails">需要打印的内容</div>

<i-button type="primary" @click="hanldepoint">打印</i-button>

2.js

import html2canvas from "html2canvas";

import printJS from "print-js";

    hanldepoint() 

      const printContent = this.$refs.printTest;

      // 获取dom 宽度 高度

      const width = printContent.clientWidth;

      const height = printContent.clientHeight;

      // 创建一个canvas节点

      const canvas = document.createElement("canvas");

      const scale = 4; // 定义任意放大倍数,支持小数;越大,图片清晰度越高,生成图片越慢。

      canvas.width = width * scale; // 定义canvas 宽度 * 缩放

      canvas.height = height * scale; // 定义canvas高度 *缩放

      canvas.style.width = width * scale + "px";

      canvas.style.height = height * scale + "px";

      canvas.getContext("2d").scale(scale, scale); // 获取context,设置scale

      const scrollTop =

        document.documentElement.scrollTop || document.body.scrollTop; // 获取滚动轴滚动的长度

      const scrollLeft =

        document.documentElement.scrollLeft || document.body.scrollLeft; // 获取水平滚动轴的长度

      html2canvas(printContent, 

        canvas,

        backgroundColor: null,

        useCORS: true,

        windowHeight: document.body.scrollHeight,

        scrollX: -scrollLeft, // 解决水平偏移问题,防止打印的内容不全

        scrollY: -scrollTop

      )

        .then(canvas => 

          const url = canvas.toDataURL("image/png");

 //打印方法

          printJS(

            printable: url,

            type: "image",

            documentTitle: "", // 标题

            style: "@pagesize:auto;margin: 0cm 1cm 0cm 1cm;" // 去除页眉页脚

          );

        )

        .catch(err => 

          console.error(err);

        );

    

Vim 复制粘帖格式错乱问题的解决办法

有时候,复制文本(尤其是代码)到 Vim,会出现格式错乱的问题。看样子,应该是自动缩进惹得祸。本文不去深究原因,直接给出解决方法。

 技术分享图片

1. paste 模式

运行如下命令,进入 paste 模式:

:set paste

进入 paste 模式后,按 i 键进入插入模式,然后再粘帖,文本格式不会错乱了。但粘帖后还需要按 <ESC> 进入普通模式并执行如下命令结束 paste 模式:

:set nopaste

显然,这样非常麻烦。下面我们进行改进。

2. 快捷键一

我们可以利用设置快捷键来简化上面的两个命令。在 ~/.vimrc 中加入如下两行:

map <F10>:set paste<CR>
map <F11>:set nopaste<CR>

这样,在普通模式下按 F10 (你也可以用自己喜欢的按键)就会进入 paste 模式,按 i 进入插入模式后粘帖,然后按 <ESC> 回到普通模式,再按 F11 结束 paste 模式。

这样虽然方便了,但占用了两个按键。下面我们继续改进。

3. 快捷键二

在 ~/.vimrc 中加入如下内容:

set pastetoggle=<F11>

这样就可以把上面的 F10 和 F11 合并为一个快捷键来切换 paste 模式了。

还有更好的办法么?当然!

4. Vim 寄存器一

关于 Vim 寄存器的详细信息请执行命令 “:help registers” 查看。

对于“剪切板”这个概念,Linux 下有两个东西:一个叫做选择缓冲区(X11 selection buffer),另一个才是剪切板(clipboard)。鼠标或键盘选择内容时,内容实时进入缓冲区,然后按中键将内容插入光标所在位置;鼠标或键盘选择内容后,按Ctrl-C(或Shift-Ctrl-C)或菜单中的“复制”,内容进入剪切板,然后按Ctrl-V(或Shift-Ctrl-V)或菜单中的“粘帖”将内容插入光标所在位置。关于这两者的详细信息,请自行搜索,此处不深究。

Vim 的寄存器 “* 对应系统缓冲区, 寄存器 “+ 对应系统剪切板。

如果你是把选择的内容(在系统缓冲区中)粘帖到 Vim ,只需在普通模式下执行如下命令:

"*p

对应的,如果你是把复制的内容(在系统剪切板中)粘帖到 Vim,只需在普通模式下执行如下命令:

"+p

怎么样?格式没有错乱了吧?

这样虽然简便很多了,但还是需要输入三个字母,并且这三个字母都得使用右手小拇指输入,甚至其中的两个字母还需要 shift 键配合!

还有更简单的办法。

5. Vim 寄存器二

在 ~/.vimrc 里加入如下内容:

set clipboard=unnamed

然后只需在普通模式下按 p 即可把系统缓冲区中的内容粘帖到 Vim 中,就像粘帖用 yy 命令得到的内容一样,并且格式不错乱。

如果把上面的一行换成如下内容:

set clipboard=unnamedplus

普通模式下按 p 粘帖的内容就是系统剪切板里的内容了。

这已经足够简便了。在搜索此问题的过程中,我还看到了另外一些办法。

6. 快捷键三

在 ~/.vimrc 里加入如下内容:

inoremap <S-Insert><ESC>:setl paste<CR>gi<C-R>+<ESC>:setl nopaste<CR>gi

这样,你就可以在插入模式下使用 Shift-Insert 快捷键在粘帖系统剪贴板中的内容了。

把上面一行替换成如下内容同样可以达到相同的效果:

inoremap <S-Insert><ESC>"+p`]a

注意,这可是在插入模式下哦!比起第 5 节提到的方法,这种方法省去了一次 <ESC> 按键进入普通模式和一次 i 按键重新回到插入模式。

至此,你需要做的只是:

  • a. 复制你想要的内容;
  • b. 回到 Vim 并按 Shift-Insert 快捷键;
  • c. 继续编辑其他内容。

以上是关于vue 解决打印预览格式错乱的主要内容,如果未能解决你的问题,请参考以下文章

XCOM V2.6 串口打印出来中文乱码,字体格式错乱的一种原因(设置没问题,突然乱码)

XCOM V2.6 串口打印出来中文乱码,字体格式错乱的一种原因(设置没问题,突然乱码)

在Vue中使用CodeMirror 格式显示错误 行数错乱 & 代码默认隐藏

Vim 复制粘帖格式错乱问题的解决办法

VIM实用指南(16)vim粘贴格式错乱

文档在线预览使用js前端实现wordexcelpdfppt 在线预览