目前,我正在使用Microsoft Word 2003管理我的用户指南,并将其转换为PDF文件,该文件可以从网站下载,产品安装程序还包括该文件。
我想转向一种实现以下目标的机制:
- 生成具有可点击目录和首页的PDF文件
- 按章节生成符合HTML5的输出,但不包含HTML框架
- 为用户指南生成JSON TOC(章节大纲)
我想将PDF文件与分布式产品打包。
我想创建一些简单的PHP脚本,用上下文敏感的TOC(显示当前章节的部分)生成HTML页面,并显示相关文档。
我对开发PHP脚本来实现这一点没有任何问题,但我想知道如何生成上述输出。我更希望使用现成的GUI键入文档。我很乐意编写XSLT2样式表来执行任何必要的转换。
让人们了解我的目标:
-
当前PDF手册:http://rotorz.com/tilesystem/user-guide.pdf
-
API文档使用自定义XSLT2样式表生成为一组"不完整"的HTML文件,带有JSON TOC,然后由PHP组合在一起:http://rotorz.com/tilesystem/api
当您浏览我的API文档时,您会注意到左侧的TOC是上下文敏感的。我希望我的用户指南以类似的方式工作。
有没有免费的王子替代品:http://www.princexml.com/用于分页媒体CSS?
在花了相当长的时间阅读了许多变体之后,我发现了一个潜在的解决方案。。。
-
使用PHP和http://aloha-editor.org我的所见即所得编辑器。可能使用https://github.com/chillitom/CefSharp将编辑器直接嵌入到更相关的GUI中。
-
使用带有自定义封面、页眉和页脚.html文件的"wkhtmltoxdoc"将HTML5页面转换为PDF。Plus会自动生成一个TOC页面。
-
"wkhtmltoxdoc"还生成一个XML TOC,该TOC可以很容易地转换为JSON。
我还在试验"wkhtmltoxdoc",但它看起来很好!当然,除非有一个更简单的解决方案。。。
添加:
我的TOC文件似乎需要手动编写和自动生成的混合体。类似EclipseTOC模式的东西就足够了,一个简单的XSLT样式表可以通过获取H1-6标签并添加哈希链接的唯一标识符来自动填充空白。
因此,这个TOC可以由XSLT2样式表使用,然后最终转换为JSON供PHP脚本使用。
我现有文档的模型摘录:
<?xml version="1.0" encoding="UTF-8"?>
<toc>
<topic label="Introduction" href="introduction.html"/>
<topic label="Getting Started">
<topic label="Installation" href="getting-started/installation.html"/>
<topic label="User Interface" href="getting-started/ui/index.html">
<topic label="Menu Commands" href="getting-started/ui/menu-commands.html"/>
<topic label="Tile System Panel" href="getting-started/ui/tile-system-panel.html"/>
<topic label="Brush Designer" href="getting-started/ui/brush-designer.html"/>
</topic>
<topic label="User Preferences" href="getting-started/user-preferences.html"/>
</topic>
<topic label="Creating a Tile System" href="creating-a-tile-system">
<!-- ... -->
</topic>
</toc>
参考Eclipse文档:http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fextension-points%2Org_eclipse_help_toc.html
经过大量的研究和实验,我决定使用DITA(Darwin信息类型体系结构)。对我来说,DITA最棒的地方在于它是基于主题的,这使得文档模块化和可重用。
DITA模式相对简单,好的XML编辑器提供了对可用元素和属性的有用见解。
DITA文档可以使用DITAMAP进行组合。例如,一个人可能会选择分发一份包含最少信息的"快速入门指南",而一份完整的"用户指南"将包含更多细节。美妙之处在于,两个文档都可以重用相同的信息;此外,文档可以输出为多种交付格式:
- XHTML(单个文件或分块)
- Docbook
使用DITA Open Toolkit(又名DITA-OT)可以轻松地处理将输出转换为交付格式的过程。此工具包可从以下位置获得:http://dita-ot.sourceforge.net其仅通过提取所提供的档案来安装。该工具包可以通过运行startcmd.bat
(在Windows上)或startcmd.sh
(类Unix系统)轻松访问。
自定义和品牌化PDF输出不是一项容易的任务。自定义XHTML输出要容易得多,但仍然需要了解XSL转换。可以通过创建插件并将其放置在DITA-OT的plugins
文件夹中进行自定义。我想强调的一件事是,一旦进行了定制,您必须调用ant -f integrator.xml
,更改才会变得明显。缺乏这些知识给我造成了很多困惑!
生成的XHTML文件非常简单(非常棒!),因为这使它们易于自定义。不过,添加HTML5 DOCTYPE并不是那么容易;但出于我的目的,这并不重要,因为我的PHP脚本只关心<body>
内部的内容。
我一直找不到任何好的所见即所得编辑器XMLMind似乎是一个非常好的所所得编辑器,也非常容易使用。我怀疑使用Aloha Editor之类的东西创建一个基于web的基本解决方案不会太难(http://aloha-editor.org)。
虽然定制PDF输出似乎很困难,但将所有文档生成为一个XHTML页面似乎很容易,然后可以使用CSS对其进行格式化,最后使用wkhtmltopdf
进行转换。我还没有决定我的解决方案,但至少对于那些无法(或没有时间)定制DITA-OT的XSL:FO样式表的人来说,这是一个可行的选择。
添加:经过一番搜索,我发现DITA-OT还有另一种开源替代方案,名为"Ditac",它似乎更容易使用,并产生更好的输出。该工具由"XMLMind"的创建者创建。虽然该工具是基于命令行的,但那些使用"XMLMind"的人可以从功能丰富的GUI中受益:
http://www.xmlmind.com/ditac/
注意:我留下了之前的答案,因为它可能对其他人有用