跳至主要內容

快速入门

xsx大约 2 分钟fop模块快速入门

添加依赖

提示

在 pom.xml 文件中加入以下一种依赖,最新版本请点此查看open in new window

全功能模块依赖

<dependency>
    <groupId>org.dromara.x-easypdf</groupId>
    <artifactId>x-easypdf</artifactId>
    <version>版本号</version>
</dependency>

单模块依赖

<dependency>
    <groupId>org.dromara.x-easypdf</groupId>
    <artifactId>x-easypdf-fop</artifactId>
    <version>版本号</version>
</dependency>

使用步骤

说明

以 freemarker 数据源为例

1. 创建模板对象

Template template = TemplateHandler.Template.build();

2. 设置 fop 配置文件路径

template.setConfigPath(configPath);

3. 设置数据源,并设置 xsl-fo 模板路径与模板数据

template.setDataSource(
        TemplateHandler.DataSource.Freemarker.build()
                            .setTemplateName("template.fo")
                            .setTemplateData(data)
);

4. 执行转换

template.transform(outputPath);

完整示例

说明

以 freemarker 数据源为例

// 定义fop配置文件路径
String configPath = "E:\\pdf\\template\\fop.xconf";
// 定义xsl-fo模板路径(目录)
String templatePath = "E:\\pdf\\template\\freemarker";
// 定义pdf输出路径
String outputPath = "E:\\pdf\\test\\fo\\Freemarker.pdf";
// 设置模板路径
TemplateHandler.DataSource.Freemarker.setTemplatePath(templatePath);
// 定义数据map
Map<String, Object> data = new HashMap<>();
// 定义数据list
List<String> list = new ArrayList<>(2);
list.add("hello");
list.add("world");
// 设置值
data.put("list", list);
data.put("str", "hello world");
// 转换pdf
TemplateHandler.Template.build().setConfigPath(configPath).setDataSource(
        // 构建数据源
        TemplateHandler.DataSource.Freemarker.build()
            // 设置模板名称(模板路径下的文件名称)
            .setTemplateName("template.fo")
            // 设置模板数据
            .setTemplateData(data)
).transform(outputPath);
fop 配置文件
<?xml version="1.0"?>
<!-- fop版本 -->
<fop version="1.0">

    <!-- 当前路径(项目所在路径) -->
    <base>.</base>

    <!-- 默认源图像 dpi(每英寸点数像素) -->
    <source-resolution>72</source-resolution>
    <!-- 默认目标图像 dpi(每英寸点数像素),默认: 72dpi -->
    <target-resolution>72</target-resolution>

    <!-- 默认页面宽度与高度(A4) -->
    <default-page-settings width="21cm" height="29.7cm"/>

    <!-- 渲染器 -->
    <renderers>
        <!-- pdf 渲染器 -->
        <renderer mime="application/pdf">
            <!-- 过滤器 -->
            <filterList>
                <!-- 默认使用 flate 依赖压缩 -->
                <value>flate</value>
            </filterList>
            <!-- 字体 -->
            <fonts>
                <!-- 自动扫描系统全部字体 -->
                <auto-detect/>
            </fonts>
        </renderer>
    </renderers>
</fop>
xsl-fo 模板
<?xml version="1.0" encoding="utf-8"?>
<!--根标签-->
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <!--页面模板-->
    <fo:layout-master-set>
        <!--单页面模板-->
        <fo:simple-page-master master-name="A4">
            <!--页面区域主体-->
            <fo:region-body/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <!--页面序列-->
    <fo:page-sequence master-reference="A4">
        <!--页面流-->
        <fo:flow flow-name="xsl-region-body">
            <#list list as data>
                <fo:block>${data}</fo:block>
            </#list>
            <#if str??>
                <fo:block>${str}</fo:block>
            <#else>
                <fo:block font-family="微软雅黑">为空</fo:block>
            </#if>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

提示

使用中文时,需设置支持中文的字体名称