私は OpenOffice Writer を使用しており、プログラム制御下で印刷したいと考えています。ただし、デフォルトのプリンターに印刷するのではなく、生成するドキュメントの種類に応じて、特定のドキュメントを特定のプリンターに送信したいと考えています。
Delphi 用の Bernard Marcelly の OOoToolsライブラリを使用して OLE オートメーションを実行し、OpenOffice 4.0 と通信すると、次のコードは現在のプリンタに印刷するように機能します。
procedure TMyOODocClass.Print;
var
docObj : variant; // Current OOo Document, implements IXPrintable
printProps : variant;
begin
docObj := GetMyActiveDocument; // method not shown, pretty standard stuff.
try
// empty array, I think this is where I would fill in PrinterName?
printProps := VarArrayCreate([0, -1], varVariant);
docObj.print(printProps);
except
on E:EOleException do
begin
raise Exception.Create('OpenOffice Document Print failed. '+E.Message);
end;
end;
end;
OpenOffice Writer Document Print メソッドまたはそれがサポートするプロパティのドキュメントを見つけることができません。次のようないくつかのプロパティを定義することになっていると思います。
printProps := VarArrayCreate([0, 1], varVariant);
printProps[0] := MakePropertyValue('PrinterName', 'PrinterNameHere') ;
質問パート A、Print およびその他すべての同様の Document メソッドが受け入れるすべてのプロパティの完全な HTML オンライン リファレンスはありますか? パート B とは、上記を設定するためのプロパティまたはテクニックです。OO の Document オブジェクトは IXPrintable と呼ばれるインターフェイスを実装していると思います。そのため、IXPrintable のすべてのメソッドと、そのメソッド内の Print メソッドが受け入れるパラメーターまたはプロパティを見つける方法を知りたいと思っています。
更新コメントの提案に従って、次のように「名前」という名前のプロパティを使用してみました。
procedure TMyOODocClass.PrintTo(PrinterName:String);
var
docObj : variant; // Current OOo Document, implements IXPrintable
printProps : variant;
begin
docObj := GetMyActiveDocument; // method not shown, pretty standard stuff.
try
if PrinterName='' then
printProps := dummyArray
else
begin
printProps := VarArrayCreate([0, 1], varVariant);
printProps[0] := MakePropertyValue('Name',PrinterName);
end;
docObj.print(printProps);
except
on E:EOleException do
begin
raise EOOoError.Create('OpenOffice Document Print failed. '+E.Message);
end;
end;
end;
上記は機能しないため、何か不足しているか間違っているに違いありません。私も呼び出しdocObj.SetPrinter
てみましたが、パラメータの型が一致しないというエラーが発生します。