上一篇文章中我们使用itxtpdf库中的方法,绘制了一个固定表格与一个动态表格。如果你想在PDF中加入文字该怎么办呢。可以使用本文推荐的Paragraph这个类去实现,效果如下:
我在PDF中插入了一个工作流的审批流程。具体实现呢还是使用itextpdf库中的方法。
Paragraph settleCycle = new Paragraph();直接新创建一个文本,后面我们将在这个号文本中进行文字的编辑。
for (BpmTaskRespVO process : taskProcess) {
//创建一个可以编辑文字的块区域
Chunk chunk = new Chunk(" 任务"+i+": " + process.getName(), processTitle);
i--;
//进行换行
Chunk chunkRow1 = new Chunk("\n\n", content);
Chunk chunk1 = new Chunk(" 审批人: " + process.getAssigneeUser().getNickname(), content);
//给这一行加上北京颜色
chunk1.setBackground(new BaseColor(242,242,242),-5f,25f,400f,10f);
Chunk chunkSpace1 = new Chunk(" ", content);
Chunk chunk2 = new Chunk(" 操作: " + getDitcValue("bpm_process_instance_result", String.valueOf(process.getResult())), content);
Chunk chunkSpace2 = new Chunk(" ", content);
Chunk chunk3 = new Chunk(" 审批时间: " + process.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), content);
Chunk chunkRow2 = new Chunk("\n", content);
Chunk chunk4 = new Chunk(StringUtils.isNotBlank(process.getReason()) ? " " + process.getReason() : " 处理中", restFont);
if (process.getResult().equals(AUDIT_SUCCESS_STATE)) {
chunk4 = new Chunk(" 通过", passFont);
}
if (process.getResult().equals(AUDIT_FAIL_STATE)) {
chunk4 = new Chunk(" 不通过", failFont);
}
//为审批状态单独设置颜色
chunk4.setBackground(new BaseColor(240,249,235),-5f,0f,10f,2f);
Chunk chunkRow3 = new Chunk("\n\n\n", content);
//依次将上面所创建的文本内容块添加到编辑区内
settleCycle.add(chunk);
settleCycle.add(chunkRow1);
settleCycle.add(chunk1);
settleCycle.add(chunkSpace1);
settleCycle.add(chunk2);
settleCycle.add(chunkSpace2);
settleCycle.add(chunk3);
settleCycle.add(chunkRow2);
settleCycle.add(chunk4);
settleCycle.add(chunkRow3);
}
主要就是使用Chunk这个类进行内容的拼接操作,如果不换行,所有块内容都会在一行,这个根据自己实际业务调整布局,我在每个汉字前都加入了空格,为了就是让这一行不要太靠左边,当然这个方法没有去采用正规的实现,但是这样实现起来很方便。这一块需要耐心调整。
接下来就将刚刚编辑好的内容在添加到文档document中即可:
settleCycle.setSpacingBefore(1f); settleCycle.setSpacingAfter(2f); settleCycle.setAlignment(Element.ALIGN_LEFT); document.add(settleCycle);
这样就实现了在PDF中编辑文本内容了。