Ich habe es mittlerweile selbst raus gefunden. Bevor jemand ebenfalls ewig rumtüftelt: hier die Lösung ...
Zuerst erstellt man ein Programm, welches ein OLE-Objekt zu OpenOffice öffnet und anschließend der Writer öffnet: (Siehe
https://wiki.lazarus.freepascal.org/Office_Automation)
Code: Alles auswählen
program TestOO;
{$IFDEF FPC}
{$MODE Delphi}
{$ELSE}
{$APPTYPE CONSOLE}
{$ENDIF}
uses
SysUtils, Variants, ComObj;
const
ServerName = 'com.sun.star.ServiceManager';
var
Server : Variant;
Desktop : Variant;
LoadParams : Variant;
Document : Variant;
TextCursor : Variant;
begin
if Assigned(InitProc) then
TProcedure(InitProc);
try
Server := CreateOleObject(ServerName);
except
WriteLn('Unable to start OO.');
Exit;
end;
Desktop := Server.CreateInstance('com.sun.star.frame.Desktop');
LoadParams := VarArrayCreate([0, -1], varVariant);
{Create new document}
Document := Desktop.LoadComponentFromURL('private:factory/swriter', '_blank', 0, LoadParams);
{or Open existing} //you must use forward slashes, not backward!
//Document := Desktop.LoadComponentFromURL('file:///C:/my/path/mydoc.doc', '_blank', 0, LoadParams);
TextCursor := Document.Text.CreateTextCursor;
{Insert existing document} //Substitute your path and doc
TextCursor.InsertDocumentFromURL('file:///C:/my/path/mydoc.doc', LoadParams);
end.
Nun programmiert man sich eine Funktion, welches die Ausrichtung der Seite steuert:
Code: Alles auswählen
procedure SetPageOrientation(bLandscape: boolean = false);
var
vStyleFamilies, vPageStyles, vStandard, vNewStyle, vCursor, Size: variant;
width: integer;
begin
//StyleFamilies holen
vStyleFamilies := Document.StyleFamilies;
//PageStyles holen
vPageStyles := vStyleFamilies.getByName('PageStyles');
//Doppelten Eintrag vermeiden
If vPageStyles.hasByName('MyPageStyle1') Then vPageStyles.removeByName('MyPageStyle1');
//"Standard"-Formatvorlage abholen
vStandard := vPageStyles.getByName('Standard'); //"Default" in Englisch
//Größe abholen
Size := vStandard.Size;
//Breite Speichern
Width := Size.Width;
//Breite und Höhe vertauschen
Size.Width := Size.Height;
Size.Height := width;
//Neuen PageStyle erzeugen
vNewStyle := Document.createInstance('com.sun.star.style.PageStyle');
//ParentStyle zuweisen
vNewStyle.ParentStyle := 'Standard';
//Größe zuweisen
vNewStyle.Size:=Size;
//Ausrichtung zuweisen
vNewStyle.isLandscape := bLandscape;
//Neuen Style einfügen
vPageStyles.insertByName('MyPageStyle1', vNewStyle);
//Den aktuellen Cursor einholen
vCursor := Document.GetCurrentController.ViewCursor;
//Über den Cursor dem Dokument die aktuelle Vorlage mitteilen
vCursor.PageDescName := 'MyPageStyle1';
Wer wie ich auf Seitengrößen angewiesen ist, der kann sich das in die Funktion mit einfügen:
Code: Alles auswählen
const
DINA4_Width = 21000; //21 cm breit
DINA4_Height = 29700; //29,7 cm hoch
[...]
//Bei Hochformat:
vNewStyle.Size.Width := DINA4_Width; //DIN A4 Höhe
vNewStyle.Size.Height := DINA4_Height; //DIN A4 Breite
vNewStyle.isLandscape := false;
[...]
//Bei Querformat:
vNewStyle.Size.Width := DINA4_Height; //DIN A4 Breite
vNewStyle.Size.Height := DINA4_Width; //DIN A4 Höhe
vNewStyle.isLandscape := true;