官方文档

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. 记录百度编辑器bug(在编辑框输入光标到达页面最底部时,功能区块会悬浮在页面最顶部并且与编辑框分离)

    解决方案: //加入这段CSS#edui1_toolbarbox { position: relative !important; }

  2. Quartz CronTrigger 整配置说明

    Quartz cron 表达式的格式向下支持到秒级别的计划,而 UNIX cron 计划仅支持至分钟级.  Quartz用cron 表达式存放执行计划,引用了cron表达式的CronTrigger在计 ...

  3. Samcompu Loves Water

    题目背景 Samcompu拥有大量的"水"资源!! 题目描述 Samcompu需要制定一个水计划.这个计划的主要目的就是为了避开老师监视的时间来水. 老师在中途会离开机房T次,第i ...

  4. 在vue中获取不到canvas对象? 两种解决办法。

    1. mounted 钩子函数 初次肯定获取到id 2. 如果canvas父级用到了v-if 请改成v-show ,vue Dom节点 重新渲染导致methods 方法获取不到对象.

  5. sanic之websocket路由

    在某些时候,需要建立websocket路由,来建立长链接,来实时传输数据,就比如一些聊天应用,就有实时音视频,需要实时传出状态 在sanic框架中支持两种websocket路由方式,有一种是再app中 ...

  6. D3.js 弦生成器(V3版本)

    弦生成器(Chord Generator)   弦生成器(Chord Generator)根据两段弧来绘制弦,共有五个访问器,分别为source().target().radius().startAn ...

  7. (Struts2学习系列五)Struts2默认action

    当我们访问项目下一个不存在的Action的时候,页面就会报错,404找不到资源,这样对用户来说是非常不友好的,所以我们设置一个默认的Action,当找不到对应Action的时候,就会跳转到默认Acti ...

  8. Jenkins 搭建 .NET FrameWork 持续集成环境

    本文不赘述如何安装 Jenkins,如有需要请看之前文章,这里我们主要搭建 .Net 环境.本文是在 Windows 环境下安装的 Jenkins 进行操作     一.安装所需环境     这里我们 ...

  9. 【JZOJ6285】飘雪圣域

    description analysis 从求联通块出发根本没做法,于是考虑连通块里面的边 对于一个询问\([l,r]\),一条边的左端点\(≥l\)且右端点\(≤r\)才在这个区间的点之间 于是对于 ...

  10. Delphi locate函数

    使用ADO等数据控件的时候,经常会用到 locate 函数,在结果数据集中查询和定位,下面介绍一下: (一) function Locate(const KeyFields: String; cons ...