Web前端开发网

fly63.com

首页 资源 工具 文章 教程 栏目
  • 在线搜索
  • 文章标签
  • 广告合作
  • 赞助一下
  • 关于我们
资源推荐
豆包AI
字节跳动旗下 AI 智能助手
美图设计室
AI智能一键生成海报,免费平面设计
星月写作
人工智能写作助手
AiPPT
全智能AI一键生成 PPT
沁言学术
AI智能学术研究平台,覆盖科研全流程服务
必火AI
数字人一站式创作平台
周易国学网
基于周易、八字、紫微斗数等传统国学文化
码上飞(CodeFlying)
用一句话自动生成小程序、APP、H5网页应用
蜂小推
不扣量的项目推广平台
AI应用助手
一站式AI工具平台,为工作和学习提供智能解决方案

资源分类

AI智能 酷站推荐 招聘/兼职 框架/库 模块/管理 移动端UI框架 Web-UI框架 Js插件 Jquery插件 CSS相关 IDE环境 在线工具 图形动效 游戏框架 node相关 调试/测试 在线学习 社区/论坛 博客/团队 前端素材 图标/图库 建站资源 设计/灵感 IT资讯
网站收录 / 问题反馈

DomPDF.js

分享
复制链接
新浪微博
QQ 好友

扫一扫分享

网站地址:https://dompdfjs.lisky.com.cn
GitHub:https://github.com/lmn1919/dompdf.js
描述信息:将HTML转化成可编辑、非图片式的PDF
访问官网
GitHub
一个js库,可以将HTML转化成可编辑、非图片式、高清晰度、小体积、可打印的PDF。

该脚本允许您直接在用户浏览器上将网页或部分网页生成为可编辑、非图片式、可打印的 pdf。由于生成是基于 DOM 的,因此可能与实际表现不会 100% 一致。如果是复杂的pdf生成需求,不建议使用。


它是如何工作的

该脚本基于html2canvas和jspdf,与以往将 html 页面通过 html2canvas 渲染为图片,再通过 jspdf 将图片生成 pdf 文件不同,该脚本通过读取 DOM 和应用于元素的不同样式,改造了 html2canvas 的 canvas-renderer 文件,调用 jspdf 的方法生成 pdf 文件。 所以他有以下优势:

  1. 不需要服务器端的任何渲染,因为整个 pdf 是在客户端浏览器上创建的。
  2. 生成的是真正的 pdf 文件,而不是图片式的,这样生成的 pdf 质量更高,您也可以编辑和打印生成 pdf 文件。
  3. 更小的 pdf 文件体积

当然,它也有一些缺点:

  1. 由于是基于 DOM 的,所以可能与实际表现不会 100% 一致。
  2. 有的 css 属性还没有被支持,查看支持的 css 属性。
  3. 不适合在 nodejs 中使用。
  4. 有的样式可能无法被正确渲染,比如:text-shadow


已实现功能

功能状态说明
文本渲染✅支持基础文本内容渲染,font-family,font-size,font-style,font-variant,color 等,支持文字描边,不支持文字阴影
图片渲染✅支持网络图片,base64 图片,svg 图片
边框✅支持 border-width,border-color,border-style,border-radius,暂时只实现了实线边框
背景✅支持背景颜色,背景图片,背景渐变
canvas✅支持渲染 canvas
svg✅支持渲染 svg
阴影渲染✅使用 foreignObjectRendering,支持边框阴影渲染
渐变渲染✅使用 foreignObjectRendering,支持背景渐变渲染
iframe❌支持渲染 iframe

foreignObjectRendering 使用

在 dom 十分复杂,或者 pdf 无法绘制的情况(比如:复杂的表格,边框阴影,渐变等),可以考虑使用 foreignObjectRendering。 给要渲染的元素添加 foreignObjectRendering 属性,就可以通过 svg 的 foreignObject 将它渲染成一张背景图插入到 pdf 文件中。

但是,由于 foreignObject 元素的渲染依赖于浏览器的实现,因此在不同的浏览器中可能会有不同的表现。 所以,在使用 foreignObjectRendering 时,需要注意以下事项:

  1. foreignObject 元素的渲染依赖于浏览器的实现,因此在不同的浏览器中可能会有不同的表现。
  2. IE 浏览器完全不支持,推荐在 chrome 和 firefox,edge 中使用。
  3. 生成的图片会导致 pdf 文件体积变大。

示例

<div foreignObjectRendering>
    <div
       
    >
        这是一个div元素
    </div>
</div>

浏览器兼容性

