65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 OpenOffice.org (便携版) 将 Microsoft Word 文档转换为 PDF 格式

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.67/5 (18投票s)

2006年10月6日

CPOL

5分钟阅读

viewsIcon

324726

downloadIcon

7283

一篇关于使用 OpenOffice.org 便携版将 Word 文档转换为 PDF 的文章,无需在客户端机器上安装 OpenOffice.org。

Convert Microsoft Word Documents to PDF using OpenOffice.org

目录

引言

本文介绍了一种使用 OpenOffice.org 便携版将 Microsoft Word 文档转换为 PDF 格式的方法。使用 OpenOffice.org 便携版的目的是避免在客户端机器上安装 OpenOffice.org。操作非常简单,我们只需在代码中执行 OpenOffice.org 便携版(就像从命令行运行它一样),并带有一些参数,这些参数指示它运行一个处理转换的宏。

据我所知,CodeProject 上有两篇文章解释了如何进行此转换

前者是一种非常复杂的方法,您必须安装 MS-Office。不过,如果您正在处理 Word 文档,您无论如何都会安装它;后者要求您已安装 OpenOffice.org,这还不错,但我想通过使用 XCopy 样式的​​方法来避免安装它的任务。

要求

在运行演示或使用代码的应用程序之前,您需要下载并将 OpenOffice.org 便携版解压到应用程序所在的同一目录中。2.0.3 或更高版本应该可以正常工作,因为一个错误已得到修复,并允许我们隐藏运行 OpenOffice.org 便携版。完成此操作后,您需要添加以下宏。

在您解压文件的 OpenOfficePortable\ 目录中执行 OpenOfficePortable.exe;第一次运行时,会出现一个向导。按照说明操作,您无需注册即可使应用程序正常工作。完成此操作后,您应该会看到 OpenOffice.org 主窗口。

选择工具->宏->组织宏->OpenOffice.org Basic

OpenOffice.org main window

单击“组织者...”然后在“库”选项卡中创建一个新库,命名为“ConversionLibrary”

Create the new library

切换到“模块”选项卡,选择“ConversionLibrary”,然后创建一个名为“PDFConversion”的新模块

create the new module

完成此操作后,单击“编辑”按钮打开宏编辑器。默认情况下已经有一个名为 Main 的宏。您可以替换它或保留它。将以下代码粘贴到编辑器中,保存并关闭

