最近公司有个项目,前端代码是别人写好的,需要完成导出为pdf功能,前端内容是包括分析图表在内的数据库数据展示,用vue写的,我要怎么用代码实现pdf预览和导出,在网上找了几个例子,要么是freemarker用html制作ftl模板导出,因为是vue写的,我没法获得html代码,要么是编辑form表单导出,form表单方式似乎只适用于单张表单形式,不适用于数据库整体数据展示。请问怎么用java代码实现vue页面的pdf导出?需要一个demo
vue也是有导出PDF的功能的,既然你拿不到人家的东西,那就前端导出
就拿我最近做的银行项目,有个打印功能,我先简单说一下思路,前端可以处理,后端也可以处理,原理一样都是转base64,在Vue中一般会在代码中写预览或者分页,内容渲染是写在html中,html获取到vue中分割的数据即可,谷歌浏览器会把html转成pdf可以导出,也可以转图片或者盖章再打印。总体是这样,希望对你有帮助!
我有个很好的点子。
既然前端部分实现了全部功能,你java不需要实现,你只需要把它包裹下即可!
比如用iframe。
不知道这个你能不能用
这个只能前端做
加个按钮
<el-button type="primary" v-print="printObj">打 印</el-button>
data里面
printObj: {
id: "demo", // 这里是要打印元素的ID
popTitle: '', // 打印的标题
extraCss: '', // 打印可引入外部的一个 css 文件
extraHead: "" // 打印头部文字
}
直接用打印的方法,打印里面有个导出pdf
可以使用freemarker自己查询数据库信息,生成pdf文件,供前台下载!
使用到的依赖如下:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.26-incubating</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
vue写的最后编译后也是html和js,只要找到那个页面的根节点,就可以按你后端的方式来处理
你这个肯定要在前端解决的,因为有一些图表啊,不光只是用后端代码取数据那么简单,这篇文章你可以了解一些,感觉能帮到你 https://blog.csdn.net/pratise/article/details/79249943
可以看看有没有什么插件,可以结合进行导出。
可以把vue转成html,转pdf还要用wkhtmltopdf。还有个方式,就是用ftl模板
查看一下浏览器应该内置了相关的api,查找相关文档试试
Vue页面上实现PDF导出
下载包 npm i vue-to-pdf --save
在main.js/App.js中加入引用:
import vueToPdf from 'vue-to-pdf';
Vue.use(vueToPdf);
你是想用java直接生成pdf然后提供给前段下载么?如果是这样的话,可以了解下这个
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
就是个java用的pfd编辑器,就是手动创建pdf文件,用代码往上面写东西,可以使用模板也可以纯手写,效果不错,就是写起来有点恶心,哈哈哈