我应该使用什么页面图像生成技术?

时间:2009-01-29 20:05:25

标签: c# .net formatting printing-web-page

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

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

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

  • 使用某种XHTML-to-PDF转换软件。这样做的问题是,如果不进行大量的评估和测试,我无法弄清楚我所看到的产品是否能够做我需要的,即采用现有的XHTML文档,用标题装饰它们和页脚并将它们分页。

  • 使用XSL-FO生成PDF。作为一个忍者级别的XSLT极客在这里有所帮助(这就是我首先制作XHTML的方式),但它仍然看起来像一个笨拙而缓慢的解决方案,有许多移动部件。这也意味着我将一个庞大的笨重的Java程序放在我干净的.NET系统中间,但如果这是正确的答案,我肯定已经足够成年了。

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

我主要担心的是:

  • 我正在建立一个商业产品;我使用的任何技术都需要经济实惠且可支持。它不一定是免费的。

  • 我不想在兔子洞里消失三个月,敲打这些东西让它发挥作用。这直观地看起来像是一种问题空间,我只能在评估和拒绝工具时浪费大量时间。

  • 我采用的任何解决方案都需要相对不受XHTML中格式化更改的影响。我首先使用XSLT并生成XHTML的全部原因是我正在使用的业务规则动态组装我正在生成的文档。

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

13 个答案:

答案 0 :(得分:5)

修改(2010-11-28 12:30 PM PST)如果您下载我的代码,请为此答案+1。我注意到我的Codeplex示例已被下载数百次。代码并不引人注目,但它作为一个很好的起点,包含许多源代码帮助链接。谢谢! +汤姆 修改(2009-03-29太平洋标准时间上午9:00)发布sample conversion
修改(2009-03-23太平洋标准时间下午12:30,发布到CodePlex) 我为此开发了一个解决方案并将其发布到CodePlex。已发布的version 2.0是使用WPF MVVP模式编写的。 TIFF文件(每页一个)输出到c:\ Temp \ XhtmlToTiff。还会创建XAML和XPS格式。已编译的可安装版本位于 CricketSoft.com

<小时/> 你试过“Microsoft XPS Document Writer”吗?这是一款纯软件打印机,可从各种来源(包括网页)生成分页输出。

一般情况下,有一个用于处理XPS文档和Open XML文档的SDK。以下是Beth Massi撰写的How-to文章:“Accessing Open XML Document Parts with the Open XML SDK”。

+汤姆

答案 1 :(得分:3)

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

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

希望有所帮助。

答案 2 :(得分:2)

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

  1. 使用组件为给定网址创建图片。我不确定我们使用了哪种工具,但是GIYF:我只是偶然发现SmallSharpTool的WebPreview似乎可以完成这项工作
  2. 确保它可以创建整个页面的图像,即整个可滚动区域。
  3. 使用ImageMagick进行所有图像处理,例如将其剪切成多个页面,添加自己的页眉,页脚和页面编号以及转换为tiff。
  4. 我个人在C#项目(控制台应用程序和网站)中单独使用上述技术并取得了成功,因此我几乎可以保证这将有效。

答案 3 :(得分:2)

  

使用我的其他技术   还没想到,就像   胶乳。

TexML ,这是具有XML语法的LaTeX语义。要使用它,您可以创建XSLT,它将使用TexML命令装饰您的XHTML(see example

答案 4 :(得分:1)

你有没有想过使用postscript?

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

答案 5 :(得分:1)

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

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

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

答案 6 :(得分:1)

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

  

我正在构建一个桌面应用程序,它提供了人类可读的输出     作为XHTML显示在WebBrowser控件中。最终,这个输出将会有     要从XHTML文件转换为成像系统中的文档图像。

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

  

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

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

  

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

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

  

我最终可能会做的事情(虽然不是强制性的)     生成HTML文档的PDF版本

同样,目前尚不清楚为什么要立即想要PDF。 PDF是文档交换 格式。不是PDL本身。 PostScript是一个更好的选择。是的,我知道有 像XPS,PCL等等。但是,渲染控制量和质量 你得到的PS远远不足以冒更便宜的解决方案。我说更便宜,因为, 你还需要记住你可以利用的打印类型。 PostScript打印机 (而不是具有克隆RIP的那些)通常更昂贵。

现在,回到你的PDF文件。是的,当然你可以生成PDF。它有一定的 优点如:

  • 更好地支持透明度(以及一般质量)
  • 档案
  • 交汇处
  • 将其分享以供审核
  • 预览/预检/正确
  • 安全
  • 流加密(安全性和传输到打印机的数据量)
  • 使用模板

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

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

答案 9 :(得分:1)

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

我一直处于这样的困境中,试图生成外观漂亮的HTML报告,我找到的解决方案是......删除HTML并使用“真正的”报告生成器,其中有很多,所有这些都是支持您可以考虑的所有分页和页眉/页脚选项,它们通常可以打印到pdf,有时也可以直接打印到图像。

HTML不适合用于报告。

答案 10 :(得分:1)

ExpertPDF HtmlToPdf转换器(www.html-to-pdf.net)应该能够完全满足您的需求。它使用起来非常简单,只需在项目中引用程序集并开始使用它。我在几个工作项目中使用过这个产品并取得了巨大的成功。

答案 11 :(得分:0)

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

XML - &gt; XSL-FO = PDF

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

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

答案 12 :(得分:0)

http://iecapt.sourceforge.net/

引用上述网站:

  

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