XSL Formatter V2 Q&A

プログラミング

サーバ上でのプログラミング

.NET プログラミング

COM プログラミング

Java プログラミング

トップ
基本・一般
XSL Formatter について
操作方法
プログラミング
XSLT/XSL-FO 仕様について
XSLT/XSL-FO テクニック
索引

サーバ上でのプログラミング

Q.  IISを使用して、ASPでXSL Formatterを使用してPDFファイルを出力するには。 [No.2002030103]
A. 

こちらにASPスクリプトファイルと、これを呼び出すHTMLファイルを用意いたしました。ご参考にしていただければと思います。


Q.  ASPを使用してPDFをローカルのハードディスクに保存させようとするとエラーになってしまいます。 [No.2002041901]
A. 

通常ASPにてサーバにリクエストを出した場合、サーバはこのクライアントをGuestアカウント(IUSERアカウント)として処理します。よってGuestアカウントにて書き込みが許されないストレージに書き込みを行おうとしますので、エラーとなります。よって、PDFを保存したいストレージに対してGuestアカウント(IUSERアカウント)に書き込み権限を与えてください。


Q.  ASPを使用してPDFを作成するとき、PDFをローカルのハードディスクではなくASP呼び出しクライアントのブラウザに直接表示させることは可能ですか。 [No.2002070501]
A. 

「PDF出力オプション」を使用すれば、作成したPDFデータを直接クライアントのブラウザに表示させることが可能です。
Server.CreateObjectにて明示的にサーバ側にオブジェクトを生成させてください。
プロパティを次のように指定してください。

  • "PrinterName" プロパティに "@PDF" を指定。
  • "OutputFile" プロパティの指定をなしにする。

Q.  XSL FormatterにFOをDOMで引き渡し、なおかつPDFストリームを直接クライアント側ブラウザに表示させたいと思いますが、このような運用は可能でしょうか。 [No.2002093010]
A. 

XSL Formatter V2.3 からFOをDOMで引き渡すことが可能になりました。(SDKをご購入いただく必要もありません。)また、IISでASPを使用した場合に限りますが、PDFストリームを直接クライアント側ブラウザに出力することができます。


Q.  XSL Formatter をサーバで使用して、組版結果をクライアント側に送ることは可能ですか。 [No.2002100402]
A. 

APSからAXFOSVR.XFOObjを利用している場合に限って、クライアントのブラウザへのPDFのstream出力をサポートしています。それ以外の場合の AXFOSVR.XFOObjの利用については、未サポートですので、その場合は一旦出力結果を一時ファイルにしてから、それをブラウザに送るような処理をする必要があります。


Q.  XSL Formatterをサーバにインストールして、XSL FormatterのCOMインターフェイスをクライアント側から使用することは可能ですか。 [No.2002102501]
A. 

サーバにインストールされたXSL Formatterをクライアント側から(GUI、COMインターフェイスなどで)使用することはサポートしていません。 もし XSL Formatter をサーバ上で運用させたい場合は、XSL Formatter を呼び出すアプリケーションを作成して、このアプリケーションをクライアント側から使用してください。


Q.  XSL Formatter を ASP から使用する際、PDF への出力ページ数を 'StartPage'と 'EndPage' で指定したのですが、全ページ印刷されてしまいます。不具合ではないでしょうか。 [No.2003011703]
A. 

ASP には次のように書かれていました。

XMLFO.Source = Input_XMLFilename

XMLFO.Stylesheet = Input_XSLFilename
XMLFO.OutputFile = Output_Filename
XMLFO.PrinterName = "@PDF"

XMLFO.Startpage = 1
XMLFO.Endpage = 3

XMLFO.Clear()

XMLFO.Execute()
(XSL Formatter 呼び出し部分のみ抜粋)

問題は、Execute() メソッドを呼び出す直前の Clear() メソッドにあります。 ここでClear()メソッドを呼ぶと、Startpage、Endpageに指定したページ数が初期化されてしまい、結果全ページが出力されます。
Clear()メソッドは、XSL Formatter を使用する最初に行うのが良いでしょう。


Q.  ASP を使用して PDF ストリームを直接クライアントブラウザに表示させようとしたのですが、クライアントブラウザに PDF が表示されません。なぜですか。 [No.2003030701]
A. 

ASP には下記のように書かれていました。

<%
dim objXML
set objXML = CreateObject("MSXML2.DOMDocument.3.0")
objXML.async = False
objXML.load "C:\inetpub\wwwroot\fo\test.fo"

dim objAXF
Set objAXF = Server.CreateObject("AXFOSVR.XFOObj")

