Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Microsoft Word (https://www.delphipraxis.net/51779-microsoft-word.html)

spacewolf 18. Aug 2005 16:21


Microsoft Word
 
Da Word keine PDF Export Routine mit anbietet, dachte ich das JPGs / BMPs
ja auch ausreichen um Dokumente für alle lesbar erzeugen zu können.

Das klappt auch ganz gut mit:

Delphi-Quellcode:
Document.Content.CopyAsPicture;
aber leider nur die erste Seite...

Dachte dann das geht vielleicht übers Range mit:

Delphi-Quellcode:
Document.Range.CopyAsPicture;
aber auch hier kopiert er nur die erste Seite ins ClipBoard.
Weis jemand wie man alle Seiten kopiert ?

euer Andreas

marabu 18. Aug 2005 17:32

Re: Microsoft Word
 
Hallo Andreas,

beim Thema Dokumenten-Management würde ich keinen leichtfertigen Bogen um PDF machen. MS Word - so leid es mir persönlich tut das sagen zu müssen - kann nachgerüstet werden um diese Funktionalität zu bieten.

Aber zu deinem konkreten Problem - geht das nicht?

Code:
with Document.ActiveWindow.Panes[1].Pages.Item[5].Range do begin
  Select;
  CopyAsPicture;
end;
Kann es leider nicht ausprobieren, da ich vor einer Maschine ohne MS Word sitze, aber wenn es funktioniert, dann müsstest du ja nur noch eine Schleife drum wickeln.

Grüße vom marabu

spacewolf 19. Aug 2005 11:40

Re: Microsoft Word
 
was sind Panes[1] ?

wie so das 5. Item ? von Pages ?

Delphi-Quellcode:
Panes[1].Pages.
gibts nicht... :wall:


PS: Nachricht an die Admins... sorry wollte das hier eigendlich ins API Forum stellen... könnt ihr das verschieben !!! :pale:

spacewolf 19. Aug 2005 12:14

das funzt auch nicht...
 
jetzt hab ichs mal mit ner anderen Weise probiert:
Delphi-Quellcode:
         Document.Content.Select;
         with WordApplication.Selection do CopyAsPicture; :gruebel:
das geht auch nicht... :roll:

grummel :wall:

PS: vielleicht muss ichs ja seitenweise abspeichern...
würde ich auch machen doch wie sage ich dann:
Delphi-Quellcode:
Document.[b]???Seite??[/b].CopyAsPicture
Und wie frage ich wieviel Seiten ?
Delphi-Quellcode:
 Document.[b]Seitenanzahl[/b]
:wall:

Kara 19. Aug 2005 12:22

Re: Microsoft Word
 
Du könntest die Überschrift ein bischen genauer fassen, damit aus der hervor geht, um welches Thema es sich handelt.
Danke :)

marabu 20. Aug 2005 07:10

Re: Microsoft Word
 
Zitat:

Zitat von spacewolf
was sind Panes[1] ?

Ich denke du willst die einzelnen Seiten als Bilder haben? Jedes Document wird in einem Window dargestellt. Ein Window besteht aus einem oder mehreren Panes - die entstehen beim splitten. In einer Pane kannst du dann auf die Pages zugreifen. Die von mir gewählten Indexangaben sind willkürlich.

Besorge dir doch mal die VBA Reference, dann wird vielleicht einiges klarer für dich.

Grüße vom marabu

Meta777 24. Aug 2005 10:05

Re: Microsoft Word
 
Hallo,

hier nun eine mögliche Lösung. Funzt auch soweit. Nur werden Kopf-/Fußzeilen nicht mit gespeichert.
Vielleicht geht das auch einfacher aber es funzt....

Aufgerufen wird die funktion z.B. so:
Delphi-Quellcode:
var
  WordApplication : TWordApplication;
begin
  WordApplication := TWordApplication.Create(Self);
  ...
  SaveDocAsJPG(WordApplication.ActiveDocument, 'C:\');
Delphi-Quellcode:
procedure TForm1.SaveDocAsJPG(Document: _Document; SaveTo: String);
//Bilder werden nummeriert in "SaveTo" abgelegt. Also das erste ist z.B. "C:\1.jpg" wenn SaveTo "C:\" ist
var
  pic: Graphics.TPicture;
  bmp: Graphics.TBitmap;
  jpg: jpeg.TJPEGImage;
  SaveDir: String;
  curPage, i: Integer;
  SelStart, SelEnd: OleVariant;
begin
  try
    pic := TPicture.Create;
    bmp := Graphics.TBitmap.Create;
    jpg := TJPEGImage.Create;
    curPage := 1;
    SelStart := 0;
    SaveDir := IncludeTrailingPathDelimiter(SaveTo);
    try
      for i := 1 to Document.Sentences.Count do begin
        if (Document.Sentences.Item(i).Information[wdActiveEndPageNumber] > curPage) OR
           (i = Document.Sentences.Count) then begin// auch prüfen ob am Ende des Document angekommen! Denn der "Rest" muss auch gespeichert werden
          SelEnd := Document.Sentences.Item(i).End_;//Ende des aktuellen Satzes
          Document.Range(SelStart, SelEnd).CopyAsPicture;//Auswahl kopieren. (MetaFile)
          pic.Assign(Clipboard);// Zwisichenablage dem TPicture zuweisen.

          //Graphic nach TBitmap convertieren (in DP gefunden)
          bmp.PixelFormat := pf24bit;
          bmp.Width := pic.Graphic.Width;
          bmp.Height := pic.Graphic.Height;
          bmp.Canvas.Draw(0,0, pic.Graphic);

          //bmp dem jpg zuweisen und komprimieren und speichern
          jpg.Assign(bmp);
          jpg.CompressionQuality := 90;
          jpg.Compress;
          jpg.SaveToFile(SaveDir+IntToStr(curPage)+'.jpg');
//          bmp.SaveToFile('C:\test'+IntToStr(curPage)+'.bmp');//falls das bmp nötig wär...

          Inc(curPage);//nächste Seite
          SelStart := SelEnd;//Auswahlbegin der nächsten Seite ist das Ende der Aktuellen

          //aufräumen
          bmp.Dormant;
          bmp.FreeImage;
          bmp.ReleaseHandle;
        end;
      end;
    finally
      pic.Free;
      bmp.Free;
      jpg.Free;
    end;
  except
    on e:Exception do begin
      ShowMessage('Fehler beim Speichern des Worddokument als Bilddatei!'+
                    #13#10+e.Message+#13#10+e.ClassName)
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz