我正在使用OpenOffice Writer,并希望在程序控制下打印。但是,根据我生成的文档类型,我不希望打印到默认打印机,而是将某些文档导向某些打印机。如何选择要使用OpenOffice oleautomation进行打印的打印机?
使用Bernard Marcelly's 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文档打印方式或支持,我想我应该定义一些属性的属性,像这样:
printProps := VarArrayCreate([0, 1], varVariant);
printProps[0] := MakePropertyValue('PrinterName', 'PrinterNameHere') ;
问题A部分,是有中所有属性的打印彻底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
,但是我得到一个参数类型不匹配错误。
也许['这example'(http://wiki.openoffice.org/wiki/API/Samples/Java/Office/DocumentHandling#DocumentPrinter)可能会有所帮助。 – TLama
谢谢,这个例子很有用,但我很难将它翻译成Delphi-sprache。 :-) –