easypdfreader(easypdf是什么软件)

一、开源项目简介

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

二、开源协议

使用MulanPSL-2.0开源协议

三、界面展示

效果如下:

easypdfreader(easypdf是什么软件)

四、功能概述

特性

1、体积轻量

仅依赖pdfbox,无其他依赖(数字签名需单独添加bouncycastle依赖,条形码需单独添加zxing依赖)

2、简单智能

文本超出单行显示时,即可自动换行;内容超出单页显示时,即可自动分页。只需记住一个类,学习成本低

3、表单填充

可轻松实现pdf表单的填充

4、图片转换

可轻松实现pdf转为图片

5、提取内容

可提取pdf页面中的文本及图片

6、文本替换

可将pdf中的文本内容进行替换,支持正则

7、拆分合并

可将pdf按照单页或多页进行拆分与合并

8、数字签名

可对已有pdf或新创建的pdf进行数字签名

9、内置字体

内置细体、正常、粗体三种开源中文字体(思源字体)

10、扩展灵活

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

11、组件构建

页面所有内容均采用组件化的形式进行构建

五、技术选型

软件架构

easypdfreader(easypdf是什么软件)

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

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

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

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

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

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

circle(圆形组件):已提供,圆形写入组件

barcode(条形码组件):已提供,条形码写入组件(包含一维码/二维码)

layout(布局组件):已提供,包含水平布局与垂直布局,支持相互嵌套

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

maven坐标

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

安装教程

mvn clean install

使用说明

  1. 简单小示例

代码如下:

import wiki.xsx.core.pdf.component.XEasyPdfComponent;
import wiki.xsx.core.pdf.component.image.XEasyPdfImageType;
import wiki.xsx.core.pdf.handler.XEasyPdfHandler;

import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Arrays;

public class XpdfTest {
    
