我正在使用 OpenOffice Writer,我希望在程序控制下打印。但是,我不希望打印到默认打印机,而是根据我生成的文档类型将某些文档定向到某些打印机。
使用Bernard Marcelly 的 OOoTools库,用于 Delphi,进行 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
,但出现参数类型不匹配错误。