- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一个可以将文本和图形输出渲染到 PDF 文档的库。 (Cairo 当然是一个选项。)我想知道 OpenOffice 如何编写 PDF 文件,看看我是否可以使用相同的库。 OpenOffice 使用什么库来导出 PDF?
编辑:我正在寻找 C 或 C++ 库。
最佳答案
我到处寻找如何使用 OpenOffice 将任何文档导出为 PDF。我终于在 OpenOffice 论坛中找到了一个隐藏的帖子,它让我在那里达到了 90%。这是我的 100% 解决方案。适用于 OpenOffice 3.1。您必须安装 OpenOffice 才能使用此代码。您必须包括对 cli_basetypes、cli_cppuhelper、cli_oootypes、cli_ure、cli_uretypes 的引用。这些 dll 引用可在 OpenOffice SDK 中找到。抱歉,但这是在 C#.. 中,而不是 C/C++。 HTH某人。
using unoidl.com.sun.star.lang;using unoidl.com.sun.star.uno;using unoidl.com.sun.star.bridge;using unoidl.com.sun.star.frame;using unoidl.com.sun.star.beans;public static void ConvertToPDF(string inputFile, string outputFile) { if (ConvertExtensionToFilterType(Path.GetExtension(inputFile)) == null) throw new InvalidProgramException("Unknown file type for OpenOffice. File = " + inputFile); StartOpenOffice(); //Get a ComponentContext unoidl.com.sun.star.uno.XComponentContext xLocalContext = uno.util.Bootstrap.bootstrap(); //Get MultiServiceFactory unoidl.com.sun.star.lang.XMultiServiceFactory xRemoteFactory = (unoidl.com.sun.star.lang.XMultiServiceFactory) xLocalContext.getServiceManager(); //Get a CompontLoader XComponentLoader aLoader = (XComponentLoader)xRemoteFactory.createInstance("com.sun.star.frame.Desktop"); //Load the sourcefile XComponent xComponent = null; try { xComponent = initDocument(aLoader, PathConverter(inputFile), "_blank"); //Wait for loading while (xComponent == null) { System.Threading.Thread.Sleep(1000); } // save/export the document saveDocument(xComponent, inputFile, PathConverter(outputFile)); } catch { throw; } finally { xComponent.dispose(); } } private static void StartOpenOffice() { Process[] ps = Process.GetProcessesByName("soffice.exe"); if (ps != null) { if (ps.Length > 0) return; else { Process p = new Process(); p.StartInfo.Arguments = "-headless -nofirststartwizard"; p.StartInfo.FileName = "soffice.exe"; p.StartInfo.CreateNoWindow = true; bool result = p.Start(); if (result == false) throw new InvalidProgramException("OpenOffice failed to start."); } } else { throw new InvalidProgramException("OpenOffice not found. Is OpenOffice installed?"); } } private static XComponent initDocument(XComponentLoader aLoader, string file, string target) { PropertyValue[] openProps = new PropertyValue[1]; openProps[0] = new PropertyValue(); openProps[0].Name = "Hidden"; openProps[0].Value = new uno.Any(true); XComponent xComponent = aLoader.loadComponentFromURL( file, target, 0, openProps); return xComponent; } private static void saveDocument(XComponent xComponent, string sourceFile, string destinationFile) { PropertyValue[] propertyValues = new PropertyValue[2]; propertyValues = new PropertyValue[2]; // Setting the flag for overwriting propertyValues[1] = new PropertyValue(); propertyValues[1].Name = "Overwrite"; propertyValues[1].Value = new uno.Any(true); //// Setting the filter name propertyValues[0] = new PropertyValue(); propertyValues[0].Name = "FilterName"; propertyValues[0].Value = new uno.Any(ConvertExtensionToFilterType(Path.GetExtension(sourceFile))); ((XStorable)xComponent).storeToURL(destinationFile, propertyValues); } private static string PathConverter(string file) { if (file == null || file.Length == 0) throw new NullReferenceException("Null or empty path passed to OpenOffice"); return String.Format("file:///{0}", file.Replace(@"\", "/")); } public static string ConvertExtensionToFilterType(string extension) { switch (extension) { case ".doc": case ".docx": case ".txt": case ".rtf": case ".html": case ".htm": case ".xml": case ".odt": case ".wps": case ".wpd": return "writer_pdf_Export"; case ".xls": case ".xlsb": case ".ods": return "calc_pdf_Export"; case ".ppt": case ".pptx": case ".odp": return "impress_pdf_Export"; default: return null; } } }
关于pdf - OpenOffice PDF 导出库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1868974/
我想在我的 OpenOffice writer-document 中放置一个“签名字段”。 我需要 iOS/gPlay 应用程序 "PDF Forms"在触摸屏上签署 PDF 文档(手写/笔)。 根据
我已经以动态填充的Libre / OpenOffice Base形式获得了表控件。 我想更改其高度以匹配行数。 怎么做? 我已经尝试更改getSize() / setSize()和height属性,但
我在 Calc 电子表格中有几个数据列,每个列有 400 到 500 个条目。对于这些列中的每一列,我只想简单地找到均值和标准差,但不知道如何进行。 有人可以用简单而非技术性的语言逐步指导我如何做到这
我有两列有数字。当另一个有重复时,另一个只有一次数字。这些列中的数字不匹配。我需要在 B 列中找到在 A 列中匹配的所有数字。 这可能更好地解释了它: 甲乙 1 2 2 2 4 5 6 5 7 6 8
我想为 Calc 编写一个返回 #VALUE 的 Basic 函数!可使用 ISERR() 进行测试。 Function foo() foo = #VALUE! End Function 但是
我知道 OpenOffice.org 中的风格 .... 但 我想要与 HTML 样式相同的内联样式, 喜欢 (类似的东西)......这可能吗? 如果你知道这样的例子或文章,请引用我。 最佳答案
我正在尝试将 openOffice 作为 CentOS(非图形)服务器上的服务启动。 soffice -headless -nologo -nofirststartwizard -accept="so
有没有办法像在其他语言中一样在 OpenOffice Basic 中继续循环? For i = 0 To 10 If i = 5 Then Continue For # Not work
我正在尝试使用 OpenOffice 在 WinXP MSVC 2008.NET 上编写一个简单的“Hello World”窗口3.0 API和SDK。 这篇文章对于初学者来说很重要... http:
基本上,我希望 LibreOffice Calc 做我告诉它的,而不是它想要的。 例如: 当我输入 1.1.12 时,我想在那个单元格中有 1.1.12,而不是 01.01.2012 或其他什么。 当
让我们看看这个例子: 我有 HTML 标记的文本: Example text 我有 *.odt(OpenDocument 文本)文档,我想在其中放置此 HTML 文本,其格式取决于 HTML 标签(在
有没有什么方法可以在 linux 上将 odt 文档转换为 doc 或 rtf 而不使用 openoffice 或任何依赖于安装 openoffice 的库? 最佳答案 OpenOffice.org
我想过滤掉特定列上具有特定颜色的行。我尝试几乎到处搜索但找不到答案。希望大家给点好的建议,谢谢。 最佳答案 据我所知,目前没有内置函数允许根据单元格的格式选择单元格。但在 this OOo forum
我需要使用 OpenOffice Java API 复制文档部分并将其粘贴到另一个文档部分。到目前为止,我已经设法复制源文档部分的文本并将其粘贴到目标文档的部分(参见下面的示例)。 但是,问题是非文本
我有一个小问题,我需要计算控制台内的字数才能阅读 doc、docx、pptx、ppt、xls、xlsx、odt、pdf ......所以不要建议我 | wc -w 或 grep 因为它们只适用于文本或
是否可以将单元格的内容放在公式中。我所说的公式是指数学公式编辑器(插入-> 对象-> 公式)。 最佳答案 据我所知,无法从公式中引用单元格。数学公式编辑器对 OO Calc 一无所知。但是,您可以在需
在第一张原始数据和第二张修改数据中,如果 sheet1 和 sheet2 数据不匹配,我想比较两个工作表数据并用颜色标记。 我有两个不同的工作表,数据如下。 工作表 1: --------A-----
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
我编辑了一个来自客户的文档,其中有一些亮点,然后决定删除评论中的亮点。 无论出于何种原因,该文档突出显示了许多项目符号和编号列表部分,当我尝试选择整个文档并将突出显示更改为“无填充”时,我无法还原这些
我是 Calc 的新手,但我是 Excel 的老手。不幸的是,我没有后者。我正在尝试使用我需要使用的数据创建一个新的单元格,如下所示 AF Afghanistan AL Albania D
我是一名优秀的程序员,十分优秀!