代码之家  ›  专栏  ›  技术社区  ›  Soul_Master

你有没有免费的.NET管理代码来把docx转换成pdf?

  •  14
  • Soul_Master  · 技术社区  · 15 年前

    在我的Web项目中,我使用docx文件类型来包含报告模板。我需要将docx文件类型转换为pdf。您是否有任何.NET托管代码来执行此操作?

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

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

    • 使用一些免费的PDF打印机打印,如 PDFCreator . 但是我需要一些在服务器上打开docx的程序,比如Office2007。这是个很坏的主意。

    • 由自由转换程序转换。但结果并不完美。

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

    • 在PDF API中创建所有文档内容,如 iTextSharp . 但我必须努力创建好的文档。

    • 或者创建具有其他文件格式的模板文档,可以将其导出为docx和pdf文件格式。此外,最终用户应该很容易地编辑这个文件。如果你知道,请告诉我。

    谢谢,

    5 回复  |  直到 6 年前
        1
  •  9
  •   Jerry Bullard    15 年前

    我没有将docx转换为pdf的代码,但您对docx的要求似乎并不严格。最后一颗子弹说:

    或与其他人一起创建模板文档 可导出到docx的文件格式 和PDF文件格式。此外, 最终用户应轻松编辑此 文件。如果你知道,请告诉我。

    我读这篇文章的意思是,你希望能够创建一个模板文档,用数据填充它,并将其转换为PDF格式,同时允许维护模板,对吗?

    解决方案:XSL-FO

    XSL-FO是一种W3C标准,如HTML,可以通过许多开放源代码和商业产品转换为PDF、WordML、XPS、PS、PCL、SVG、TIFF等。我使用它每月交付数十万份文档,包括在线PDF和离线(如批量检查打印)。

    为了让你开始,这里是 W3C page for XML-FO . 这里有很多很好的信息,包括左侧的软件列表(开源和商业)。我个人用过两种叫 IBEX PDF Creator XEP by RenderX . 两者都是优秀的产品,并且有一个100%管理的C实现,以获得称为 FO.NET 打开codeplex。我没有试过,但它应该满足你的“自由”标准。

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

        2
  •  2
  •   Adrian O'Connor    15 年前

    安装Office2007和使用Word12对象库绝对是我想要的选择(在我自己的一些项目中也是如此)。

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

    如果您想要一个C示例来执行这个转换,请告诉我(这是非常简单的)。

    阿德里安


    这是我的密码,贴给杰森。这适用于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;
    

    所以,灵魂大师,你说的是你不想使用interop(尽管你不说为什么,我想知道),你不想为商业出口商买单,你想要完美的结果?

    恐怕我帮不了你。Interop每次都会给您带来完美的结果,而且您已经拥有了软件。如果你不使用它,你将不得不做出牺牲——不管是成本还是质量。

        3
  •  0
  •   Mark Redman    15 年前

    开放式办公室有API吗?那至少是个自由选择?

    使用报告工具(如ActiveReports/Crystal Reports)创建PDF(比使用ITextSharp容易得多)

        4
  •  0
  •   Rogerson Nazário Naresh    8 年前

    我已经用一个名为docx-to-pdf的免费组件解决了我的问题。 自由尖塔 .你可以在上面看到更多 this site . 使用起来很容易。

        5
  •  0
  •   Yitzchak    6 年前