# taotao-docbook
**Repository Path**: qq353586539/taotao-docbook
## Basic Information
- **Project Name**: taotao-docbook
- **Description**: jdocbook 的替代品。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: develop/1.0.x
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2022-04-10
- **Last Updated**: 2026-03-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
---
title: taotao-docbook
---
# 简介
由于 jdocbook 已经多年不更新,所以制作了其替代品。总之这是个 jdocbook 的替代品而不是复制品,本项目最大限度保持与 jdocbook
的兼容,但也有部分特性进行了变更。整体的构建目标如下:
1. 定义以 docbook 为核心文档转换流程。
1. 定义基于 maven 的文档工程结构。
1. 给出基于 maven 的转换插件。
1. 给出基于 commons-vfs 的资源定位方案。
1. 给出针对中文的 docbook-xslt 扩展。
1. 给出针对 ooxml 的 docbook-xslt 扩展
# 用法
在 1.0.1 的实现中给出了前五项的实现。第六项计划在 1.1.0
中实现。本文以 [demo-docbook](https://gitee.com/qq353586539/demo-docbook) 为例说明 maven-plugin 的用法。
## 目录结构
```
demo-docbook
├─src
│ └─main
│ ├─docbook # 放 docbook 的 xml 文件(文档本身)建议分语言地区存放,便于进行翻译工程
│ │ └─zh-CN # 分语言地区的文件夹
│ ├─docx # 生成 docx 用的资源文件,比如样式表,如果放在这个位置,说明这些资源仅用于支持本文档工程(当前不启用)
│ ├─fonts # 字体文件,仅用于本文档工程的字体,用于 fop 渲染 pdf 时使用,需要另行编写和指定 fop 的配置(与 jdocbook 不同)
│ ├─plantuml # 与 taotao-docbook 无关,在 demo 中用于基于 plantuml 生成图片,并进行测试
│ ├─style # 仅用于本文档工程的样式与样式资源(主要是图片)
│ └─xslt # 本文档工程扩展的 xslt 转换规则,即便是只使用 taotao-docbook 提供的转换规则,也建议像 demo-docbook 一样进行封装
└─target
└─docbook # 工作目录, 插件工作过程中生成的文件和最终生成的文件都在这里
├─publish # 生成的最终制品文件夹
│ ├─html # 生成的 html 的目录
│ └─pdf # 生成的 pdf 文件的目录
└─staging # 中间产物目录
├─docx # docx 的中间产物,散装的 ooxml
├─fo # fo 文件目录,用于后续进行 fop 渲染,与 jdocbook 不同,这里没删除
├─fonts # 汇总后的字体目录
└─resource_root # 汇总后的资源目录( docbook 中图片的引入路径的相对路径就是以这里为基础)
├─css # css 主要用于生成 html 后使用
└─images # 图片,包括样式图片和内容图片
```
## 流程与 goals
插件的基本工作流程如下:
```mermaid
graph LR;
A[清 理]-->B[处理资源]-->C[生成文档];
```
1. **清理** 该过程删除 _工作目录_ 中的所有文件。
1. **处理资源** 该过程负责汇总各种资源文件,包括但不限于字体、图片、样式等。
1. **生成文档** 该过程负责将 `docbook` 文件和资源文件生成最终文档制品。
对应上述三个过程,插件提供了以下 goals :
| 序号 | goal | 默认 phase | 对应过程 | 说明 |
|:---:|:------------:|:-----------------:|:--------:|------------------|
| 1 | clear | clean | **清理** ||
| 2 | resourceCopy | process-resources | **处理资源** ||
| 3 | fo | package | **生成文档** | 基于 xsl-fo 技术生成文档 |
| 4 | html | package | **生成文档** | 生成 html 页面 |
对于 **生成文档** 的 goal ,一般又对应三个子过程: **前置处理、核心处理过程、后置处理** 过程。以 `fo`
为例,其前置处理过程什么也没做,核心处理过程将 `docbook` 文件处理成一个 `fo` 文件,后置处理过程将 `fo` 文件处理成指定格式的目标文件(
**比如 pdf、rtf 等** )。
### goal: clear
该过程删除 _工作目录_ 中的所有文件。以便于在一个相对干净的环境中生成文档制品。
| 序号 | 参数 | 默认值 | 作用与说明 |
|:---:|:-------:|:-------------------------:|--------------------------------|
| 1 | workDir | ${basedir}/target/docbook | 工作目录, 插件工作过程中生成的文件和最终生成的文件都在这里 |
如上所示,`clear` 目标仅与 `workDir` 参数有关,其作用是删除该参数对应的目录下的文件。
直接执行如下命名,可以指定执行该目标:
```bash
mvn taotao-docbook:clear
```
### goal: resourceCopy
该目标是将各种**资源文件**汇聚到**中间产物目录**下。受文档工程化的影响,资源文件可能来源于不同位置,这就为渲染时资源文件的定位增加了困难。该过程将
**资源文件**汇聚,提供单一的定位基址。
1. **资源文件** 是指生成文件前,其本身或内部信息无需人工编辑;生成文件时,其本身或内部信息需进入最终文档的文件,比如图片、字体、样式表、docx
的style 文件等。
1. **中间产物目录** 及 `workDir` 下的 `staging` 文件夹,在本项目中,其相对位置不予改变,其目录结构也不予改变。
该目标各参数如下:
| 序号 | 参数 | 默认值 | 作用与说明 |
|:---:|:-------------:|:-----------------------------------------------------:|--------------------------------|
| 1 | workDir | ${basedir}/target/docbook | 工作目录, 插件工作过程中生成的文件和最终生成的文件都在这里 |
| 2 | resourcePaths | (classpath://resource_root,${basedir}/src/main/style) | 提供通用资源的路径 |
| 3 | fontPaths | (classpath://fonts,${basedir}/src/main/fonts) | 提供字体的路径 |
| 4 | docxPaths | (classpath://docx,${basedir}/src/main/docx) | 提供 docx 资源的路径 |
经作者努力,使上述配置中的 `resourcePaths`,`fontPaths`,`docxPaths`
都支持 [`commons-vfs2` 的路径](https://commons.apache.org/proper/commons-vfs/filesystems.html)。 其中 `classpath`
,就是 `commons-vfs2` 中的 `RES`.
其目标的本质是将多个文件夹下的文件(包括目录结构)复制到指定文件夹下,复制的对应关系如下:
| 序号 | 源 | 目标 | 说明 |
|:---:|:----------------:|:--------------------------------:|--------------|
| 1 | ${resourcePaths} | ${workDir}/staging/resource_root | 通用资源 |
| 2 | ${fontsPaths} | ${workDir}/staging/fonts | fo用字体资源 |
| 3 | ${docxPaths} | ${workDir}/staging/docx | docx用 xml 资源 |
直接执行如下命名,可以指定执行该目标:
```bash
mvn taotao-docbook:resourceCopy
```
### goal: fo
该过程主要基于给定的 xslt 将 docbook 文档转换成 xsl:fo 文档,然后根据给定的目标格式,将 fo 文档转换为对应格式(主要是
pdf )。
```mermaid
graph LR;
D[docbook]-->F[XSL-FO]-- application/pdf -->R1[PDF];
F-- application/rtf -->R2[RTF];
F-- application/postscript -->R3[PS];
```
> **XSL-FO 文档**
>
> XSL-FO是XSL Formatting Objects的缩写,它是一种用于文档格式的XML
> 置标语言。XSL-FO是XSL的一部分,而XSL是一组定义XML数据转换与格式的W3C技术。XSL的其他部分有XSLT与XPath。截止到2006年12月12日,XSL-FO的最新版本是v1.1。有时
> xsl-fo 也被称作 xsl。
>
> [xsl-fo:v1.1](https://www.w3.org/TR/xsl11/)
该目标各参数如下:
| 序号 | 参数 | 默认值 | 作用与说明 |
|:--:|:----------------:|:-----------------------------------------------------:|:---------------------------------------------------------------------|
| 1 | workDir | ${basedir}/target/docbook | 工作目录, 插件工作过程中生成的文件和最终生成的文件都在这里 |
| 2 | resourcePaths | (classpath://resource_root,${basedir}/src/main/style) | 提供通用资源的路径 |
| 3 | fontPaths | (classpath://fonts,${basedir}/src/main/fonts) | 提供字体的路径 |
| 4 | xsltDir | classpath://xslt/store/taotao | xslt 首文件所在的路径(不包括文件本身),支持 vfs url 格式 |
| 5 | xsltFile | | xslt 首文件所在的路径,与 xsltDir 共同决定 xslt 首文件位置 |
| 6 | language | zh-CN | 输入与输出的参考语言,格式为 ll-CC |
| 7 | docbookFile | | docbook 首文件文件名 |
| 8 | docbookDir | ${basedir}/src/main/docbook | docbook 首文件所在的路径(不包括文件本身),默认是工程的 src/main/docbook 目录,与 language 共同作用 |
| 9 | descFile | | 目标文件文件名,与 descDir 共同作用 |
| 10 | descDir | ${basedir}/src/main/docbook | 目标文件所在的路径(不包括文件本身) |
| 11 | sourceResolution | 72 | 源分辨率,单位是 像素(墨点)/英寸 |
| 12 | targetResolution | 72 | 目标分辨率,单位是 像素(墨点)/英寸 |
| 13 | fopConfigPath | classpath://META-INF/fop-config.xml | 默认的 fop 配置,包括诸如各种格式的处理方式 |
| 14 | mimeType | application/pdf | 生成目标的 mineType(该参数决定了最终生成的格式) |
如上表,在 `fo` 任务中需要给定 `xsltFile`, `docbookFile`, `descFile` 示例中给出的参数如下:
```xml
store.taotao.docbook
taotao-docbook-maven-plugin
demo-docbook.xml
${basedir}/src/main/xslt
classpath://resource_root
${basedir}/src/main/style
...
generate_fo
fo
144
144
pdf.xsl
pdf/${project.artifactId}-${project.version}.pdf
...
...
```
其中这三个参数需要配合对应的 `dir` 参数使用。这里强烈建议大家重写一份 `xsl` 文件,在引用本插件提供的 `xsl`
基础上更加细致的调节各项参数。示例中生成 `fo` 的 `pdf.xsl` 如下:
```xml
25mm
25mm
```
如上,引入的 `classpath://xslt/store/taotao/fo.xsl` 是本插件提供的规则,修正的参数是为了在生成 `book`
时,页两侧的边距相同(事实上,生成 `book` 时,页两侧的边距应该是不同的)。
直接执行如下命名,可以指定执行该目标:
```bash
mvn taotao-docbook:fo
```
### goal: html
该目标是生成单一的 `html` 文件,一般用于生成站点文档,目前没有开发多文件的计划。
该目标各参数如下:
| 序号 | 参数 | 默认值 | 作用与说明 |
|:--:|:-------------:|:-----------------------------------------------------:|:---------------------------------------------------------------------|
| 1 | workDir | ${basedir}/target/docbook | 工作目录, 插件工作过程中生成的文件和最终生成的文件都在这里 |
| 2 | resourcePaths | (classpath://resource_root,${basedir}/src/main/style) | 提供通用资源的路径 |
| 3 | fontPaths | (classpath://fonts,${basedir}/src/main/fonts) | 提供字体的路径 |
| 4 | xsltDir | classpath://xslt/store/taotao | xslt 首文件所在的路径(不包括文件本身),支持 vfs url 格式 |
| 5 | xsltFile | | xslt 首文件所在的路径,与 xsltDir 共同决定 xslt 首文件位置 |
| 6 | language | zh-CN | 输入与输出的参考语言,格式为 ll-CC |
| 7 | docbookFile | | docbook 首文件文件名 |
| 8 | docbookDir | ${basedir}/src/main/docbook | docbook 首文件所在的路径(不包括文件本身),默认是工程的 src/main/docbook 目录,与 language 共同作用 |
| 9 | descFile | | 目标文件文件名,与 descDir 共同作用 |
| 10 | descDir | ${basedir}/src/main/docbook | 目标文件所在的路径(不包括文件本身) |
如上表, `html` 目标与 `fo` 目标的参数基本相同,仅少了 4 个 `fo` 专属的参数。同理,这里建议制定工程专属的 `html.xsl` 文件。
```xml
```
# 联系方式
目前支持 QQ 聊天群和项目网站提 issue
* [gitee](https://gitee.com/qq353586539/taotao-docbook)
* [github](https://github.com/zhangchanggong/taotao-docbook)
* [点击链接加入群聊【docbook 交流群】](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DSVvCyvhNbLIlmES2x8DD0SDw6M8vWDs&authKey=U6Bl3Cl%2BAs1F9Ec5LEBrY94XZlWZPPozvw0S32wCBq3%2FPUjsjOeJMpKO8ERPh5za&noverify=0&group_code=694344702)