pdfkit
时间:2019-10-15
本文章向大家介绍pdfkit,主要包括pdfkit使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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()
上述代码生成结果:
原文地址:https://www.cnblogs.com/ZSMblog/p/11677152.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- IP 和 TCP 抓包分析实验
- 一些恶心的代码片段
- 学算法还能指导找对象?是的,这就是大名鼎鼎的稳定婚姻算法
- 基于SCF实现批量备份Elasticsearch索引到COS
- Prometheus Operator 常用指标
- Prometheus 常用 PromQL 语句
- 小游戏互动能力升级,获取未注册好友名单,定向分享
- 这年头还不会SpringBoot?
- PB级大规模Elasticsearch集群运维与调优实践
- 长假慢学,用TensorFlow做了个AI游戏
- 微服务平台之API授权
- 一些让人恶心的代码片段
- 一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!
- 还在用Swagger(丝袜哥)生成接口文档?我推荐你试试它...
- 技术分享 | 企业版监控工具 MEM 初探