js将Excel转成PDF(纸张、分页、铺满、提高清晰度)

这篇具有很好参考价值的文章主要介绍了js将Excel转成PDF(纸张、分页、铺满、提高清晰度)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

依赖:

<script src="./js/html2canvas.min.js"></script>
<script src="./js/jspdf.min.js"></script>

示例html DOM:

<div id="page1" style="width: 2000px;">内容</div>

核心js:

// html转pdf
  function html_2_pdf(dom_id, pdf_name) {
    // 预定参数
    let scale = 3; // 图片清晰度倍率,越大越清晰,默认1,建议2
    let pdf_img_scale = scale - 0.2; // 图片填充pdf倍率,使内容尽量铺满pdf
    let dpi = window.devicePixelRatio * scale;
    let page_model = "choose"; // choose:自动选择模式,其他值则使用a4模式(太宽的内容平铺后字变小)

    // html参数
    let html_dom = document.getElementById(dom_id);
    let dom_width = html_dom.offsetWidth;
    let dom_height = html_dom.offsetHeight;

    if (!dom_id || !pdf_name || !html_dom || !dom_width || !dom_height){
      console.info("dom参数不全:", [dom_id, pdf_name, html_dom, dom_width, dom_height]);
      return;
    }

    html2canvas(html_dom, { // html转图片
      logging: false,
      dpi: dpi,
      scale: scale,
    }).then(function(canvas) {

      // pdf参数:自适应纸张类型
      let cm_width = dom_width/(dpi/2.54)/10; // 像素转厘米
      let format = "a4";
      let page_width = 210 - 10; // mm,保留左右5mm空白
      let page_height = 277 - 10; // mm,保留上下5mm空白
      let orientation = "portrait";
      if (page_model === "choose"){
        if (cm_width<21.0+0.5){format = "a4";page_width= 210 - 10;page_height=277-10;}
        else if (cm_width<=29.7+0.5){format = "a3";page_width=297- 10;page_height=420- 10;}
        else if (cm_width<=42.0+0.5){format = "a2";page_width=420- 10;page_height=594- 10;}
        else if (cm_width<=59.4+0.5){format = "a1";page_width=594- 10;page_height=841- 10;}
        else if (cm_width<=84.1+0.5){format = "a0";page_width=841- 10;page_height=1189- 10;}
        else if (cm_width<=100.0+0.5){format = "b0";page_width=1000- 10;page_height=1414- 10;}
        else {format = "b0";page_width=1000- 10;page_height=1414- 10;} // 超出范围都用b0纵向排版
      }
      console.info("PDF参数:", [html_dom, pdf_name, dom_width, cm_width, format]);

      // pdf参数
      let pdf = new jsPDF({
        unit: "pt", // 单位,pt、mm
        format: format, // 页面大小,a0,a1,a2,a3,a4,b0
        orientation: orientation, // 页面方向,portrait: 纵向,landscape: 横向
        putOnlyUsedFonts: true, // 只包含使用的字体
        compress: true, // 压缩文档
        precision: 16, // 浮点数的精度
      });

      // test
      let src = canvas.toDataURL('image/jpeg', 1.0); // 图片base64,jpeg
      console.log(src);

      // 图片转pdf
      let ctx = canvas.getContext("2d");
      let imgHeight = Math.floor(page_height * canvas.width / page_width);   //按纸显示比例换算一页图像的像素高度
      let renderedHeight = 0;
      console.info("图像参数:", [canvas.width, canvas.height, page_width, page_height, imgHeight]);
      let page_num = 1; // pdf页数
      while(renderedHeight < canvas.height) { // 渲染分页,并合成pdf
        console.info("正在合成pdf页="+page_num+" ...");

        let page = document.createElement("canvas");
        page.width = canvas.width;
        page.height = Math.min(imgHeight, canvas.height - renderedHeight); // 可能内容不足一页

        //用getImageData剪裁指定区域,并画到前面创建的canvas对象中
        page.getContext("2d").putImageData(ctx.getImageData(0, renderedHeight, canvas.width, Math.min(imgHeight, canvas.height - renderedHeight)), 0, 0);
        pdf.addImage(page.toDataURL("image/jpeg", 1.0), "JPEG", 10, 10, page_width*pdf_img_scale, Math.min(page_height, page_width * page.height / page.width)*pdf_img_scale );    //添加图像到页面,保留10mm边距

        renderedHeight += imgHeight;
        if(renderedHeight < canvas.height){
          pdf.addPage(); // 如果后面还有内容,添加一个空页
        }

        console.info("pdf页="+page_num+" 合成完成。");
        page_num++;
      }
      console.info("合成pdf完成,请保存pdf文件。总页数="+(page_num-1), [page_num-1, dom_id, pdf_name]);
      pdf.save(pdf_name);
    });
  }

  // 调用合成函数
  // html_2_pdf('page1', 'pdf_name.pdf');

