nodejs在pdf中绘制表格

文章讲述了使用Node.js和pdf-lib库在PDF模板中动态生成表格,包括处理中文文本时遇到的乱码问题以及如何设置中文字体。作者提到pdf-lib缺乏自动换行功能,需自定义实现基于宽度的换行。
摘要由CSDN通过智能技术生成

需求

之前我已经了解过如何在pdf模板中填写字段了

nodejs根据pdf模板填入中文数据并生成新的pdf文件icon-default.png?t=N7T8https://blog.csdn.net/ArmadaDK/article/details/132456324

 但是当我具体使用的时候,我发现我的模板里面有表格,表格的长度是不固定的,所以需要动态生成一个表格,就要在原方案生成的pdf后面自己画上表格,可以在pdflib的官网上看到一些例子PDF-LIB · Create and modify PDF documents in any JavaScript environment.

具体代码

// 创建一个新页面
      const currentPage = pdfDoc.addPage([pdfWidth, pdfHeight]);

用addpage创建一页,并将这页保存为变量方便后续进行操作。

// 绘制表格行数据
      for (let i = startRow; i < endRow; i++) {
        const rowData = arr[i];
        const y = pdfHeight - 100 - (i % rowsPerPage) * cellHeight;
        currentPage.drawRectangle({
          // 每行一个长方形
          x: 50,
          y, // 手动垂直居中
          width: tableWidth,
          height: cellHeight,
          borderColor: rgb(0, 0, 0),
        });
        let idx = 0;
        for (let key in rowData) {
          currentPage.drawText(rowData[key], {
            // 填入文字
            x: 50 + idx * cellWidth + 10,
            y: y + 5,
            size: fontSize,
            font,
          });
          currentPage.drawLine({
            // 竖线
            start: { x: 50 + idx * cellWidth, y },
            end: { x: 50 + idx * cellWidth, y: y + cellHeight },
            thickness: 1,
          });
          idx++;
        }
      }

drawText('文字内容',{文字的一些options(注意这里的坐标是左下角)})

drawLine({start:{起点坐标},end:{终点坐标},thickness: 粗细})

这时候发现如果文字是中文的话会出现乱码,就需要引入中文字体,但和上篇的引入方法不一样,这次不能用那个update,而是使用setfont,直接对整个currentPage字体进行设置,如下代码所示:

  // 设置字体
  const fontBytes = await fs.promises.readFile(
    "xxxx.ttf"
  );
  pdfDoc.registerFontkit(fontkit);
  let font = await pdfDoc.embedFont(fontBytes);

。。。

      // 每次创建一个新页面就要设置font
      const currentPage = pdfDoc.addPage([pdfWidth, pdfHeight]);
      currentPage.setFont(font);

遇到的问题

  • pdf-lib没有自动换行的功能,只能自己写代码进行换行,比如每5个字符y的位置往下移多少之类的,但是这个其实也有个问题五个汉字的宽度和五个.的宽度肯定是相差很大的,最好是用宽度进行换行,但是问题是不知道咋做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js是一种基于Chrome V8引擎的JavaScript运行时环境,通常用于构建高度可扩展的网络应用程序。相比传统的使用JavaScript运行在浏览器的开发,Node.js允许我们在服务器端运行JavaScript代码,使得服务器端和客户端的开发能够使用相同的编程语言,提供了更高效的开发方式。 对于想要入门Node.js的开发者来说,了解Node.js的基本概念和特性非常重要。有很多优秀的教程和资源可供学习,其包括一些免费的PDF书籍。 Node.js入门PDF可以帮助初学者以更系统化的方式学习和理解Node.js的基本知识和技能。这些PDF通常包含以下内容: 1. Node.js的基本介绍:包括Node.js的背景和起源、其特性和优势等。 2. Node.js的安装和配置:包括在不同操作系统上安装Node.js的步骤和设置,使得开发者可以在自己的电脑上运行Node.js环境。 3. Node.js的基本语法和特性:包括如何编写和运行Node.js代码,如何使用模块和包管理工具等。 4. Node.js的核心模块和API:介绍Node.js提供的核心模块和API,如文件系统、网络、HTTP等,帮助开发者理解如何使用这些模块来构建应用程序。 5. 异步编程和事件驱动:介绍Node.js的异步编程模型和事件驱动机制,帮助开发者编写高效和响应式的应用程序。 虽然Node.js入门PDF可以作为入门学习的起点,但实际上要掌握Node.js的开发还需要不断实践和深入学习。最好结合阅读PDF教程和参与实际项目来提升自己的技能。同时,社区也有很多开发者分享自己的经验和教程,可以通过阅读博客、参加技术交流活动等方式来进一步提升自己的Node.js技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值