    @SneakyThrows
    public static void main(String[] args) {
        // 定义图片路径
        final String imagePath = "E:\\pdf\\test\\doc\\test.png";
        // 定义保存路径
        final String outputPath = "E:\\pdf\\test\\doc\\my.pdf";
        // 定义页眉与页脚字体颜色
        Color HeaderAndFooterColor = new Color(10, 195, 255);
        // 定义分割线颜色
        Color lineColor = new Color(210, 0, 210);
        // 获取背景图片
        try (InputStream backgroundImageInputStream = new URL("https://i0.hdslb.com/bfs/article/1e60a08c2dfdcfcd5bab0cae4538a1a7fe8fc0f3.png").openStream()) {
            // 设置背景图片
            XEasyPdfHandler.Document.build().setGlobalBackgroundImage(
                    // 构建图片并垂直居中
                    XEasyPdfHandler.Image.build(backgroundImageInputStream, XEasyPdfImageType.PNG).setVerticalStyle(XEasyPdfPositionStyle.CENTER)
                    // 设置全局页眉
            ).setGlobalHeader(
                    // 构建页眉
                    XEasyPdfHandler.Header.build(
                            // 构建页眉图片,并居中显示
                            XEasyPdfHandler.Image.build(new File(imagePath)).setHeight(50F).enableCenterStyle(),
                            // 构建页眉文本,并居中显示
                            XEasyPdfHandler.Text.build("这是粗体页眉")
                                    // 设置水平垂直居中
                                    .enableCenterStyle()
                                    // 设置字体大小
                                    .setFontSize(20F)
                                    // 设置字体颜色
                                    .setFontColor(headerAndFooterColor)
                                    // 使用粗体字
                                    .setDefaultFontStyle(XEasyPdfDefaultFontStyle.BOLD)
                    )
                    // 设置全局页脚
            ).setGlobalFooter(
                    // 构建页脚
                    XEasyPdfHandler.Footer.build(
                            // 构建页眉图片,并居中显示
                            XEasyPdfHandler.Image.build(new File(imagePath)).setHeight(50F).setVerticalStyle(XEasyPdfPositionStyle.BOTTOM),
                            // 构建页脚文本(手动分行),并居中显示
                            XEasyPdfHandler.Text.build(Arrays.asList("这是粗体页脚第一行", "这是粗体页脚第二行"))
                                    // 设置水平居中
                                    .setHorizontalStyle(XEasyPdfPositionStyle.CENTER)
                                    // 设置垂直居下
                                    .setVerticalStyle(XEasyPdfPositionStyle.BOTTOM)
                                    // 设置字体大小
                                    .setFontSize(20F)
                                    // 设置字体颜色
                                    .setFontColor(headerAndFooterColor)
                                    // 使用粗体字
                                    .setDefaultFontStyle(XEasyPdfDefaultFontStyle.BOLD)
                    )
                    // 添加页面
            ).addPage(
                    // 构建页面
                    XEasyPdfHandler.Page.build(
                            // 构建文本
                            XEasyPdfHandler.Text.build(
                                    "x-easypdf简介(细体)"
                                    // 设置水平居中
                            ).setHorizontalStyle(XEasyPdfPositionStyle.CENTER)
                                    // 设置字体大小
                                    .setFontSize(16F)
                                    // 使用细体字
                                    .setDefaultFontStyle(XEasyPdfDefaultFontStyle.LIGHT)
                                    // 开启删除线
                                    .enableDeleteLine()
                            // 构建文本
                            ,XEasyPdfHandler.Text.build(
                                    "x-easypdf是一个基于PDFBOX的开源框架,"
                            ).setFontSize(16F).setFontColor(new Color(51, 0, 153))
                            // 构建文本
                            ,XEasyPdfHandler.Text.build(
                                    "专注于PDF文件导出功能,"
                            ).enableTextAppend().setFontSize(16F).setFontColor(new Color(102, 0, 153))
                                    // 开启下划线并设置为红色
                                    .enableUnderline().setUnderlineColor(Color.RED)
                            // 构建文本
                            ,XEasyPdfHandler.Text.build(
                                    "以组件形式进行拼接,"
                            ).enableTextAppend().setFontSize(16F).setFontColor(new Color(153, 0, 153))
                                    // 开启高亮并设置为橘色
                                    .enableHighlight().setHighlightColor(Color.ORANGE)
                            // 构建文本
                            ,XEasyPdfHandler.Text.build(
                                    "简单、方便,功能丰富,"
                            ).enableTextAppend().setFontSize(16F).setFontColor(new Color(204, 0, 153))
                            // 构建文本
                            ,XEasyPdfHandler.Text.build(
                                    "欢迎大家试用并提出宝贵意见。"
                            ).enableTextAppend().setFontSize(16F).setFontColor(new Color(255, 0, 153))
                            // 构建文本
                            ,XEasyPdfHandler.Text.build(
                                    "-- by xsx"
                            ).setHorizontalStyle(XEasyPdfPositionStyle.RIGHT).setMarginTop(10F).setMarginRight(10F)
                            // 构建文本
                            ,XEasyPdfHandler.Text.build(
                                    "2021.10.10"
                            ).setHorizontalStyle(XEasyPdfPositionStyle.RIGHT).setMarginTop(10F).setMarginRight(10F)
                            // 构建实线分割线
                            ,XEasyPdfHandler.SplitLine.SolidLine.build().setMarginTop(10F).setColor(lineColor).setContentMode(XEasyPdfComponent.ContentMode.PREPEND)
                            // 构建虚线分割线
                            ,XEasyPdfHandler.SplitLine.DottedLine.build().setLineLength(10F).setMarginTop(10F).setLineWidth(10F).setColor(lineColor).setContentMode(XEasyPdfComponent.ContentMode.PREPEND)
                            // 构建实线分割线
                            ,XEasyPdfHandler.SplitLine.SolidLine.build().setMarginTop(10F).setColor(lineColor).setContentMode(XEasyPdfComponent.ContentMode.PREPEND)
                            // 构建表格
                            ,XEasyPdfHandler.Table.build(
                                    // 构建行
                                    XEasyPdfHandler.Table.Row.build(
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(
                                                    // 添加文本
                                                    XEasyPdfHandler.Text.build("第一行第一列")
                                            ),
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(
                                                    XEasyPdfHandler.Text.build("第一行第二列")
                                            ),
                                            // 构建单元格并设置字体大小为15,边框颜色为绿色
                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(
                                                    XEasyPdfHandler.Text.build("第一行第三列")
                                            ).setFontSize(15F).setBorderColor(Color.GREEN),
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(
                                                    XEasyPdfHandler.Text.build("第一行第四列")
                                            ),
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(
                                                    XEasyPdfHandler.Text.build("第一行第五列")
                                            )
                                            // 设置该行字体大小为20
                                    ).setFontSize(20F),
                                    // 构建行
                                    XEasyPdfHandler.Table.Row.build(
                                            // 构建单元格,合并三行
                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 300F).addContent(
                                                    XEasyPdfHandler.Text.build(Arrays.asList("第二行", "第一列", "合并三行"))
                                            ),
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(300F).addContent(
                                                    XEasyPdfHandler.Text.build("第二行第二列,合并三列")
                                            ),
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 300F).addContent(
                                                    XEasyPdfHandler.Text.build("第二行第三列,合并三行")
                                            )
                                            // 设置行高为100(合并行需要设置平均行高)
                                    ).setHeight(100F),
                                    // 构建行
                                    XEasyPdfHandler.Table.Row.build(
                                            // 构建单元格,开启垂直合并
                                            XEasyPdfHandler.Table.Row.Cell.build(100F).enableVerticalMerge(),
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
                                                    XEasyPdfHandler.Text.build("第三行第一列")
                                            ),
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
                                                    XEasyPdfHandler.Text.build("第三行第二列")
                                            ),
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
                                                    XEasyPdfHandler.Text.build("第三行第三列")
                                            )
                                            // 设置行高为100,设置边框颜色为红色,设置字体颜色为蓝色
                                    ).setHeight(100F).setBorderColor(Color.RED).setFontColor(Color.BLUE),
                                    // 构建行(单元格已设置高度,则合并行无需设置行高)
                                    XEasyPdfHandler.Table.Row.build(
                                            // 构建单元格,开启垂直合并
                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 100F).enableVerticalMerge(),
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(300F, 100F).addContent(
                                                    XEasyPdfHandler.Text.build("第四行第一列,合并三列")
                                            )
                                    ),
                                    // 构建行(根据文本高度自适应行高)
                                    XEasyPdfHandler.Table.Row.build(
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
                                                    XEasyPdfHandler.Text.build("第五行第一列,自适应高度!")
                                            ),
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
                                                    XEasyPdfHandler.Text.build("第五行第二列,自适应高度!!!!!!!!!!")
                                            ),
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
                                                    XEasyPdfHandler.Text.build("第五行第三列,自适应高度!!!!!!!!!!!!!!!!!!!!!!")
                                            ),
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
                                                    XEasyPdfHandler.Text.build("第五行第四列,自适应高度!!!!!!!!!!")
                                            ),
                                            // 构建单元格
                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
                                                    XEasyPdfHandler.Text.build("第五行第五列,自适应高度!")
                                            )
                                    ),
                                    // 构建行
                                    XEasyPdfHandler.Table.Row.build(
                                            // 构建单元格,并设置边框颜色为橘色
                                            XEasyPdfHandler.Table.Row.Cell.build(500F, 100F).addContent(
                                                    XEasyPdfHandler.Text.build("分页测试1")
                                            ).setBorderColor(Color.ORANGE).setFontColor(Color.PINK)
                                    )
                                    // 设置表头行
                            ).setTileRow(
                                    // 构建行
                                    XEasyPdfHandler.Table.Row.build(
                                            // 构建单元格,并设置边框颜色为黑色,字体大小为30,字体颜色为紫色
                                            XEasyPdfHandler.Table.Row.Cell.build(500F, 100F).addContent(
                                                    XEasyPdfHandler.Text.build("表头")
                                            ).setBorderColor(Color.BLACK).setFontSize(30F).setFontColor(Color.MAGENTA)
                                    )
                                    // 开启表格内容上下左右居中
                            ).enableCenterStyle()
                                    // 设置左边距为50
                                    .setMarginLeft(50F)
                                    // 设置上边距为10
                                    .setMarginTop(10F)
                                    // 设置边框颜色为灰色
                                    .setBorderColor(Color.GRAY)
                                    // 开启自动表头(分页时,自动添加表头行)
                                    .enableAutoTitle()
                    )
                    // 保存、关闭
            ).save(outputPath).close();
        }
    }
}

六、源码地址

私信回复:搭积木构建PDF框架

或访问一飞开源:https://code.exmay.com/

    
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 cloud@ksuyun.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.daxuejiayuan.com/32423.html