-文章来源地址https://www.toymoban.com/news/detail-506719.html

-

-

到了这里,关于js将Excel转成PDF(纸张、分页、铺满、提高清晰度)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用AI图片清晰度增强器软件增强和锐化图片、提高照片清晰度并去除噪点

    通过使用深度学习AI算法对照片进行批量锐化、去噪和去模糊处理,该程序可以应用再大部分照片和图片,包括徽标、卡通和动漫 可能很多朋友都会遇到需要批量增强和锐化照片的情况:例如,如果拍摄过程中曝光不足、夜晚噪点多或者画面模糊等等。普通的照片处理软件使

    2024年02月06日
    浏览(50)
  • 亿图导出word和PDF中清晰度保留方法

    在亿图软件中画一个元件大小搭配合理的图。注意字体大小的安排,尤其是角标的大小要合适,示范如下 选中所有元器件,右键使用组合功能将电路图组合为一个整体 将亿图软件中的图保存为SVG格式。示范如下 在导出到office中选择SVG文档 在visio中打开上一步保存的SVG文件。

    2024年02月08日
    浏览(61)
  • Print.js实现打印pdf,HTML,图片(可设置样式可分页)

    目录 一.安装及引入Print.js 二.介绍 三.常用配置 四.具体使用 一.安装及引入Print.js 1.安装 2.在需要使用的文件引入 二.介绍 Print.js有四种打印类型:\\\'pdf\\\'、\\\'html\\\'、\\\'image\\\'、\\\'json\\\'。 它的基本用法是调用printJS()并传入参数 三.常用配置 Print.js接受一个对象作为参数,在这里你可以配置

    2024年02月06日
    浏览(49)
  • 关于uniapp中使用opencv.js拍照提取纸张轮廓

    1.效果图片 2.下载opencv.js   比如下载 4.5.0 版本的 opencv.js 文件 https://docs.opencv.org/4.5.0/opencv.js 3.引入 opencv.js放在static文件夹下 页面中引入 let cv = require(\\\'../../static/opencv/opencv.js\\\'); 4.进入正题    //页面先放一个隐藏图片     img id=\\\"imageUrl\\\" alt=\\\"No Image\\\" style=\\\"display: none;\\\" /    //获取

    2024年02月04日
    浏览(36)
  • PDF转成PNG,之后PNG转成PDF

    PDF2IMG 需要安装python的img2pdf和pdf2img的包,还需要安装https://github.com/oschwartz10612/poppler-windows/releases/,并且解压之后把路径+lib/bin添加到环境变量 IMG2PDF

    2024年02月16日
    浏览(46)
  • 前端(vue)js在线预览PDF、Word、Excel、ppt等office文件

    可选参数 pdf=true,word文档尝试以pdf方式显示,默认false watermark=水印文本,显示文本水印;“img:”+图片url表示图片水印,如:img:https://view.xdocin.com/demo/wm.png saveable=true,是否允许保存源文件,默认false printable=false,是否允许打印,默认true ©able=false,是否允许选择复制内容,

    2024年02月13日
    浏览(76)
  • 前端用 js-file-download组件下载后端返回的pdf,word,excel文件

    后端返回的pdf,word,excel的文件流导出需要让浏览器下载文件 1、安装js-file-download组件 2、在对应的页面引用 3、在接口返回结果后直接调用即可

    2024年02月08日
    浏览(75)
  • 怎么用PDF派工具将Word转成PDF

    Word是我们最常用的一种格式文件,它易于编辑,但是安全性和稳定性较差,有时候我们发送给别人的Word文件,接收到打开内容已经乱码。遇到这种情况,我们可以优先将Word文件转换成稳定性好的PDF文件。那么如何进行文件格式转换呢? 推荐使用PDF派工具在线将word转成PDF,

    2024年02月13日
    浏览(53)
  • 超星图书转成PDF格式

    为避免浪费您的时间,本篇转载文章不值得花费您的宝贵时间阅读 感谢@医学插画动画杜鹏 @Roison An两位提供的方法,经试验后简化了一下,得出以下方法:1、使用超星打开你想要转换的图书 2、依次打开本书的所有页面,不要关闭超星(后面图片的清晰度取决于打开超星图书

    2024年04月25日
    浏览(61)
  • 使用.NET 将PDF转成Word

    使用Solid Framework可以很方便的已编程方式将PDF转换成Word文件格式 首先准备一套Solid Framework 在Visual Studio中建立一个项目并引用SolidFramework.dll 添加命名空间 SolidFramework 前期准备, 设置路径个许可证 初始化SolidFrame Pdf Converter OCR识别引擎, 这里使用内置引擎 一切就绪开始转换

    2024年02月05日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包