poi_tl生成word模板,并且转为pdf,前端界面预览pdf
word模板样式1.文本:{{var}}直接可以利用map集合来向里面存储数据,展示word模板中2.图片:{{@var}}将base64加密的图片利用pictures.ofBase64转为需要的图片格式PictureRenderData pictureRenderDataTrialDocName = Pictures.ofBase64(doctorBasicTrialDocName.getDig
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)
更多推荐
所有评论(0)