2

私は 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てみましたが、パラメータの型が一致しないというエラーが発生します。

4

1 に答える 1