该库应该可以在以下浏览器上正常工作(需要 Promise polyfill):

  • Firefox 3.5+
  • Google Chrome
  • Opera 12+
  • IE9+
  • Safari 6+


使用方法

dompdf 库使用 Promise 并期望它们在全局上下文中可用。如果您希望支持不原生支持 Promise 的较旧浏览器,请在引入 dompdf 之前包含一个 polyfill,比如 es6-promise。

安装:

 npm install dompdf.js --save

CDN引入:

<script src="https://cdn.jsdelivr.net/npm/dompdf.js@1.0.4/dist/dompdf.min.js"></script>   

基础用法

import dompdf from 'dompdf.js';
dompdf(document.querySelector("#capture"), {
    useCORS: true //是否允许跨域
    })
    .then(function (blob) {
        const url = URL.createObjectURL(blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = 'example.pdf';
        document.body.appendChild(a);
        a.click();
    })
    .catch(function (err) {
        console.log(err, 'err');
    });

乱码问题-字体导入支持

由于jspdf只支持英文,所以其他语言会出现乱码的问题,需要导入对应的字体文件来解决,如果需要自定义字体,在这里将字体 tff 文件转化成 base64 格式的 js 文件,中文字体推荐使用思源黑体,体积较小。 在代码中引入该文件即可。

    <script type="text/javascript" src="./SourceHanSansSC-Normal-Min-normal.js"></script>
    dompdf(document.querySelector("#capture"), {
    useCORS: true, //是否允许跨域
    fontConfig: {
                    fontFamily: 'SourceHanSansSC-Normal-Min',
                    fontBase64: window.fontBase64,
                },
    })
    .then(function (blob) {
        const url = URL.createObjectURL(blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = 'example.pdf';
        document.body.appendChild(a);
        a.click();
    })
    .catch(function (err) {
        console.log(err, 'err');
    });

构建

克隆 git 仓库:

$ git clone git@github.com:lmn1919/dompdf.js.git

安装依赖:

$ npm install

构建浏览器包:

$ npm run build

仅供个人学习参考/导航指引使用,具体请以第三方网站说明为准,本站不提供任何专业建议。如果地址失效或描述有误,请联系站长反馈~感谢您的理解与支持!

链接: https://fly63.com/nav/4813

更多»
热门资源
swiper
目前应用较广泛的移动端网页触摸内容滑动js插件
官网
GitHub
layer
layer是一款口碑极佳的web弹层组件
点击进入
GitHub
iScroll.js
IScroll是移动页面上被使用的一款仿系统滚动插件。
官网
GitHub
wangEditor
基于javascript和css开发的 Web富文本编辑器
官网
GitHub
ueditor
由百度web前端研发部开发所见即所得富文本web编辑器
官网
GitHub
highlight
Highlight.js 是一个用 JavaScript 写的代码高亮插件,在客户端和服务端都能工作。
官网
GitHub
UglifyJS
一个js 解释器、最小化器、压缩器、美化器工具集
官网
GitHub
lozad.js
高性能,轻量级,可配置的懒加载图片工具
官网
GitHub
Sortable.js
简单灵活的 JavaScript 拖放排序插件
官网
GitHub
validate.js
表单提供了强大的验证功能,让客户端表单验证变得更简单
官网
GitHub
Draggin.js
一款兼容移动手机的js拖拽插件
官网
GitHub
lazysizes.js
响应式图像延迟加载JS插件【懒加载】
官网
GitHub
类似于DomPDF.js的资源
PPTist
一个用于创建用户界面的声明性 JavaScript 库
官网
GitHub
uppy
模块化文件上传组件
官网
GitHub
CommentCoreLibrary
一套基于JavaScript构建的弹幕控制器
官网
GitHub
join-monster
GraphQL和SQL之间的查询计划和批处理数据获取
官网
GitHub
rome
纯js可定制的跨浏览器日期时间选择器插件
官网
GitHub
Kalendae
基于JavaScript的日期选择控件和日历组件
点击进入
GitHub
Zod
原生支持 TypeScript 的数据校验库
官网
GitHub
final-form
轻松创建漂亮且易于表单的库
官网
GitHub
目录

手机扫一扫预览

》
分享组件加载中...
首页 技术导航 在线工具 技术文章 教程资源 前端标签 AI工具集 前端库/框架 实用工具箱 广告合作 关于我们

Copyright © 2018 Web前端开发网 All Rights Reserved. 提供免费在线工具、编程学习资源(教程/框架/库),内容以学习参考为主,助您解决各类实际问题,快速提升专业能力。