REM  *****  BASIC  *****
Sub ConvertWordToPDF( cSourceFile , cDestinationFile)
   cURL = ConvertToURL( cSourceFile )
   ' Open the document.
   ' Just blindly assume that the document
   ' is of a type that OOo will
   '  correctly recognize and open -- 
   '   without specifying an import filter.

   oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, _
          Array(MakePropertyValue( "Hidden", True ),) )

   cURL = ConvertToURL( cDestinationFile )
   
   ' Save the document using a filter.   
   oDoc.storeToURL( cURL, _
     Array(MakePropertyValue( "FilterName", "writer_pdf_Export" ),)
   
   oDoc.close( True )
End Sub


Function MakePropertyValue( Optional cName As String, _
         Optional uValue ) As com.sun.star.beans.PropertyValue
   Dim oPropertyValue As New com.sun.star.beans.PropertyValue
   If Not IsMissing( cName ) Then
      oPropertyValue.Name = cName
   EndIf
   If Not IsMissing( uValue ) Then
      oPropertyValue.Value = uValue
   EndIf
   MakePropertyValue() = oPropertyValue
End Function 

原始宏在 OpenOffice.org 论坛中找到。

我根据我的需要修改了它,您也可以。

现在您应该能够运行演示应用程序或您自己的应用程序了。如果您已经这样做了,您可能会注意到 OpenOffice.org 便携版启动画面。要禁用此行为,请阅读下面的 隐藏 OpenOffice.org 便携版启动画面部分。如果您对库、模块、宏、目录使用了不同的名称
OpenOffice.org 便携版或可执行文件名称;您应该在应用程序配置文件(演示中的 UsingOpenOffice.exe.config)中更改这些值。

注意

如果您在自己的应用程序中使用代码,则必须在 appSettings 部分添加一个带有以下键的应用程序配置文件,否则将抛出异常。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="PortableOpenOfficeDirectory" 
             value="OpenOfficePortable\"></add>
        <add key="PortableOpenOfficeExecutable" 
             value="OpenOfficePortable.exe"></add>
        <add key="PortableOpenOfficeConversionLibrary" 
             value="ConversionLibrary"></add>
        <add key="PortableOpenOfficeConversionModule" 
             value="PDFConversion"></add>
        <add key="PortableOpenOfficeConversionFunction" 
             value="ConvertWordToPDF"></add>
    </appSettings>
</configuration>

隐藏 OpenOffice.org 便携版启动画面

要隐藏 OpenOffice.org 便携版启动画面,请将 OpenOfficePortable\Other\OpenOfficePortableSource 目录中的 OpenOfficePortable.ini 文件复制到
OpenOfficePortable\ 并编辑它,将 DisableSplashScreen=false 的值更改为 DisableSplashScreen=true。我还将 WaitForOpenOffice=false 的值更改为 WaitForOpenOffice=true。阅读 OpenOffice.org 便携版的文档以了解更多选项。

Copy and modify the configuration file

[OpenOfficePortable]
OpenOfficeDirectory=App\openoffice
SettingsDirectory=Data\settings
OpenOfficeExecutable=soffice.exe
AdditionalParameters=
WaitForOpenOffice=true
RunDataLocally=false
DisableSplashScreen=true

警告

使用 OpenOffice.org 便携版存在已知问题,您至少应该阅读 本文。如果您可以运行 OpenOffice.org 便携版并手动进行转换,则代码正常运行的可能性更大。

长路径和奇怪字符 - OpenOffice.org 不喜欢从过长的路径运行。因此,虽然它可以直接从桌面运行,但如果将其放在桌面上的子目录中,它可能会因某些文件损坏而失败。OpenOffice.org 也不喜欢路径中的某些字符,例如美元符号。这就是为什么最好将 OpenOfficePortable 目录放在驱动器根目录或驱动器根目录中的 PortableApps 目录中的原因。确切长度正在确定中,启动器的下一个版本将检查此问题。

因此,尽量将您的应用程序或演示放在一个短路径中,以便 OpenOffice.org 便携版路径例如:c:\Program Files\Your Company\Your Program\OpenOfficePortable 可能会正常工作,但如果您尝试类似:C:\Documents and Settings\Your User\My Documents\Visual Studio Projects\Your Project\bin\Debug\OpenOfficePortable 可能会失败。

使用代码

在完成所有必需的操作后——下载 OpenOffice.org 便携版并将其解压到应用程序的同一文件夹中,添加宏并在需要时配置应用程序和 OpenOffice.org 便携版配置文件——您可以通过简单地将 OpenOffice.cs 文件添加到您的项目或添加对 DLL 的引用,然后以下列方式调用它来使用代码

//using PortableOpenOffice;//uncomment this if you added a reference to the dll
OpenOffice.Instance.ConvertToPDF(SourceFileName,DestinationFileName);

兴趣点

尽管本文解释了如何使用 OpenOffice.org 便携版将 Microsoft Word 文档转换为 PDF 格式,但它也可以用于进行许多其他转换。您只需修改此示例中使用的宏。即使不修改宏,您也可以将任何 OpenOffice.org 支持的格式转换为 PDF,因为我们依赖于文档会被 OpenOffice.org 识别并打开(未在宏中指定任何导入过滤器)。

结论

本文介绍了一种将 Microsoft Word 文档转换为 PDF 格式的非常简单的方法。所有实际工作都由 OpenOffice.org 完成,因此请务必访问他们的网站并阅读他们软件的许可。您还应该访问 这个网站,它在制作许多便携式应用程序(以便我们无需安装软件)方面做了大量工作。

© . All rights reserved.