官方文档

0、准备

需要引入两个包,首先要npm install pdfkit安装pdfkit包

const PDF = require('pdfkit');
const fs = require('fs');

通过下面方法创建pdf对象,如果没有传入任何的参数,默认自动创建第一页,页面大小为A4

doc = new PDF();

通过管道流创建名为test.pdf的文件

doc.pipe(fs.createWriteStream('test.pdf'));

写入内容

doc.text('test')

结束写入,生成文件

doc.end()

1、页面和文本设置

首先要解决的问题就是页面的设置了,在这里我们要求的是16:9的页面比例,而并非默认的A4纸的页面。

  • 创建对象,取消生成第一页

    doc = new PDF({ autoFirstPage: false });

  • 添加页面,设置页面大小

    doc.addPage({ margin: 10, size: [960,540] });

  • 设置中文字体,支持中文

    此时,需要有一个本地中文文件,在C:\Windows\Fonts中可以找到,这里使用的是微软雅黑

    doc.font('../WeiRuanYaHei-1.ttf');

  • 在输入文本前,创建文件流

    doc.pipe(fs.createWriteStream('test.pdf'));

  • 插入文本

    doc.text('Hello world!')
    doc.text('Hello world!', 100, 100) //设定文本位置,如果要上下移动,只需要使用您要移动的行数(默认为1)调用moveDownor moveUp方法。
    doc.lineGap(4);
    • 文本属性(同样的可以直接配置doc的属性作为全局属性)

      • lineBreak-设置为false禁用所有换行
      • width -文本应换行的宽度(默认情况下,页面宽度减去左右边距)
      • height -文本应剪切到的最大高度
      • ellipsis-太长时显示在文本末尾的字符。设置为true使用默认字符。
      • columns -文本流入的列数
      • columnGap -每列之间的间距(默认为1/4英寸)
      • indent -以PDF磅为单位(每英寸72英寸)的缩进量
      • paragraphGap -文本各段之间的间距
      • lineGap -每行文字之间的间距
      • wordSpacing -文本中每个单词之间的间距
      • characterSpacing -文本中每个字符之间的间距
      • fill-是否填写文字(true默认情况下)
      • stroke -是否描边文本
      • link -链接此文本的URL(创建注释的快捷方式)
      • underline -是否在文字下划线
      • strike -是否删除文字
      • oblique-是否倾斜文字(角度或度数true
      • baseline-文本相对于其插入点的垂直对齐方式(值为canvas textBaseline

      可以连续对文本进行操作

      doc.fillColor('green')
      .text(lorem.slice(0, 500), {
      width: 465,
      continued: true
      }).fillColor('red')
      .text(lorem.slice(500));

2、插入图片和图形

doc.image('image/img.png', x, y, {width: 100, height: 100}) // 插入图片,并设置图片大小
doc.rect(100, 100, 90, 100).dash(3, {space: 3}).fillAndStroke("#11487B"); // 在(100, 100)处,画一个90*100的方形,并用#11487B颜色填充,设置边框为曲线,space为线条长度。
  • image方法可以插入图片

  • rect可以画一个方形,可以使用dash使边框变为虚线,undash再变为实线。

  • fillAndStroke填充颜色,第二个参数为描边颜色

const PDF = require('pdfkit');
const fs = require('fs');
const doc = new PDF({ autoFirstPage: false });//creating a new PDF object
doc.lineGap(4);
doc.addPage({ margin: 10, size: [960,540] });
doc.font('./WeiRuanYaHei-1.ttf');
doc.pipe(fs.createWriteStream('test.pdf')); //creating a write stream
const x = 30
doc.rect(x, 85, 315, 145).dash(3, {space: 3}).strokeColor("#808080").stroke();
doc.image('./kit/banner.png', x+110, 110, { width: 90 });
doc.end()

上述代码生成结果:

pdfkit的更多相关文章

  1. 使用webdriver + phantomjs + pdfkit 生成PDF文件

    实例 #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on Dec 6, 2013 @author: Jay <smile665@gm ...

  2. pdfkit安装使用

    centos 安装pdfkit1.先安装pdfkit依赖包 wkhtmltopdf 安装方式: # wget http://download.gna.org/wkhtmltopdf/0.12/0.12 ...

  3. PDF之pdfkit

    说起pdf就想到了一款很适用的工具,那就是pdfkit,在前几天的项目中,有一个功能要实现,为了实现这一个功能,于是我大海茫茫中查询各种百科,不负众望的让我找到了我心怡的工具,想必也就是它了.好了废话 ...

  4. python之使用 wkhtmltopdf 和 pdfkit 批量加载html生成pdf,适用于博客备份和官网文档打包

    0. 1.参考 Python 爬虫:把廖雪峰教程转换成 PDF 电子书 https://github.com/lzjun567/crawler_html2pdf wkhtmltopdf 就是一个非常好 ...

  5. python pdfkit html转pdf响应式轮子 django例

    pip install pdfkit 本例用django做的请求,换成对应框架即可 此方法可将html页面转成pdf下载 #!/usr/bin/env python # coding:utf-8 im ...

  6. Centos7+安装python3+wkhtmltoPdf+pdfkit

    前言 这几天要做一个将HTML转化为PDF的小功能.期间经历了颇多的挫折,刚开始是通过java做的,后来发现java库做这个事情实在是效果不理想,前端做好了样式转完之后会出现很多问题.后来我想起来py ...

  7. 爬虫实战【3】Python-如何将html转化为pdf(PdfKit)

    前言 前面我们对博客园的文章进行了爬取,结果比较令人满意,可以一下子下载某个博主的所有文章了.但是,我们获取的只有文章中的文本内容,并且是没有排版的,看起来也比较费劲... 咋么办的?一个比较好的方法 ...

  8. [Tools] Convert SVG to a PDF in Node with PDFKit and SVG.js

    Given a epxress application and an svg template, we want to draw some text, date onto it and convert ...

  9. Python pdfkit

    序言 住在地下室的人,依然有仰望星空的权利. pdfkit python使用pdfkit中,如果使用pdfkit.fromurl 或者pdfkit.fromstring等,就会出现上述错误.而且如果你 ...

  10. Python模块之pdfkit

    1.安装依赖 pip install python-docx #Python下的Microsoft Word 2007工具 pip install PyPDF2 #Python下的PDF工具 pip ...

随机推荐

  1. VMvare+Ubuntu环境安装

    安装步骤参考:https://blog.csdn.net/stpeace/article/details/78598333 VMvare15秘钥:https://blog.csdn.net/felix ...

  2. MySQL数据库(三)—— 表相关操作(二)之约束条件、关联关系、复制表

    表相关操作(二)之约束条件.关联关系.复制表 一.约束条件  1.何为约束 除了数据类型以外额外添加的约束 2.约束条件的作用 为了保证数据的合法性,完整性 3.主要的约束条件 NOT NULL # ...

  3. Android Telephony分析(七) ---- 接口扩展(异步转同步)

    本文是基于上一篇<Android Telephony分析(六) —- 接口扩展(实践篇)>来写的.上一篇介绍的接口扩展的方法需要实现两部分代码:1. 从APP至RIL,发送请求:2. 从R ...

  4. CentOS7添加永久静态路由

    CentOS7永久静态路由需要写到 /etc/sysconfig/network-scripts/route-****** 文件中,故在/etc/sysconfig/network-scripts/下 ...

  5. shell脚本批量监控主机磁盘信息

    写一个配置文件保存被监控主机SSH连接信息,格式:IP User Port [root@Test ~]# cat host 10.10.10.10 root 22 10.10.10.11 root 2 ...

  6. 根据不同运行环境配置和组织node.js应用

    安装node-config模块 npm install config --save || yarn add config mkidr config // 创建config文件夹 在config文件夹下 ...

  7. null == null 或者 [] == [] 或者{} == {} 或者alert(1|| 2) 或者alert(1&& 2) 结果及原理

    相信面试的小伙伴们都会遇到此头大的问题,是不是很想骂一句面试官:你白痴啊,鬼都用不着的东西拿来问,你还别说,这些看似用不着的东西却包含着最基础的原理,那我们来理一理. 1.alert(1||2)和 a ...

  8. 如何在react中实现一个倒计时组件

    倒计时组件 import React, { Component } from 'react' import $ from 'jquery' import "../../css/spellTE ...

  9. 我的vscode配置 利用Settings Sync一键安装

    { "prettier.eslintIntegration": true, // 点击保存时,根据 eslint 规则自定修复,同时集成 prettier 到 eslint 中 & ...

  10. javascript基础入门之js中的结构分支与循环语句

    javascript基础入门之js中的结构分支与循环语句 程序的结构①顺序结构:自上而下:②选择(分支)结构:多条路径,根据不同的条件,只执行其中一个:③循环结构:重复某些代码④配合特定的语句实现选择 ...