首先定义几个常量并初始化
private static String BLANKS; // 段落缩进
private static String NEWLINE; // 段落换行
private static Font HEAD_FONT; // 标题字号
private static Font TEXT_FONT; // 正文字号
static {
try {
NEWLINE = "\n\n";
BLANKS = " ";
HEAD_FONT = new Font(BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), 14, Font.NORMAL);
TEXT_FONT = new Font(BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), 10, Font.NORMAL);
} catch (Exception e) {
server.error("PDF 初始化失败:" + e.getMessage());
}
}
再定义几个对象成员变量
private Document doc;
private OutputStream bos;
// 文档属性
private String file;
private String title;
private String content;
构造函数
/**
* 构造函数
*/
public PdfDocument(OutputStream bos, String file, String title, String content) {
try {
this.bos = bos;
this.doc = new Document();
PdfWriter.getInstance(doc, bos);
// 文档属性
this.file = file;
this.title = title;
this.content = content;
} catch (Exception e) {
e.printStackTrace();
}
}
写入数据
/**
* 写入数据
*/
public void outputPdfDocument() {
try {
doc.open();
// 文章标题
Paragraph head = new Paragraph(title + NEWLINE, HEAD_FONT);
head.setAlignment(Element.ALIGN_CENTER);
doc.add(head);
// 文章段落
Arrays.asList(content.split(NEWLINE)).forEach(
c -> {
try {
doc.add(new Paragraph(BLANKS + c, TEXT_FONT));
} catch (DocumentException de) {
server.error("写入段落失败:" + de.getMessage());
}
}
);
doc.close();
} catch (Exception e) {
server.error("写入标题失败:" + e.getMessage());
}
}
保存数据
/**
* 保存文件
*/
public void savePdfDocument() {
try {
FileOutputStream fos = new FileOutputStream(this.file);
fos.write(((ByteArrayOutputStream) bos).toByteArray());
fos.close();
} catch (Exception e) {
server.error("写入文件失败:" + e.getMessage());
}
}
最后附上一个单测
@Test
public void testPdfDocument() throws Exception {
String file = "test.pdf";
String title = "北京的冬天";
String content = "冬日的北京,是一座别样的城市。\n\n" +
"当冬季的第一缕阳光照射到大地上,整个城市都被温暖的阳光笼罩着。此时,穿过雾霾之后的天空格外清澈,如同一块碧蓝的宝石。蓝天高悬,白云朵朵,犹如被神奇的画笔轻轻勾勒出来的。在这样的天空下,站在山顶向远方望去,简直就像是感受到了无边的宇宙。\n\n" +
"北京四周环绕着群山,而且主峰之一的燕山更是傲然矗立在城市的西北边。冬天的燕山,被洒上了一层厚厚的雪白,宛如巨大的银白丘陵连绵绵延到远方。站在山顶,乘着寒风刺骨的北风,身处白茫茫的世界,仿佛进入了一个童话般的仙境。山间的雪花似乎在迎着风儿欢快地舞动,纷纷扬扬地飘落下来,轻柔细腻的触感,给人一种宁静而又温暖的感觉。\n\n" +
"冬日的北京,水也是不可或缺的一部分。作为一座被誉为“京津冀之肾”的城市,北京有着众多湖泊和河流。在冬天里,人们去冰上奇幻乐园滑冰,感受冰面的滑爽与湖水的宁谧。湖畔的景色更是美不胜收,蓝天倒映在湖面上,仿佛与天空融为一体。岁月静好,与山水为伴,让人忘记了城市喧嚣与烦恼。\n\n" +
"冬日的北京,尽管寒冷,但并不乏人的热情。在这个季节里,人们穿上厚厚的羽绒服和温暖的帽子,踩着洁白的雪花在大街小巷中穿行。他们聚集在街头巷尾,一起品尝着烤香肠和烤红薯,欢声笑语充满了整个城市。即使在寒风凛冽的天气中,人们也依旧热衷于户外活动,无论是踢足球、打雪仗还是滑雪,都能见证着人们对自由和快乐的向往。\n\n" +
"冬日的北京,是一幅充满活力和温情的画卷。蓝天、白云、山和水共同构成了这座城市的优美风景。人们在冬天里齐聚一堂,将寒冷变为温暖,将孤独化作友情。这座城市,不仅有着悠久的历史与文化底蕴,更有着北京人民的热情与勇敢。冬天,也许只是时间的那一段过客,而这座城市永远散发着温暖的光芒,等待着每个人的到来。";
// writePdfDocument
PdfDocument pdfDocument = new PdfDocument(new ByteArrayOutputStream(), file, title, content);
pdfDocument.outputPdfDocument();
System.out.println("writePdfDocument 完成");
// readPdfDocument
byte[] bytes = pdfDocument.getPdfDocumentOutputStream();
System.out.println("readPdfDocument " + bytes.length);
// savePdfDocument
pdfDocument.savePdfDocument();
}