9

我现在正在构建一个桌面应用程序,它将其人类可读的输出呈现为 WebBrowser 控件中显示的 XHTML。最终,必须将此输出从 XHTML 文件转换为成像系统中的文档图像。与 XHTML 文档不同,文档图像必须分成物理页面;另外——这就是让我死心的部分——这些页面上需要有页眉和页脚。

就像我想的那样,我不能简单地将 WebBrowser 打印到文件中——它支持的页眉/页脚选项还不够复杂。所以我正在尝试找出生成这些图像的正确技术。

在我看来(尽管这不是强制性的)我最终要做的是生成 HTML 文档的 PDF 版本(以便我可以添加页眉和页脚),然后将 PDF 呈现为 TIFF,这是最终格式成像系统想要的。所以我正在考虑:

  • 使用某种 XHTML 到 PDF 的转换软件。这样做的问题是,如果没有进行大量的评估和测试,我无法弄清楚我看过的产品是否有能力做我需要的事情,即获取现有的 XHTML 文档,用标题装饰它们和页脚并对它们进行分页。

  • 使用 XSL-FO 生成 PDF。作为一个忍者级别的 XSLT 极客在这里会有所帮助(这就是我最初制作 XHTML 的方式),但它似乎仍然是一个笨拙而缓慢的解决方案,有很多移动部件。这也意味着我将一个又大又笨重的 Java 程序插入到我漂亮干净的 .NET 系统的中间,尽管如果这是正确的答案,我肯定足够成年人这样做。

  • 使用一些我还没有想到的其他技术,比如 LaTeX。也许有一些神奇的页面成像工具可以将 XHTML 直接转换为带有页眉和页脚的 TIFF。那将是理想的。

我主要担心的是:

  • 我正在构建一个商业产品;我使用的任何技术都必须是负担得起且可支持的。它不一定是免费的。

  • 我不想在兔子洞里消失三个月,敲打这些东西让它发挥作用。从直觉上看,这似乎是一种问题空间,我可以在其中浪费大量时间来评估和拒绝工具。

  • 无论我采用什么解决方案,都需要对 XHTML 中的格式更改相对免疫。我使用 XSLT 并首先生成 XHTML 的全部原因是我正在生成的文档是使用不断变化的业务规则动态组装的。

我花了很多时间寻找替代品,但没有找到任何明显的答案。但也许你们中的一个好人已经解决了这个问题,如果是这样,我愿意站在你们的肩膀上。

4

13 回答 13

5

编辑(太平洋标准时间 2010 年 11 月 28 日下午 12:30)如果您下载我的代码,请 +1 这个答案。我注意到我的 Codeplex 示例已被下载了数百次。该代码并不引人注目,但它是一个很好的起点,其中包含许多指向源帮助的链接。谢谢!+tom 编辑(2009-03-29 9:00 AM PST) 发布样本转换
编辑(太平洋标准时间 2009 年 3 月 23 日下午 12:30,发布到 CodePlex)我为此开发了一个解决方案并将其发布到CodePlex。已发布的2.0 版是使用 WPF MVVP 模式编写的。TIFF 文件(每页一个)输出到 c:\Temp\XhtmlToTiff。XAML 和 XPS 格式也被创建。CricketSoft.com上提供了一个已编译、可安装的版本


您是否尝试过“ Microsoft XPS Document Writer ”?这是一款纯软件打印机,可从各种来源(包括网页)生成分页输出。

通常有一个用于处理 XPS 文档和 Open XML 文档的 SDK。这是 Beth Massi 的一篇操作指南文章:“使用 Open XML SDK 访问 Open XML 文档部件”。

+汤姆

于 2009-02-17T21:12:16.200 回答
3

只是我的 2p,但如果您是 XSLT 忍者,我建议您坚持下去。您可以通过查看 nFop 来避免讨厌的 java 程序,它是 apache FOP 项目的 C# 端口。很棒的是,您可以简单地获取程序集并使用直接将您的 XML 和 XSLT 传递给它来获得您想要的 PDF 输出。

http://sourceforge.net/projects/nfop/

希望有帮助。

于 2009-02-21T14:35:26.200 回答
2

如果 tiff 是您的目标,这可能是一种免费且低风险的方法:

  1. 使用组件为给定的 url 创建图像。我不确定我们使用的是哪个工具,但是 GIYF:我只是偶然发现了 SmallSharpTool 的 WebPreview 似乎可以完成这项工作
  2. 确保它可以创建整个页面的图像,即整个可滚动区域。
  3. 使用 ImageMagick 进行所有图像处理,例如将其切割成多个页面,添加您自己的页眉、页脚和页码以及转换为 tiff。

我个人在 C# 项目(控制台应用程序和网站)中单独使用了上述技术并取得了成功,因此我几乎可以保证这会奏效。

于 2009-02-17T19:53:41.363 回答
2

使用一些我还没有想到的其他技术,比如 LaTeX。

TexML,这是带有 XML 语法的 LaTeX 语义。要使用它,您可以创建 XSLT,它会用 TexML 命令装饰您的 XHTML(参见示例

于 2009-02-24T09:12:25.000 回答
1

你有没有想过使用后记?

ps:你需要什么样的页眉/页脚——你的自定义页眉/页脚放在中间?如果是这样,postscript 或 PDF 可能是最好的。但是创建 xhtml+css 到 pdf 转换器将非常困难。基本上,您需要有能够解析 xhtml 和 css 的库(+任何对象,如图像、flash 等)

于 2009-02-17T19:23:13.153 回答
1

PrinceXML是一个 XHTML/CSS 到 PDF 的转换器。它似乎具有您需要的功能:

  • 页眉/页脚、页码和双面打印。

我意识到您可能想要比这个更广泛的答案(对不起,我还没有评估该产品),但是,我希望它有所帮助!

于 2009-02-17T19:35:02.720 回答
1

这完全取决于质量对于生成的文档的重要性。您还需要对文档执行哪些其他操作也很重要。

我现在正在构建一个桌面应用程序,它将其人类可读的输出呈现为 WebBrowser 控件中显示的 XHTML。最终,必须将此输出从 XHTML 文件转换为成像系统中的文档图像。

看起来您的应用程序是一种软形式。您生成填写好的表格并保存它们。

[...]这些页面上需要有页眉和页脚。

这是简单的部分。您可以使用模板并将数据与静态页眉/页脚模板合并。你听起来好像在做 VDP。嗯。让我们继续前进。

我不能简单地将 WebBrowser 打印到文件中 - 它支持的页眉/页脚选项还不够复杂。

为什么这样?您所需要的只是一个有能力的司机。

在我看来(尽管这不是强制性的)我最终要做的是生成 HTML 文档的 PDF 版本

同样,尚不清楚您为什么要立即使用 PDF。PDF 是一种文档交换格式。本身不是 PDL。PostScript 是一个更好的选择。是的,我知道有诸如 XPS、PCL 之类的东西。但是,您使用 PS 获得的渲染控制和质量数量太多,无法冒险使用更便宜的解决方案。我说更便宜,因为您还需要记住可以使用的打印类型。PostScript 打印机(不是带有克隆 RIP 的打印机)通常更昂贵。

现在,回到您的 PDF 内容。是的,您当然可以生成 PDF。它具有某些优点,例如:

  • 更好地支持透明度(以及总体质量)
  • 档案
  • 换乘
  • 分享它以供审查
  • 预览/预检/更正
  • 安全
  • 流加密(用于安全性和传输到打印机的数据量)
  • 使用模板

但是请记住,您是否有任何打印机可以进行本机 PDF 翻录?因为您正在执行有损 PDF 到 PS/PCL 的转换。而你刚刚输掉了比赛。这让我回到 PostScript ;)

于 2009-02-20T16:55:47.650 回答
1

您可以将 PISA 用于Python。它使用reportlab工具包从html生成pdf(使用html5lib)

于 2009-02-21T15:12:15.817 回答
1

您也可以尝试使用PDFCreator并将文档打印为 PDF。PDFCreator 就像任何普通打印机一样,使用 ghostscript将打印机输出转换为pdf、tiff、jpeg 或任何您想要的。我认为您可以通过 IE 的 com 界面更改页眉和页脚项目并直接从 IE 打印。PDFCreator 在安装目录的 com 文件夹中有不同语言的示例。我已经使用它并且可以保证它。虽然只有 Windows。

于 2009-02-22T19:14:15.880 回答
1

你真的需要使用 XHTML/Web 浏览器吗?

我一直在试图生成好看的 HTML 报告时陷入这种困境,我发现的解决方案是……放弃 HTML 并使用“真正的”报告生成器,其中有很多,它们都支持所有您可以考虑的分页和页眉/页脚选项通常可以打印为 pdf,有时也可以直接打印为图像。

HTML 只是不适合报告的技术。

于 2009-02-22T20:49:35.980 回答
1

ExpertPDF HtmlToPdf Converter (www.html-to-pdf.net) 应该能够完全满足您的需求。使用起来非常简单,只需在项目中引用程序集并开始使用即可。我已经在几个工作项目中成功地使用了这个产品。

于 2009-02-24T10:21:48.297 回答
0

您提到了您当前的桌面应用程序以 xhtml 格式导出结果。由于 xhtml 是格式良好的 xml,因此您应该避免使用 xsl fo 将其导出为 pdf。

XML -> XSL-FO = PDF

这是初学者指南: http: //www.devx.com/xml/Article/16430

我的公司已经在荷兰政府的 java+cocoon webaplication 中使用了这种技术。

于 2009-02-24T13:53:21.393 回答
0

http://iecapt.sourceforge.net/

引用上述网站:

IECapt 是一个小型命令行实用程序,用于将 Internet Explorer 的网页渲染捕获为 BMP、JPEG 或 PNG 图像文件。C++ 版本还具有对增强型元文件矢量图形输出的实验性支持。IECapt 有 C++ 和 C# 版本。

于 2009-02-25T06:28:51.330 回答