package cn.flightfeather.supervision.common.pdf
|
|
import org.apache.poi.util.Units
|
import org.apache.poi.xwpf.usermodel.XWPFDocument
|
import org.apache.poi.xwpf.usermodel.XWPFParagraph
|
import java.io.File
|
import java.io.FileInputStream
|
import java.io.FileOutputStream
|
import java.io.IOException
|
|
|
object PdfUtil {
|
|
fun generateContract(dynamicParam: DynamicParam): String {
|
val src = dynamicParam.templatePath+dynamicParam.templateName
|
val out = dynamicParam.outPath + dynamicParam.outName
|
|
val inputStream = FileInputStream(File(src))
|
val xwpfDocument = XWPFDocument(inputStream)
|
|
replace(xwpfDocument, dynamicParam.param)
|
|
output(xwpfDocument, out)
|
|
return out
|
}
|
|
/**
|
* 替换段落中指定的文本
|
*/
|
fun replace(doc:XWPFDocument, params:Map<String, Any>) {
|
try {
|
setContent(doc.paragraphs, params)
|
|
for (tab in doc.tables) {
|
for (row in tab.rows) {
|
for (cell in row.tableCells) {
|
//注意,getParagraphs一定不能漏掉
|
//因为一个表格里面可能会有多个需要替换的文字
|
//如果没有这个步骤那么文字会替换不了
|
setContent(cell.paragraphs, params)
|
}
|
}
|
}
|
} catch (e: IOException) {
|
e.printStackTrace()
|
}
|
}
|
|
private fun setContent(paragraphs: List<XWPFParagraph>, params: Map<String, Any>) {
|
for (p in paragraphs) {
|
for (r in p.runs) {
|
//需要替换的文本
|
val text = r.getText(0)
|
//替换指定的文本
|
for (key in params.keys) {
|
if (text != null && text == key) {
|
//替换的时候要注意,setText是有两个参数的
|
//第一个是替换的文本,第二个是从哪里开始替换
|
//0是替换全部,如果不设置那么默认就是从原文字
|
//结尾开始追加
|
val v = params[key]
|
when (v) {
|
is String -> r.setText(v, 0)
|
is File -> {
|
val input = FileInputStream(v)
|
val pic = r.addPicture(input, XWPFDocument.PICTURE_TYPE_JPEG, v.name, Units.toEMU(40.0), Units.toEMU(40.0))
|
|
input.close()
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
|
fun output(doc: XWPFDocument, outSrc: String) {
|
doc.write(FileOutputStream(outSrc))
|
doc.close()
|
}
|
}
|