poi_tl生成word模板,并且转为pdf,前端界面预览pdf

word模板样式

1.文本:{{var}}

直接可以利用map集合来向里面存储数据,展示word模板中

2.图片:{{@var}}

将base64加密的图片利用pictures.ofBase64转为需要的图片格式

PictureRenderData pictureRenderDataTrialDocName = Pictures.ofBase64(doctorBasicTrialDocName.getDigitalSign(),PictureType.PNG).size(70,35).create();

java 后端 渲染word模板主要代码:

//模板路径

String templateUrl = templateFilePath + "电子处方.docx";

//渲染

XWPFTemplate template = null;

try{

template = XWPFTemplate.compile(templateUrl).render(map);

}

catch (ResolverException e)

{

e.printStackTrace();

}

//利用文件流输出文件

FileOutputStream fileOutputStream = new FileOutputStream("output.docx"); template.write(fileOutputStream);

pom.xml配置

com.deepoove

poi-tl

1.9.1

org.apache.poi

poi-ooxml

4.1.2

org.apache.poi

poi-ooxml-schemas

4.1.2

注意:使用poi-tl的时候,poi-ooxml的版本为4.1.2,poi-ooxml-schemas版本为4.1.2,否则找不到所需要的class文件

word文档转为pdf文档主要代码:

//加载word文件

Document document = new Document();

document.loadFromFile("output.docx");

//保存为PDF格式

document.saveToFile("toPDF.pdf", FileFormat.PDF);

pom.xml配置

e-iceblue

spire.doc.free

3.9.0

com.e-iceblue

http://repo.e-iceblue.cn/repository/maven-public/

将pdf转为流,前端以流的形式接收

FileInputStream fileInputStream = new FileInputStream("toPDF.pdf");

BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(byteArrayOutputStream);

byte[] buffer = new byte[1024]; int len = bufferedInputStream.read(buffer);

while(len != -1)

{

bufferedOutputStream.write(buffer, 0, len);

len = bufferedInputStream.read(buffer);

}

bufferedOutputStream.flush();

byte[] bytes = byteArrayOutputStream.toByteArray(); response.setContentType("application/octet-stream");

response.setCharacterEncoding("utf-8");

response.setHeader("Content-disposition","attachment;");

OutputStream out = response.getOutputStream();

out.write(bytes);

out.flush();

out.close();

fileOutputStream.close();

fileInputStream.close();

bufferedInputStream.close();

byteArrayOutputStream.close();

bufferedOutputStream.close();

注意:每个生成的流都要关闭

前端界面主要代码:

利用后端传给前端的流,生成pdf文件,并且预览。

利用get请求,responseType设置为‘blob’

getFileStream(url)

{

return new Promise((resolve, reject) => {

axios({ url, method: 'get', responseType: 'blob', }) .

then(res => {

resolve(res)

})

.catch(err => {

reject(err.data) })

})

}

this.ePrescriptionUrl 为viewer.html文件存放的目录。

一般情况下都是放到pubilc目录下,路径则为

'/pdf/web/viewer.html?file=' + encodeURIComponent(urlPdf)

我是放在static目录下的,路径则为

'/static/pdf/web/viewer.html?file=' + encodeURIComponent(urlPdf)

pdf.js下载地址:https://mozilla.github.io/pdf.js/  PDF.js (mozilla.github.io)

let res = await this.$getFileStream(UPLLOAD_URL + 'template/ePTemplate/' + this.thisRows.prescribeNo)

let urlPdf = window.URL.createObjectURL(new Blob([res.data]))

this.ePrescriptionUrl = '/static/pdf/web/viewer.html?file=' + encodeURIComponent(urlPdf)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部