objAXF.Clear()
objAXF.foXMLDOM = objXML
objAXF.PrinterName= "@PDF"
objAXF.OutputFile = ""

objAXF.ExtLevel=1

Response.ContentType = "application/pdf"
objAXF.Execute()
%>
<%'=objAXF.ErrorCode%>
<%
set objAXF=nothing
%>

原因は objAXF.Execute() の後の <%'=objAXF.ErrorCode'%> にあります。たぶんエラーが発生した場合にクライアントブラウザにエラーを表示させようとして指定したと思われます。
しかし、正常終了しても、objAXF.ErrorCode には'0'(zero)が設定され、これがクライアントブラウザに表示されます。したがってクライアントブラウザにはPDFは表示されません。
もしエラーが発生した場合のみ、エラーをクライアントブラウザに表示させたいのならば、下記のように記述してください。

<%
dim objXML
set objXML = CreateObject("MSXML2.DOMDocument.3.0")
objXML.async = False
objXML.load "C:\inetpub\wwwroot\fo\test.fo"

dim objAXF
Set objAXF = Server.CreateObject("AXFOSVR.XFOObj")

objAXF.Clear()
objAXF.foXMLDOM = objXML
objAXF.PrinterName= "@PDF"
objAXF.OutputFile = ""

objAXF.ExtLevel=1

Response.ContentType = "application/pdf"
objAXF.Execute()
Response.End

if objAXF.ErrorCode <> 0 then
    Response.Write "Error: " & objAXF.ErrorCode & " " & objAXF.Reason
end if

Set objAXF = Nothing
Set objXML = Nothing

Q.  AXFOSVR.XFOObj の SetParamメソッドを使用して、xsl:paramの値を変化させようとしたのですが、うまく行きません。 [No.2003032802]
A. 

「SetParam」メソッドは、MSXML4またはMSXML3をXSLTプロセッサとして使用する場合のみ有効です。使用しているプロセッサがMSXML4またはMSXML3かどうか確認してください。


Q.  IIS 経由にて XSL Formatter を使用しようとしたときに「IIS send an error : IID_IXFOCtl failed」というエラーが発生します。 [No.2003060603]
A. 

XSL Formatter を呼び出す ASP には次のように書かれています。

xlsfo.Source      = Application("TMPFileDirectory") & xmlFileName
xlsfo.Stylesheet  = Application("XSLFileDirectory") & xslFileName
xlsfo.PrinterName = "@PDF"
xlsfo.OutputFile  = Application("WriteTemplateDirectory") & TempFileName

このとき、"WriteTemplateDirectory" ディレクトリに書き込み権限がないユーザがこの ASP を動作すると「IIS send an error : IID_IXFOCtl failed」というエラーが発生する場合があります。
このときは、ASP を実行するユーザが "WriteTemplateDirectory" ディレクトリに対して書き込み権限があるか確認してください。


.NET プログラミング

Q.  XSL Formatter は .NET API をサポートしていますか。 [No.2002102502]
A. 

XSL Formatter V2.5改訂3版とXSL Formatter V3から.NETインターフェイスを用意しております。


COM プログラミング

Q.  XSL Formatter のCOMインターフェイスを使用して、PDFファイルを作成するには。 [No.2002011537]
A. 

PrinterName プロパティに "@PDF" を指定することでPDFファイルを出力できます。 こちら にサンプルを用意しましたので参考にしてください。


Q.  XSL FormatterのCOMインターフェイスを使用したサンプルソースはありませんか。 XSL FormatterのCOMインターフェイスでのエラー処理方法を知りたい。 [No.2002011543]
A. 

XSL Formatter のCOMインターフェイスは、Executeメソッドのリターン値と例外エラーにて終了状況を返します。 C++ サンプルソースVB Script サンプルソース の、サンプルを用意しましたので参考にしてください。


Q.  XMLをDOM形態でXMLドキュメントのかわりに渡すことは可能ですか。 [No.2002093006]
A. 

V2.3からCOMインターフェイスにDOMを引き渡すためのプロパティを用意致しました。詳しくはXSL Formatterのオンラインマニュアルをご覧ください。 こちら に VBS のサンプルを用意しましたので参考にしてください。


Q.  XSL FormatterをCOMで使用したとき、「画像がない」等のエラーが取得できないがなぜか。 [No.2002100403]
A. 

エラーの発生状況はエラーオブジェクト(VBSではErrオプジェクト)だけではなく、XSL FormatterのErrorプロパティでも返ってきますので、こちらも確認するようにプログラミングしてください。


Q.  COMインターフェイス'AXFO.XFOCtl'にFOのDOMオブジェクトを引き渡したときに「画像が見つかりません」のエラーが発生します。なぜですか。 [No.2002101505]
A. 

