Word Automation Services で固定形式のエクスポート機能を拡張するExtend the fixed-format export feature in Word Automation Services

Microsoft Office 2013 の Word Automation Services を拡張し、固定形式エクスポート機能で使用されるライブラリを置き換えます。Extend Word Automation Services in Microsoft Office 2013 to replace the library used by the fixed-format export feature.

Word ファイル変換サービスの固定形式エクスポート機能の概要Introduction to the Word file conversion service fixed-format export feature

この記事では、Microsoft から提供される固定形式エクスポート DLL をサードパーティの開発者が置き換えられるように、Word Automation Services の固定形式エクスポート機能を拡張して別の固定形式エクスポート DLL を使用する方法を説明します。これを行うには、Office クライアント固定形式拡張 COM インターフェイスを拡張する必要があります。詳細については、「 Office (2007) 固定形式エクスポート機能の拡張」を参照してください。This article describes how to extend the fixed-format export feature of Word Automation Services to use different fixed-format export DLLs, so third-party developers can replace those provided by Microsoft. This mechanism requires and extends the Office client fixed-format extensibility COM interface. For more information, see Extending the Office 2007 Fixed-Format Export Feature.

検出Discovery

Word Automation Services を使用すると、サードパーティの開発者はサポートされている次の固定形式の出力のどちらかまたは両方を置き換えることができます。Word Automation Services allows third-party developers to replace either or both of the fixed format outputs supported:

  • PDFPDF

  • XPSXPS

それぞれの形式を置き換えるには、Word Automation Services のコア ライブラリ (Sword.dll) と同じディレクトリに DLL を配置し (インストール パス: <<インストール ルート>>\WebServices\ConversionService\Bin\Converter\)、表 1 に示す特定の名前を DLL に付ける必要があります。To replace each format, the DLL must be located in the same directory as the core library (Sword.dll) for Word Automation Services (install path: <<install root>>\WebServices\ConversionService\Bin\Converter\), and must have the specific file name specified in table 1.

表 1. 固定形式のエクスポート DLL のファイル名Table 1. File names for fixed-format export DLLs

形式Format ファイル名File Name
PDFPDF
Renderpdf.dllRenderpdf.dll
XPSXPS
Renderxps.dllRenderxps.dll

初期化Initialization

DLL は、次のシグネチャが付いたメソッドをエクスポートする必要があります。The DLL must export a method with the following signature.


HRESULT HrGetDocExporter (
IMsoDocExporter **ppimde,
IMsoServerFileManagerSite *psfms,
PFNKeepAlive pfnKeepAlive
)

この関数は、以下のセクションで説明する 2 つのインターフェイスとメソッド ポインターを提供することを DLL に要求します。The function requires the DLL to supply two interfaces and a method pointer, described in the following section.

関数の呼び出しが失敗した場合、サービスは Microsoft が提供するエクスポーターにフォールバックしません。代わりに、サービスは変換の失敗を報告します。If the function returns failure the service will not fall back to the Microsoft-provided exporter. Instead, the service will report the conversion as having failed.

IMsoDocExporterIMsoDocExporter

IMsoDocExporter インターフェイスは、MSDN に掲載されている既存のインターフェイスと同じものです。詳細については、「 Office (2007) 固定形式エクスポート機能の拡張」を参照してください。前のメソッドの呼び出しが成功すると、このインターフェイスは変換を実行します。The IMsoDocExporter interface is identical to the existing interface documented on MSDN. For more information, see Extending the Office 2007 Fixed-Format Export Feature. When the previous method returns success, this interface performs the conversion.

前述の記事に示されている要件のほかに、固定形式エクスポート DLL の開発者は、サービスが HrGetDocExporter を呼び出したスレッドとは別のスレッド上の提供された IMsoDocExporter を呼び出せることを認識しておく必要があります。DLL は、 HrGetDocExporter を呼び出した元のスレッドに呼び出しをマーシャリングすることなくこれを処理する必要があります。サービスはメッセージ ポンプを実行せず、マーシャリングされた呼び出しは届かないからです (ハングした後、失敗に終わります)。Beyond the requirements described in the aforementioned article, developers of fixed-format export DLLs must be aware that the service can call the provided IMsoDocExporter on a different thread from the one on which the service called HrGetDocExporter. The DLL must be able to handle this without marshalling the call back to the thread that called HrGetDocExporter, because the service does not run a message pump and the marshaled call will never get through (resulting in a hang and subsequent failure).

