官方文档

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. 常用内置模块(四)——subprocess、re

    常用模块(四) 一.subprocess模块 1.subprocess为子流程模块,用于执行系统命令,该模块在Python全栈开发中不常用 2.常用方法 run 返回一个表示执行结果的对象 call ...

  2. redis集群创建时报错:Sorry, can't connect to node

    1.redis集群创建时报错:Sorry, can't connect to node ip,端口等都配置正确的话,还需要将redis.conf文件中的密码注释掉    # requirepass 1 ...

  3. Android Telephony分析(六) ---- 接口扩展(实践篇)

    本文将结合前面五篇文章所讲解的知识,综合起来,实现一个接口扩展的功能.如果还没有阅读过前面五篇文章的内容,请先阅读:<Android Telephony分析(一) — Phone详解 >& ...

  4. Organizing Containers of Balls

    题目 David has several containers, each with a number of balls in it. He has just enough containers to ...

  5. jquery插件小集合

    一.滑动轮播插件Swiper Swiper官网http://www.swiper.com.cn/, 这款插件移动端,pc端均试用 二.jquery-tmpl----让你从拼接字符串中解放出来 官方下载 ...

  6. apache+tomcat配置负载均衡,实现http与websocket接口分压

    一.应用场景 在生产环境中,应用服务器(此文以tomcat为例)不免面临高访问量的压力,相比而言web服务器(此文以apache为例)能够承担更大的并发量.Apache本身带有一些模块,可以完成对应用 ...

  7. Mybatis_环境搭建

    1.配置pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  8. Loop Sql

    -- Numeric FOR loop -- set serveroutput on -->> do not use in TOAD -- DECLARE k ; BEGIN .. LOO ...

  9. 记一次Mysql占用内存过高的优化过程

    一.环境说明: 操作系统:CentOS 6.5 x86_64 数据库:Mysql 5.6.22 服务器:阿里云VPS,32G Mem,0 swap 二.问题情况: 1.某日发现公司线上系统的Mysql ...

  10. winfrom设置webBrowser框架默认的IE内核版本

    要实现设置webBrowser框架默认的IE内核版本的功能需要三个方法 1:修改注册表信息来兼容当前程序 /// <summary> /// 修改注册表信息来兼容当前程序 /// /// ...