下記がそのときのソースコード(VBscript)の一部です。

dim domXML
set domXML = CreateObject("MSXML2.DOMDocument.3.0")
domXML.async = False
domXML.load "data/document.xml"

dim domXSL
set domXSL = CreateObject("MSXML2.DOMDocument.3.0")
domXSL.async = False
domXSL.load "data/sheet.xsl"

dim domFO
set domFO = CreateObject("MSXML2.DOMDocument.3.0")
domFO.async = False

' XML + XSL => FO
domXML.transformNodeToObject domXSL, domFO

dim xfoctl
dim xfoerr
set xfoctl = CreateObject("AXFO.XFOCtl")

' MSXML -> XSL Formatter
xfoctl.xfodoc.foXMLDOM = domFO
            .
            .
            .

画像ファイルもDataフォルダに入っています。
画像ファイル名のみを指定したXMLドキュメントをMSXSLにてXMLとXSLからFOを作成して、DOMオブジェクトをXSL Formatterに引き渡した場合、パス情報がMSXSLから渡ってこないため、エラーになります。
よって、次のようにXMLファイルとXSLファイルのDOMオプジェクトをXSL Formatterに引き渡してください。これでパス情報がXSL Formatterに引き渡されて、エラーが発生しなくなります。

dim domXML
dim domXSL

on error resume next
set domXML = CreateObject("Msxml2.FreeThreadedDOMDocument.4.0")
if Err = 0 then
    on error goto 0
    set domXSL = CreateObject("Msxml2.FreeThreadedDOMDocument.4.0")
else
    on error goto 0
    set domXML = CreateObject("Msxml2.FreeThreadedDOMDocument.3.0")
    set domXSL = CreateObject("Msxml2.FreeThreadedDOMDocument.3.0")
end if

domXML.async = False
domXML.load "data/document2.xml"

domXSL.async = False
domXSL.load "data/sheet.xsl"

dim xfoctl
set xfoctl = CreateObject("AXFO.XFOCtl")

' MSXML -> XSL Formatter (XML + XSL)
xfoctl.xfodoc.sourceXMLDOM = domXML
xfoctl.xfodoc.stylesheetXMLDOM = domXSL
            .
            .
            .

注意点が2つあります。
まず MSXSLのオプジェクトは"Msxml2.FreeThreadedDOMDocument.3.0"を使用してください。"Msxml2.DOMDocument.3.0" ではエラーが発生します。
もう1点はAXFO内で使うMSXMLのバージョンと外部からXSLTスタイルシートのDOMを渡すMSXMLのバージョンが一致していないとエラーが発生します。したがって、MSXML4 をインストールしている環境では、"Msxml2.FreeThreadedDOMDocument.4.0"を使用する必要があります。(修正後のコードではどちらにも対応できるようになっています。)


Q.  COM インターフェイスを使用して、XSL Formatter を使用するとき、PrinterName メソッドにはどのようなプリンタ名を渡せば良いかわかりません。 [No.2003012403]
A. 

プリンタ名は、基本的にはWindowsのプリンタダイアログに表示されています、プリンタの名前を使用します。
ただし、サーバで運用されてプリンタに出力する場合、そのプリンタがネットワークにて運用できることが条件となります。 そして、このときのプリンタ名はポート項目にて表示されている名前を指定しま す。
つまり、まずWindowsサーバ上にて、使用したいネットワークプリンタが使用できるように「プリンタの追加」にて、プリンタを追加します。 (プリンタのアイコンが追加されるはずです)
次に、そのプリンタのプロパティを開き、「ポート」タグを選択します。 すると、ポート欄に、ネットワークプリンタのポート名(URI)が書かれていて、ここにチェックがついていると思われます。このポート名を app.PrinterName("プリンタ名"); のプリンタ名に追加してください。
詳しい説明につきましては、XSL Formatter オンラインマニュアルの「組込みインターフェイス」ページの「プロパティ」の章、もしくは「6.プリンタ名の指定方法」をご覧ください。


Q.  COM インターフェイスを使用して、空白を含んだ URL を指定したのですが、「指定されたパスが見つかりません」( The system cannot locate the object specified. )のエラーが発生します。なぜですか。 [No.2003013102]
A. 

指定された URL は次のようになっていました。

objAXF.Source = "http://localhost/XSLFO/AntennaHouse%20Sample/document.xml"

本来の URL は

"http://localhost/XSLFO/AntennaHouse Sample/document.xml"

となっていますが、'AntennaHouse' と 'Sample' の間に空白がありますので、これをユーザが '%20' に置き換えて指定したと思われます。
XSL Formatter の COM インターフェイスを使用して、空白が含まれた URL を引き渡す場合は、空白はそのまま引き渡してください。XSL Formatter の内部にて空白を %20 に置き換えてファイルを検索します。


Q.  COM インターフェイスを使用して、組版を行ったのですが、「Error code: -2146697209(0x800C0007)」のエラーが発生します。どこに問題があるのでしょうか。 [No.2003013103]
A. 

これは、XSL Formatter V2.3 以前の不具合でした。XSL Formatter V2.4 では改善されています。


Q.  COM インターフェイスや Javaインターフェイスを使用して、組版結果をPDFに出力するときに、出力ファイルパスをURL形式で指定したところ、エラーが発生します。なぜですか。 [No.2003020705]
A. 

URL形式のOutputFile指定はサポートしておりません。URL形式ではないファイルパスを指定してください。
例: 次のパス指定はエラーが発生します。

objAXF.OutputFile= "file:H:/ASPTest/TEST/Result.pdf"

下記のように指定してください。

objAXF.OutputFile= "H:/ASPTest/TEST/Result.pdf"

なお、XSL Formatter V3 は "file:"形式のパス指定が可能です。


Q.  PDF ストリームをクライアントブラウザに表示する際、XSL Formatter の COM インターフェイスがテンポラリのPDFファイルを作成しているように見えます。もしそうならばテンポラリの PDF ファイルを作成しないで、 PDF ストリームをクライアントブラウザに表示させることはできますか。 [No.2003030704]
A. 

XSL Formatter では、一旦テンポラリのPDFファイルを作成して、これをクライアントブラウザに表示させます。そして、これは仕様になります。これを回避することはできません。ご了承ください。


Q.  Delphiを使用して、XSL Formatterを呼び出したいのですが、'AXFO 2.5 Type Library' をインポートしても、オンラインマニュアルに記載されているメソッドやプロパティが見つかりません。 [No.2003072501]
A. 

'AXFO 2.5 Type Library' は ActiveX インターフェースになります。ActiveX インターフェースは 開発キット(SDK)ライセンスをご購入された方のみに公開しています。
それ以外のユーザ様は、Delphi から XSL Formatter を使用される場合、タイプライブラリのインポートにて 'AXFOSVR 2.0 Type Library' をインポートしてCOMインターフェースをご利用ください。


Java プログラミング

Q.  Javaを使用してXSL Formatterを使用できますか。 [No.2002030104]
A. 

V2.2から「Javaインターフェイス」を用意いたしました。Javaインターフェイスのモジュールを別途インストールすることで使用可能になります。詳細につきましては、Javaインターフェイスに付属しているReadmeファイルおよび、ドキュメントを参照してください。


Q.  PDF ストリームを直接ブラウザに出力したいのですが、これがJavaでできますか。 [No.2002092005]
A. 

いいえ。XSL Formatter がPDFを直接ブラウザに出力できるのは、IISとASPサーバを使ったときのみとなります。


Q.  XSL Formatter の動作環境は Windows95/98/me/NT4.0/2000/XP とされていますが、AXFO.jar が提供されているので、JAVA(サーブレットコンテナ)の稼働環境でも同等の処理もできるのではないでしょうか。 [No.2002102503]
A. 

XSL Formatter V2 は Windows環境でしか動かない設計になっておりますので、Windows以外での動作は不可能となります。また、AXFOSVR.jar は、Windows+JRE(Java実行環境)の場合にJavaからWindowsのCOMを利用するためのブリッジの役割をしています。したがって、これ以外の環境では動作しません。
XSL Formatter V3 は、それぞれの環境でJavaインターフェイスを使用して XSL Formatter を呼び出すことができます。


Q.  XSL Formatter を Javaインターフェイスから使用しようとしたのですが「NoClassDefFoundError」というエラーが発生します。なぜですか。 [No.2003012404]
A. 

環境変数が正しく指定されていない可能性があります。
CLASSPATHにはフォルダ名だけでなく「AXFOSVR.jar」というファイル名まで記述する必要があります。
たとえば、

set CLASSPATH=
%CLASSPATH%;c:\Program files\Antenna\xslformatter\lib\axfosvr\AXFOSVR.jar;

まず、この点を確認してください。


Q.  XSL Formatter の Java インターフェイスはマルチスレッドに対応していますか。 [No.2003022102]
A. 

Java インターフェイスはマルチスレッドに対応していません。 マルチスレッド(アパーティメントスレッド)にて動作させるには、COMインターフェイスを使用してください。


Copyright © 1999-2004 Antenna House, Inc. All rights reserved.
Antenna House is a trademark of Antenna House, Inc.