日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java使用模板打印文档记录

發布時間:2023/12/10 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java使用模板打印文档记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? 前段時間做了一個打印文檔的功能,沒有接觸過,開始也是走了許多冤枉路,特此將打印word文檔的簡單實現的過程記錄下來。

? ? ?首先,第一步,我們先創建一個模板,新建一個word文檔,命名為,填入我們想要打印的內容。

將其另存為xml格式

Notepad是無法格式化此文件的,我們可以用idea來打開他,并格式化。

這里就是我們需要傳入的值的位置,那么,關于word的xml文檔標簽的含義,可以去看

https://blog.csdn.net/u010371710/article/details/51966236/

<w:t>表示真正的文本內容

<w:r>表示關系,段落中以相連續的中文或英文字符字符串,作為開始和結束。目的就是要把一個段落中的中英文字符區分開來。

<w:tbl></w:tb1> 表格標簽

<w:tc></w:tc> 單元格

?

在需要我們賦予數據的地方寫入占位表達式${value!}

這里的!比較官方的意思記不住了,大概為當傳入的數據為空時,便賦予為空。假如不寫!,當我們的數據有空值的時候,你是無法打印出一個正常的word文檔的,反正我是無法打開他。。。,當然還有其他的方式來防止數據為空出現異常,如下:

<#if (testList)??> 判斷數據是否為空,和if作用一樣? ?單數據等同于 !

</#if>

假如數據附帶有其他組合件,則可以使用<#if>讓不需要的樣式和文字隱藏掉

為了簡便我選擇使用!。

在我們編輯模板的時候,最好使用表格的方式來控制整個文檔的樣式,防止假如某一個數據量很大,導致整個模板的樣式都亂掉,而另一個好處就是是使用表格的形式來進行樣式控制,我們能對集合類的數據放置的樣式自動增加或減少所在區域的長度,防止數據重疊或者空出一大片白色區域來,顯得整個文檔更緊湊。

友情提示:最好提前將模板改好再存為xml,否則在加入占位表達式后再修改可能會引起一些些問題。比如樣式亂掉。

這里演示使用的一個簡單的表格,為了演示,用虛線展示不需要的格子,那實際在項目中不可能會這么簡單,可能會包含多種數據、圖片、加入圖片的組合樣式等等,那我們可以在表格中嵌入子表格來完成更多的樣式布局排版。

構建數據

Map params=new HashMap();

params.put("school","一個不知名的學校");

params.put("name","王五");

params.put("sex","女");

params.put("age","18");

params.put("chinese","59");

params.put("math","48");

搜索放在項目中的模板,一般位置是固定的

String templateName="test.xml";

String fileName="d:/test.doc";

?

String templatePath = this.getClass().getClassLoader().getResource(".").getPath();

String proName="ProSys";

int index=templatePath.indexOf(proName);

templatePath=templatePath.substring(0,index+proName.length())+"/target/classes/";

打印

這里用的是freemarker的包

import freemarker.template.Configuration;

import freemarker.template.Template;

?

Configuration configuration = new Configuration();

configuration.setDefaultEncoding("UTF-8");

try {

??? configuration.setDirectoryForTemplateLoading(new File(templatePath));

??? Template templet = null;

??? templet = configuration.getTemplate(templateName, "UTF-8");

??? File file=new File(fileName);

??? if(!file.exists()){

??????? file.createNewFile();

??? }

??? OutputStreamWriter writer=new OutputStreamWriter(new FileOutputStream(file));

??? templet.process(params,writer);

} catch (IOException e) {

??? e.printStackTrace();

}catch (Exception e){

??? e.printStackTrace();

}

打印效果為

多條數據,格式為

?

<#list testList as test>

?

${test.name!}

?

?

</#list>

?

總結

以上是生活随笔為你收集整理的Java使用模板打印文档记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。