1 Star 0 Fork 388

liyouzhi128 / x-easypdf

forked from dromara / x-easypdf 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 6.58 KB
一键复制 编辑 原始数据 按行查看 历史
xsx 提交于 2021-06-21 11:32 . 更新说明

一个用搭积木的方式构建pdf的框架(基于pdfbox)

star

更新说明

master分支将作为稳定版本发布,develop分支将会不定期进行更新,欢迎大家提供宝贵意见,目前稳定版本 v2.3.1

介绍

x-easypdf基于pdfbox构建而来,极大降低使用门槛,以组件化的形式进行pdf的构建。简单易用,仅需一行代码,便可完成pdf的操作

API文档

https://apidoc.gitee.com/xsxgit/x-easypdf

特性

  1. 轻量级

仅添加pdfbox相关依赖,无其他任何依赖

  1. 简单易用

仅需一行代码,便可完成pdf的操作

  1. 自动换行分页

文本超出单行显示时,即可自动换行;内容超出单页显示时,即可自动分页

  1. 模板填充

提供内置方法,可轻松实现模板填充

  1. 组件化

页面所有内容均采用组件化形式进行构建,使用不同的组件组合方式,即可构造出理想的文档

  1. 扩展灵活

只需实现系统提供的接口,即可完成自定义的组件扩展

软件架构

软件架构

  1. document(文档):PDF文档
  2. page(页面):若干个页面组成PDF文档
  3. watermark(水印):每个页面可设置页面级别的独立水印,也可设置文档级别的全局水印,优先级为:页面级别>文档级别
  4. header(页眉):每个页面可设置页面级别的独立页眉,也可设置文档级别的全局页眉,优先级为:页面级别>文档级别
  5. footer(页脚):每个页面可设置页面级别的独立页脚,也可设置文档级别的全局页脚,优先级为:页面级别>文档级别
  6. component(组件):核心,每个页面由若干个组件构成

text(文本组件):已提供,文本写入组件

line(线条组件):已提供,线条写入组件

image(图片组件):已提供,图片写入组件

table(表格组件):已提供,表格写入组件,cell(单元格)->row(行)->table(表格)

rect(方形组件):已提供,方形写入组件

后续将添加更多其他方便实用的组件。。。

maven坐标

<dependency>
    <groupId>wiki.xsx</groupId>
    <artifactId>x-easypdf</artifactId>
    <version>2.3.1</version>
</dependency>

安装教程

mvn clean install

使用说明

  1. 简单小示例

代码如下:

public class XpdfTest {
    public static void main(String[] args) throws IOException {
        final String fontPath = "C:\\Windows\\Fonts\\STSONG.TTF";
        final String backgroundImagePath = "D:\\temp\\background.jpg";
        final String outputPath = "C:\\Users\\xsx\\Desktop\\pdf\\text.pdf";

        // 设置背景图片
        XEasyPdfHandler.Document.build().setGlobalBackgroundImage(
                // 构建图片
                XEasyPdfHandler.Image.build(new File(backgroundImagePath)).setHeight(800F)
                // 设置全局页眉
        ).setGlobalHeader(
                // 构建页眉
                XEasyPdfHandler.Header.build(
                        // 构建页眉文本,并居中显示
                        XEasyPdfHandler.Text.build("这是页眉").setStyle(XEasyPdfTextStyle.CENTER)
                )
                // 设置全局页脚
        ).setGlobalFooter(
                // 构建页脚
                XEasyPdfHandler.Footer.build(
                        // 构建页脚文本
                        XEasyPdfHandler.Text.build("这是页脚")
                )
                // 添加页面
        ).addPage(
                // 构建页面
                XEasyPdfHandler.Page.build(
                        // 构建文本
                        XEasyPdfHandler.Text.build(
                                "Hello World(这是一个DEMO)"
                        ).setStyle(XEasyPdfTextStyle.CENTER).setFontSize(20F).setMargin(10F)
                        // 构建文本
                        ,XEasyPdfHandler.Text.build(
                                "        这里是正文(这是一个基于PDFBOX开源工具,专注于PDF文件导出功能," +
                                        "以组件形式进行拼接,简单、方便,上手及其容易," +
                                        "目前有TEXT(文本)、LINE(分割线)等组件,后续还会补充更多组件,满足各种需求)。"
                        ).setStyle(XEasyPdfTextStyle.LEFT).setFontSize(14F).setMargin(10F)
                        // 构建文本
                        ,XEasyPdfHandler.Text.build(
                                "-- by xsx"
                        ).setStyle(XEasyPdfTextStyle.RIGHT).setFontSize(12F).setMarginTop(10F).setMarginRight(10F)
                        // 构建文本
                        ,XEasyPdfHandler.Text.build(
                                "2020.03.12"
                        ).setStyle(XEasyPdfTextStyle.RIGHT).setFontSize(12F).setMarginTop(10F).setMarginRight(10F)
                        // 构建实线分割线
                        ,XEasyPdfHandler.SplitLine.SolidLine.build().setMarginTop(10F)
                        // 构建虚线分割线
                        ,XEasyPdfHandler.SplitLine.DottedLine.build().setLineLength(10F).setMarginTop(10F).setLineWidth(10F)
                        // 构建实线分割线
                        ,XEasyPdfHandler.SplitLine.SolidLine.build().setMarginTop(10F)
                        // 构建文本
                        ,XEasyPdfHandler.Text.build( "完结").setStyle(XEasyPdfTextStyle.CENTER)
                )
                // 设置字体路径,并保存
        ).setFontPath(fontPath).save(outputPath).close();
    }
}

效果如下:

示例效果

  1. 使用说明

请查看wiki

Java
1
https://gitee.com/liyouzhi128/x-easypdf.git
git@gitee.com:liyouzhi128/x-easypdf.git
liyouzhi128
x-easypdf
x-easypdf
master

搜索帮助