IMsoServerFileManagerSiteIMsoServerFileManagerSite

IMsoServerFileManagerSite インターフェイスは次のように定義されます。The IMsoServerFileManagerSite interface is defined as follows.


#undef  INTERFACE
#define INTERFACE  IMsoServerFileManagerSite
DECLARE_INTERFACE(IMsoServerFileManagerSite)
{
STDMETHOD_(BOOL, FGetHandle) (const WCHAR *pwzFileName, HANDLE *phFile, BOOL fRead, BOOL fWrite) PURE;
STDMETHOD_(BOOL, FCloseHandle) (HANDLE hFile) PURE;
};

このインターフェイスは次のメソッドを公開します。This interface exposes the following methods.

表 2. IMsoServerFileManagerSite インターフェイスが公開するメソッドTable 2. Methods exposed by the IMsoServerFileManagerSite interface

メソッドMethod
説明Description
FGetHandleFGetHandle
ファイル ハンドルを取得します。Gets a file handle.
FCloseHandleFCloseHandle
ファイル ハンドルを解放します。Releases a file handle.

このインターフェイスは IUnknown を継承しません。したがって、固定形式エクスポート DLL は存続期間中、このインターフェイスへの参照を保持できます。This interface does not inherit from IUnknown. Accordingly, the fixed-format export DLL is allowed to keep a reference to it for its lifetime.

FGetHandleFGetHandle

固定形式エクスポート DLL はこの関数を呼び出して、書き込み先のファイル ハンドルを取得します。これ以外の方法でファイルを開くことはできません。サービスは、ファイル システムのほとんどの場所にアクセスできないきわめて制限された環境で実行されるからです。The fixed-format export DLL calls this function to get file handles to write to. It must not try to open files through any other mechanism because the service runs in a highly restricted environment without access to most places in the file system.


BOOL FGetHandle (
const WCHAR *pwzFile,
HANDLE *phFile,
BOOL fRead,
BOOL fWrite
)

表 3. FGetHandle のパラメーターTable 3. FGetHandle parameters

パラメーターParameter
説明Description
pwzFilepwzFile
固定形式エクスポート DLL が開くファイルの名前を指定します。完全なファイル パスではなく、ファイル名のみを指定する必要があります (例: Output.pdf)。Specifies the name of the file the fixed-format export DLL wants to open. This must not be a full file path—it must specify only a file name (for example, Output.pdf).
phFilephFile
ファイルが正常に開いた場合に、指定したファイルのハンドルを指定します。これにより、固定形式エクスポート DLL は FCloseHandle メソッドを呼び出してファイルを閉じるまで、この HANDLE を通常のファイル操作で使用できるようになります。Specifies the handle to the specified file, if the file is opened successfully. The fixed-format export DLL can then use this HANDLE in normal file operations until it closes it by calling the FCloseHandle method.
fReadfRead
ファイルを読み取りアクセス権付きで開くかどうかを指定します。Specifies whether the file is to be opened with read access.
fWritefWrite
ファイルを書き込みアクセス権付きで開くかどうかを指定します。成功した場合は TRUE が返り、失敗した場合は FALSE が返ります。Specifies whether the file is to be opened with write access. This function returns TRUE to indicate success and FALSE to indicate failure.

FCloseHandleFCloseHandle

固定形式エクスポート DLL はこの関数を呼び出して、 FGetHandle メソッドの呼び出しによって取得したファイル ハンドルを閉じます。The fixed-format export DLL calls this function to close file handles obtained through calls to the FGetHandle method.


BOOL FCloseHandle (
HANDLE phFile,
)

phFile パラメーターは、閉じるファイルのハンドルを指定します。このメソッドによって返された値が 0 の場合、処理は失敗です。それ以外の値の場合は成功です。The phFile parameter specifies the handle to the file to be closed. If the value returned by this method is 0, the operation failed. All other values indicate success.

PFNKeepAlivePFNKeepAlive

固定形式のエクスポート DLL がアクティブなときは、この DLL が応答していないとサービスが判断してプロセスを終了することがないように、KeepAlive 関数を (管理者が構成する) 一定の間隔で呼び出す必要があります。When the fixed-format export DLL is active, it must call the KeepAlive function at regular intervals (configurable by the administrator) to prevent the service from assuming that the fixed-format export DLL is not responding, and thus terminating the process.

typedef void (*PFNKeepAlive)(void)

関連項目See also

詳細については、以下を参照してください。For more information, see the following resources: