通过免费 JavaScript API 创建 PDF 文件

开源纯 JavaScript 库支持 Node 和 Web 浏览器的 PDF 文档生成和操作。

PDFMake 是一个非常强大的开源 JavaScript 库,它使软件开发人员能够使用 JavaScript 命令处理与 PDF 文档生成和操作相关的任务。该库的优点在于您可以使用文档定义对象格式轻松指定用于 PDF 生成的数据。

PDFmake 库包含对与 PDF 文档处理相关的几个重要功能的支持,例如向 PDF 文档添加图像和文本内容、换行、文本对齐、插入和管理表格、使用样式、添加页眉和页脚、页面方向和边距支持、字体和图形嵌入、内容生成表、分页符支持等等。

该库非常稳定,可以在客户端和服务器端轻松使用。它可以在浏览器和 Node.js 中运行。它包括对多种流行浏览器的支持,例如 Internet Explorer 10+、Edge 12+、Firefox、Chrome、Opera、Safari 等。

Previous Next

PDFMake 入门

PDFMake 在 npm 上可用,您可以轻松下载并安装在您的机器上。请使用以下命令进行顺利安装。

使用 bower 安装 PDFMake

bower install pdfmake

使用 JavaScript 库生成 PDF 文件

开源 JavaScript 库 PDFMake 使软件程序员可以轻松地使用 JavaScript 代码在他们自己的应用程序中生成 PDF 文档。该库为处理 PDF 文件提供了一套完整的功能,例如选择具有大小、颜色和格式的字体类型、添加新页面、插入列、添加和应用样式、插入表格、删除不需要的页面等等更多的。

将页眉和页脚添加到 PDF 文件

页眉和页脚是 PDF 文档非常有用的部分,可用于包含用户希望出现在文档每一页上的那部分内容,例如作者姓名、文档标题、页码、徽标等。 JavaScript 库 PDFMake 为向 PDF 文档添加和修改页眉和页脚提供了完整的支持。它支持添加重复页眉/页脚、在页眉/页脚中插入图像、添加页码等功能。

通过 JavaScript 将页眉和页脚转换为 PDF

 var docDefinition = {
 header: 'simple text',
 footer: {
  columns: [
   'Left part',
   { text: 'Right part', alignment: 'right' }
  ]
 },
 content: (...)
};

将图像插入 PDF 文件

开源 JavaScript 库 PDFMake 为使用 JavaScript 命令在 PDF 文件中添加和修改图像提供了完整的支持。该库提供了设置图像宽度和高度、在矩形内拟合图像、通过 URL 调用图像、按比例缩放图像以及图像拉伸的功能。如果你想在多个节点中使用同一张图片,你需要把它放在图片字典中,然后直接调用它的名字。

通过 JavaScript 将图像添加到 PDF

 var docDefinition = {
 content: [
  {
   // you'll most often use dataURI images on the browser side
   // if no width/height/fit is provided, the original size will be used
   image: 'data:image/jpeg;base64,...encodedContent...'
  },
  {
   // if you specify width, image will scale proportionally
   image: 'data:image/jpeg;base64,...encodedContent...',
   width: 150
  },
  {
   // if you specify both width and height - image will be stretched
   image: 'data:image/jpeg;base64,...encodedContent...',
   width: 150,
   height: 150
  },
  {
   // you can also fit the image inside a rectangle
   image: 'data:image/jpeg;base64,...encodedContent...',
   fit: [100, 100]
  },
  {
   // if you reuse the same image in multiple nodes,
   // you should put it to to images dictionary and reference it by name
   image: 'mySuperImage'
  },
  {
   image: 'myImageDictionary/image1.jpg'
  },
  {
   // in browser is supported loading images via url from reference by name in images
   image: 'snow'
  },
  {
   image: 'strawberries'
  },
 ],
 images: {
  mySuperImage: 'data:image/jpeg;base64,...content...',
  snow: 'https://picsum.photos/seed/picsum/200/300',
  strawberries: {
   url: 'https://picsum.photos/id/1080/367/267'
   headers: {
    myheader: '123',
    myotherheader: 'abc',
   }
  }
 }
};

页面方向和边距支持

免费的 JavaScript 库 PDFMake 支持在 JavaScript 应用程序中设置页面大小、页面方向以及页边距。要设置页面大小,您需要提供新页面的宽度和高度。默认情况下,该库使用纵向页面方向,但可以使用单行代码轻松将其设置为横向。它还支持设置页边距并允许用户动态控制分页符。它支持左、上、右、下以及水平和垂直边距。

为编译器构建库

 
var dd = {
	content: [
		{
			stack: [
				'This header has both top and bottom margins defined',
				{text: 'This is a subheader', style: 'subheader'},
			],
			style: 'header'
		},
		{
			text: [
				'Margins have slightly different behavior than other layout properties. They are not inherited, unlike anything else. They\'re applied only to those nodes which explicitly ',
				'set margin or style property.\n',
			]
		},
		{
			text: 'This paragraph (consisting of a single line) directly sets top and bottom margin to 20',
			margin: [0, 20],
		},
		{
			stack: [
				{text: [
						'This line begins a stack of paragraphs. The whole stack uses a ',
						{text: 'superMargin', italics: true},
						' style (with margin and fontSize properties).',
					]
				},
				{text: ['When you look at the', {text: ' document definition', italics: true}, ', you will notice that fontSize is inherited by all paragraphs inside the stack.']},
				'Margin however is only applied once (to the whole stack).'
			],
			style: 'superMargin'
		},
	],
	styles: {
		header: {
			fontSize: 18,
			bold: true,
			alignment: 'right',
			margin: [0, 190, 0, 80]
		},
		subheader: {
			fontSize: 14
		},
		superMargin: {
			margin: [20, 0, 40, 0],
			fontSize: 15
		}
	}
}

通过 JavaScript 将表格插入 PDF

开源库 PDFMake 使计算机程序员能够在 PDF 文件中插入和更新表格。该库支持处理表格的行列和单元格的各种高级功能。它包括对表格对齐、样式表格边框、以百分比定义宽度、旋转表格、在新页面上定义表格标题行等的支持。

为编译器构建库

 var docDefinition = {
 content: [
  {
   layout: 'lightHorizontalLines', // optional
   table: {
    // headers are automatically repeated if the table spans over multiple pages
    // you can declare how many rows should be treated as headers
    headerRows: 1,
    widths: [ '*', 'auto', 100, '*' ],
    body: [
     [ 'First', 'Second', 'Third', 'The last one' ],
     [ 'Value 1', 'Value 2', 'Value 3', 'Value 4' ],
     [ { text: 'Bold value', bold: true }, 'Val 2', 'Val 3', 'Val 4' ]
    ]
   }
  }
 ]
};
pdfMake.createPdf(docDefinition, tableLayouts, fonts, vfs)
// tableLayouts, fonts and vfs are all optional - falsy values will cause
 中国人