Autor Beitrag
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 06.09.12 16:31 
Hi ho,
Wir haben eine Anwendung mit der der Anwender Word-Dokumente als PDF erzeugen und verschicken kann. Derzeit sind die word2000-Komponenten in Delphi 2010 im Einsatz; soweit ich weiß sind in Delphi 2010 auch die XP-Komponenten enthalten, die sind bei uns allerdings bislang nicht installiert. Für den Export wird ein entsprechender PDF-Druckertreiber verwendet.

Nun wollen wir gerne den Kunden, die bereits über ein modernes Office verfügen mit eingebautem PDF-Export, bei uns geht das mit Word 2010, die Möglichkeit geben ohne Druckertreiber zu exportieren. Leider haben die word2000-Kompos natürlich keine entsprechenden Methoden (.exportAsFixedFormat). Im Internet hab ich mir allerdings was zusammengegoogelt, das ohne die Word2000-Komponenten funzt (dort hat das wohl jemand sogar unter Delphi 2 zum Laufen gebracht :o :lol: )

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
procedure ConvertDocToPdf(const Filename: string; DestFileName: string);
const
  wdExportFormatPDF = 17;
  wdExportOptimizeForPrint = 0;
  wdExportAllDocument = 0;          // Daten kommen von: http://msdn.microsoft.com/en-us/library/office/bb243312%28v=office.12%29.aspx etc.

  wdExportDocumentContent = 0;
  wdExportCreateNoBookmarks = 0;
var
  ObjWord, ObjDoc: Variant;
  EmptyParam: OleVariant;
begin
  ObjWord := CreateOleObject('Word.Application');
  ObjWord.Visible := false;
  ObjDoc := ObjWord.Documents.Open(FileName);
  ObjDoc.ExportAsFixedFormat(
    DestFileName,
    wdExportFormatPDF,
    False, // OpenAfterExport
    wdExportOptimizeForPrint, // OptimizeFor
    wdExportAllDocument, // range
    1,          // from
    1,          // to
    wdExportDocumentContent,          // Item
    true,         // IncludeDocProps
    true,         // KeepIrm
    wdExportCreateNoBookmarks,         // CreateBookmarks
    true,         // DocsStructureTags
    true,                    // BitmapMissingFonts
    false                    // UseISO19005_1
    );
  ObjWord.Quit;
  ObjWord := Unassigned;
end;


Das funktioniert soweit auch gut! Nur erfordert es halt den Dateinamen. Unser Projekt ist aber wie gesagt voll auf word2000 eingestellt, ich bräuchte also entsprechend eine Funktion die statt des Dateinamens "tWordDocument" entgegennimmt, und das dann exportiert. Also wie macht (castet) man aus einem tWordDocument ein wie oben erzeugtes Variant. Bzw. geht das überhaupt?

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Tilman Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 27.09.12 10:47 
Mir ist noch eine andere Idee gekommen. Ich muss den Befehl "ExportAsFixedFormat" an die word2000-Komponenten übergeben, die diesen aber nicht kennen, da der Befehl damals nicht existierte, und er daher in der Komponente nicht gekapselt ist. Daher eine Frage: ist es möglich diese Kapselung irgendwie zu übergehen, und einen Befehl quasi "auf eigene Gefahr" zu übergeben? Letztlich sind die word2000-Kompos ja OLE-Ableitungen, die das können müssten? Also sowas in der Art:

tWordDocument.olebefehl('ExportAsFixedFormat(argumente)');

Gibt es eine solche Funktion (habe leider keine gute Dokumentation der word2000-Kompos gefunden :( )

Grüße
Tilman

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)