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配置

<dependency>

<groupId>com.deepoove</groupId>

<artifactId>poi-tl</artifactId>

<version>1.9.1</version>

</dependency>

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi-ooxml</artifactId>

<version>4.1.2</version>

</dependency>

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi-ooxml-schemas</artifactId>

<version>4.1.2</version>

</dependency>

注意:使用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配置

<dependency>

<groupId>e-iceblue</groupId>

<artifactId>spire.doc.free</artifactId>

<version>3.9.0</version>

</dependency>

<repositories>

<repository>

<id>com.e-iceblue</id>

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

</repository>

</repositories>

将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文件,并且预览。

<div>

<div class="card-preview">

<embed :src="ePrescriptionUrl" class="pdf" type="application/pdf">

</div>

利用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)

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