首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >软件设计:生成不同格式、不同布局的文档

软件设计:生成不同格式、不同布局的文档
EN

Software Engineering用户
提问于 2015-01-08 14:05:18
回答 1查看 183关注 0票数 3

我目前正在原型软件,它必须能够生成不同类型的文件格式不同的文件。文档可以是信函,也可以是收据,例如,作为Word文档、PDF或两者兼而有之。

我使用的是一个Word和PDF库,每个库都有各自的API。每种不同类型的文档可以有许多不同的布局和格式,包括自定义字体、图像、页眉和页脚。

我希望设计尽可能抽象,避免每种新类型的文档、布局和文件格式的具体实现呈指数增长。

首先,我认为我应该将PDF和Word文档API抽象为一些更通用的API。我觉得适配器模式最合适。例如,我可能有一个名为DocumentAdapter的接口,其中有两个名为PdfDocmentAdapter和WordDocumentAdapter的具体实现。

然后,我希望能够构建任何类型的文档,任何格式,任何布局。因此,我已经开始设计一个具有两个依赖项的DocumentBuilder类:一个文档适配器和一个文档规范。规范应该定义文档的布局,并且文件格式不可知。

DocumentBuilder将有一个名为BuildDocument的具体方法,它为适当的适配器和规范构建文档,然后将其写入文件系统。

问题是构建Word和PDF文档的API非常不同,我真的不知道如何最好地解决这个设计问题。

我可以拥有类似于LetterDocumentInterface -> PdfLetterDocument、WordLetterDocument、StandardPdfLetterDocument、ShortPdfLetterDocument、StandardWordLetterDocument、ShortWordLetterDocument之类的东西,但这会导致大量的具体类。

任何关于建造类似设计的提示或经验都将不胜感激。

EN

回答 1

Software Engineering用户

发布于 2015-01-08 14:24:11

几年前,当我面临类似的挑战时,我使用了DocBook。有可用于生成PDF、Word、HTML和其他输出格式的翻译程序。

我在这方面遇到了一些困难。

  • DocBook本身在很大程度上是面向书籍的。其他文档类型是专门化的,但是您需要所有的技巧。没有轻量级DocBook这样的东西。
  • 使用XSLT转换步骤从docbook源生成其他文档格式。当时,XSLT2.0处理器并不广泛,很难使用。
  • 预先打包的DocBook XSLT包是为了满足这些开发人员的特殊需求而开发的。因此,有一些晦涩而棘手的事情必须加以规避。

我最终开发了转换器来生成Word (OOXML)文档、PDF (生成Apache )文档和HTML。结果很好看。然而,到了这个时候,火车已经离开了车站,这个项目再也不能等我把这些东西发展到强健的程度了。

回顾过去,我建议使用类似于DocBook的简化文档格式,并使用XSLT生成不同格式的内容。然后,注入样式表可以满足您的其他需求。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/269433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档