java 生成 pdf 文档

文章介绍了如何使用Java创建PDF文档,包括定义常量、初始化对象成员变量,构造函数中设置文档属性,以及输出、保存PDF内容的方法。示例展示了如何创建一个包含标题和段落的PDF文件,并提供了一个测试用例。
摘要由CSDN通过智能技术生成

首先定义几个常量并初始化

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();
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厉力文武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值