我正在使用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。 :-) –