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使用模板打印文档记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu14.04下Mongodb数
- 下一篇: Java学习笔记5-2——多线程