你有任何免费的.Net托管代码,用于将DocX转换为PDF吗?

时间:2009-08-31 09:49:05

标签: asp.net pdf docx

在我的网站项目中,我使用DocX文件类型来包含报告模板。我需要将DocX文件类型转换为PDF。你有这个.Net托管代码吗?

我知道解决这个问题的几种方法。但它不是托管代码,而是像以下项目一样免费。

  • Word 12.0 Object Library以编程方式将Word 2007文档另存为PDF文档或XPS文档。但它需要在服务器上安装Office 2007。

  • 使用PDFCreator之类的免费PDF打印机进行打印。但我需要在Office 2007等服务器上打开DocX的程序。这是非常糟糕的主意。

  • 通过免费转换程序转换。但结果并不完美。

  • 使用XF Rendering Server之类的框架。这是个好主意但不是免费的。

  • 以PDF格式创建所有文档内容,如iTextSharp。但我必须努力创造好的文件。

  • 或者创建其他文件格式的模板文档,可以将其导出为DocX和PDF文件格式。此外,最终用户应该轻松编辑此文件。如果您知道,请告诉我。

谢谢,

5 个答案:

答案 0 :(得分:9)

我没有将DocX转换为PDF的代码,但似乎您对DocX的要求并不牢固。你的最后一颗子弹说:

  

或者用其他人创建模板文档   可以将其导出到DocX的文件格式   和PDF文件格式。此外,   最终用户应该轻松编辑此内容   文件。如果你知道,请告诉我。

我读到这意味着您希望能够创建模板文档,用数据填充并将其转换为PDF,但允许维护模板,对吧?

解决方案:XSL-FO

XSL-FO是象HTML的W3C标准,并且可以通过许多开源和商业产品进入PDF,WordML中,XPS,PS,PCL,SVG,TIFF等的转化我已经使用这个传送数百每月数千份文件,无论是在线还是PDF和离线(如批量检查打印)。

为了帮助您入门,这里是W3C page for XML-FO。那里有很多好的信息,包括左侧的软件列表(开源和商用)。我亲自使用了两种名为IBEX PDF CreatorXEP by RenderX的商业产品。两者都是优秀的产品,并且在CodePlex上有一个100%管理的C#实现来获取名为FO.NET的PDF。我没有试过这个,但它应该满足你的“免费”标准。

您可以通过多种方式编辑要在XSL-FO中创建的文档的模板。通常,此模板是您应用于XML数据的XSLT,但这不是必需的。我手工制作了这些,但它有点学习曲线。您可以从XSL-FO中的文档开始,并使用代码填充其中的部分,就像您可以使用HTML一样。好消息是那里有there are a number of XSL-FO editors。坏消息是,我所知道的都不是免费的,但其中有些是便宜的,你可能会发现一些符合免费标准的东西,只需要一点谷歌搜索。但是,一个选项是您可以使用样式表(commercial& free)从Word转换。

答案 1 :(得分:2)

安装Office 2007并使用Word 12对象库绝对是我应该选择的选项(并且已经在我自己的一些项目中完成)。

如果您不想在生产Web服务器上安装Word,为什么不在辅助服务器上安装Word。您可以让第二台服务器与第一台服务器通信(使用Web服务或类似的东西) - 它可以请求下一个需要导出的Word文档,进行转换然后返回PDF数据。

如果您想要进行此转换的Word自动化的C#示例(这非常简单),请告诉我。

阿德里安


这是我为Jason发布的代码。这适用于Word 2007.您需要从Office网站下载并安装PDF导出器:

using Microsoft.Office.Interop.Word;

...

object _read_only = false;
object _visible = true;
object _false = false;
object _true = true;
object _dynamic = 2;
object  _missing = System.Reflection.Missing.Value;

object _htmlFormat = 8;        
object _pdfFormat = 17;
object _xpsFormat = 18;

object fileName = "C:\\Test.docx";

ApplicationClass ac = new ApplicationClass();
//ac.Visible = true; // Uncomment to see Word as it opens and converts the document
//ac.Activate();

Document d = ac.Documents.Open(ref fileName, ref _missing, ref _true, ref _read_only, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _visible, ref _missing, ref _missing, ref _missing, ref _missing);

object newFileName = ((string)fileName).Substring(0, ((string)fileName).LastIndexOf(".")) + ".pdf";

d.SaveAs(ref newFileName, ref _pdfFormat, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing);

d.Close(ref _false, ref _missing, ref _missing);
ac.Quit(ref _false, ref _missing, ref _missing);

ac = null;

所以,Soul_Master,你说的是你不想使用互操作(虽然你不说为什么,我有兴趣知道),你不想支付商业费用出口商,你想要完美的结果?

我不能帮助你,我很害怕。 Interop每次都会为您提供完美的结果,并且您已拥有该软件。如果你不使用它,你将不得不做出牺牲 - 无论是成本还是质量。

答案 2 :(得分:0)

Open Office是否有API?那至少是一个免费的选择吗?

使用ActiveReports / Crystal Reports等报表工具创建PDF(比使用iTextSharp容易得多)

答案 3 :(得分:0)

答案 4 :(得分:0)

我已经使用名为 Free Spire.Doc 的免费组件解决了docX到pdf转换的问题。您可以在this site上查看有关它的更多信息。这很容易使用。