pdfmake运用笔记

本文介绍了pdfmake,一个基于JavaScript的客户端PDF打印解决方案。详细记录了如何利用pdfmake生成PDF,包括设置字体、添加中文字体以及转换字体文件为base64编码的过程,并展示了最终代码实现效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pdfmake运用笔记

pdfmake 是基于客户端服务器的 PDF 打印解决方案,完全基于 JavaScript 开发。提供强大的排版引擎

pdfmake官网:http://pdfmake.org/#/

pdfmake资源地址

<script src="http://cdn.bootcss.com/pdfmake/0.1.20/pdfmake.js"/>
<script src="http://cdn.bootcss.com/pdfmake/0.1.20/pdfmake.min.js"/>
<script src="http://cdn.bootcss.com/pdfmake/0.1.20/vfs_fonts.js"/>

记一下使用pdfmake生成pdf的实现方法。

官方提供3个文件pdfmake.js、pdfmake.min.js、vfs_fonts.js。

首先要设置pdf字体,官方提供的文件只有英文字体,需手动添加中文字体。

字体就添加了一个微软雅黑的普通字体,加粗和斜体没有添加

//pdf字体
        pdfMake.fonts = {
            Roboto : {
                normal : 'Roboto-Regular.ttf',
                bold : 'Roboto-Medium.ttf',
                italics : 'Roboto-Italic.ttf',
                bolditalics : 'Roboto-Italic.ttf'
            },
            微软雅黑 : {
                normal : 'msyh.ttf',
                bold : 'msyh.ttf',
                italics : 'msyh.ttf',
                bolditalics : 'msyh.ttf',
            }
        };

字体文件需储存在vfs_fonts.js文件中,需将字体文件转base64编码才可以添加
通过java将.ttf字体文件转base64编码

File file = new File("X:\\XXX.ttf");
FileInputStream is = null;
try {
    is = new FileInputStream(file);
    //输入流转字节数组
    data = InputStreamToByte(is);
} catch (IOException e) {
// TODO Auto-generated catch block
    e.printStackTrace();
}
// 对字节数组Base64编码  
BASE64Encoder encoder = new BASE64Encoder();  
String base64 = encoder.encode(data);

输入流转byte数组

private static byte[] InputStreamToByte(InputStream is) throws IOException {
        ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int ch;
        while ((ch = is.read(buffer)) != -1) {
            bytestream.write(buffer, 0, ch);
        }
        byte data[] = bytestream.toByteArray();
        bytestream.close();
        return data;
    }

pdf内容格式

var dd = {
    content: [
        'Hello word',
        {
        text: 'Hello word',
        style: 'one',
        },
        {
        text: 'Hello \nword'
        },{
        //分隔符
        columns: [
                {
                    width: 90,
                    text: '你好世界'
                },
                {
                    width: '*',
                    text: '你好世界'
                },
                {
                    columns:[
                        {text:'Hello word'},
                        {text:'你好世界',fontSize: 20}
                    ]
                },
            ]
        },
        //表格
        {
            table: {
                body: [
                    ['word','word','word','word'],
                    [{text:'word',colSpan:2},'','',{text:'word',rowSpan:3}],
                    [{text:'word',colSpan:2,rowSpan:2},'','word',''],
                    ['','','word',''],
                ]
            }
        },
        {
            ol:[
                'Hello word',
                '你好世界',
                {
                    ul: [
                        'Hello word',
                        '你好世界'
                    ]
                },
                'Hello word'
            ],
        },{
        //margin:[left,up,right,down]
            text:'Hello word 你好世界',
            margin:[100,100,100,100],
        }
    ],
    styles: {
        one: {
            fontSize: 24,
            alignment: 'center'
        }
    }
    defaultStyle : {
        font : '微软雅黑'
    }
};

最后可以将pdf打印或者下载

//pdf打印
pdfMake.createPdf(dd).print();
//pdf下载
pdfMake.createPdf(dd).download();

最终代码效果图

pdfmake代码效果图

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值