在我的web项目中,我使用的docx文件类型包含报告模板。 我需要的docx文件类型转换为PDF。 你有没有做任何.NET托管代码?
我知道解决这个问题的几种方法。 但它不是托管代码和自由类似下面的项目。
字12.0对象库以编程方式保存一个Word 2007文档无论是作为PDF文档或XPS文档。 但是,它需要在服务器上安装Office 2007。
通过使用像一些免费的PDF打印机打印的PDFCreator 。 但我需要开放DOCX一些程序上,如Office 2007服务器这是非常糟糕的主意。
通过免费的转换程序转换。 但结果并不理想。
使用像框架XF渲染服务器 。 这是很不错的主意,但它不是免费的。
创建PDF阿比像所有的文档内容iTextSharp的 。 但我必须努力创造好的文件。
或者创建拥有其他文件格式模板文件,可以将其导出为DOCX和PDF文件格式。 此外,最终用户应该很容易编辑该文件。 如果你知道,请告诉我。
谢谢,
我没有代码,DOCX转换为PDF格式,但它似乎您的DOCX的要求是不牢固。 你的最后一颗子弹说:
或者创建拥有其他文件格式模板文件,可以将其导出为DOCX和PDF文件格式。 此外,最终用户应该很容易编辑该文件。 如果你知道,请告诉我。
我读这意味着你希望能够创建一个模板文件,用数据填充它,它隐蔽到PDF,但允许维持模板,对不对?
解决方案:XSL-FO
XSL-FO是W3C标准,如HTML,并可以通过多种开源和商业产品到PDF,WordML中,XPS,PS,PCL,SVG,TIFF等的转变我已经使用这个提供成千上万的文件每月,不论是在线PDF和离线(东西类似散装支票打印)。
为了让您一开始,这里是对XML-FO W3C网页 。 有很多好的信息出现,包括软件下左侧的列表(开源和COMMECIAL)。 我曾亲自使用2个商业产品被称为IBEX PDF造物主和XEP通过RenderX 。 两者都是优秀的产品,并有一个100%托管C#实现去PDF叫FO.NET了CodePlex上。 我没有试过,但它应该满足你的“自由”的标准。
有多种方法可以编辑模板在XSL-FO来创建文档。 通常,该模板是适用于您的XML数据的XSLT,但这不是必需的。 我已经通过手工打造这些,但它是一个学习曲线。 您可以在XSL-FO文件开始,并填写与代码它的部分,就像你可以HTML。 好消息是, 有 是 一些 XSL-FO的编辑那里。 坏消息是,没有我所知道的是免费的,但有几个很便宜,你可能会发现一些符合免费条件有一点谷歌搜索。 然而,一种选择是,你可以从Word中使用样式表(转换商业 & 免费 )。
安装Office 2007,并使用Word 12对象库肯定是我会去(而且有一些我自己的项目做)的选项。
如果你不想在生产Web服务器上安装Word,为什么不把它在辅助服务器上。 你可以得到这个第二服务器与第一通信(使用Web服务或类似的东西) - 它可以要求出口需求在未来的Word文档,进行转换,然后返回PDF数据。
让我知道如果你想的话自动化,做这种转换(这是非常简单)的C#示例。
阿德里安
这里是我的代码,贴贾森。 这适用于Word 2007中,您需要下载并安装了Office Web站点上的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,你说的是,你不想互操作使用(尽管你不说为什么,我很想知道),你不想来支付商业出口国,你想完美的效果?
我不能帮你,我怕。 互操作会给你完美的效果,每一次,你已经有了软件。 如果你不会使用,你将不得不作出牺牲 - 无论成本或质量。
是否开放办公室有一个API? 这将至少是一个自由的选择吗?
创建使用报告工具一样的ActiveReports的PDF /水晶报表(不是使用iTextSharp的容易得多)
我已经解决了我的问题,DOCX转换为PDF与所谓的自由Spire.Doc一个免费的组件。 你可以看到更多关于它的这个网站 。 这是很容易您的使用情况。
你可以尝试使用OpenOffice.org
http://abdulmunim.com/how-to-convert-office-documents-to-pdf-using-open-office-in-csharp/