![]() |
OLE - Word - Eingebettete Grafik
Hallo,
beim speichern eines Word-Dokuments mit einer eingebetteten, 1 MB großen Grafik, kommt es zu einer Exception. Ein Word-Dokument mit einer eingebetteten Grafik wird über OLE geöffnet und befüllt. Beim Speichern des Dokuments kommt dann die Fehlermeldung "Nicht genug Speicher, um den Vorgang auszuführen". Außerdem enthalten die Dokumente Formfelder. Ich verwende:
Wie kann man ein Word-Dokument nun mit einer oder mehreren großen eingebetteten Grafiken über die Word-OLE-Schnittstelle speichern? |
AW: OLE - Word - Eingebettete Grafik
Hallo Painterxyz,
Ist nicht ganz einfach auf Dein Problem einzugehen, da insbesonders Word sich manchmal arg "zickig" anstellt. Die üblichen Fragen nach genügend Arbeitsspeicher, Anzahl der Word-Instanzen usw. spar ich mir mal, das hast Du schon selbst überprüft (?) Was verstehst Du denn unter Befüllen? Und wie nimmst Du das Einbetten konkret vor? (SourceCode) Und in welchem Format willst Du speichern? Gruß K-H |
AW: OLE - Word - Eingebettete Grafik
Hi p80286,
der Form halber die fehlenden Informationen: 300 MB freier RAM und bei der Ausführung läuft eine Word-Instanz. Exemplarisch sieht mein Quelltext wie ![]() Unter Befüllen verstehe ich das Suchen und Ersetzen von Platzhaltern. Das Format ist *.doc (Word 2003) Ich hab außerdem noch einmal geprüft welche Auflösung die Grafik hat. Auflösung 2480 x 3507. Das Seitenformat in den Word-Dateien steht bei mir auf A4. Das Interessante ist das A4-Format entspricht einer Auflösung von 3508 x 2480. Und noch interessanter wirds, Word interessiert es gar nicht ob es eine verlinkte oder eingebettete Grafik ist. Erst wenn die Auflösung kleiner ist als die der A4-Auflösung gibt es keine Fehlermeldung. MfG Painterxyz |
AW: OLE - Word - Eingebettete Grafik
Hallo Painterxyz,
da M$-Produkte immmer besser wissen, was für den Benutzer gut ist, solltest Du ggf. einmal das (Speicher-)Format Deines "Bildes" anschauen. Bei der Auflösung die Du genannt hast, sind es bei 256 Farben/Punkt ca 8,5 MB, ist es noch etwas bunter, wird es schon eng. Da Du etwas von 1 MB schreibst, gehe ich von einer SW-Graphik aus, aber nicht alles was SW ist wird als SW gespeichert! Und wenn man konkret sieht wie Du die "Bilder" einbindest, kann man sich äußern. Wenn ich mich recht erinnere gibt es drei oder vier unterschiedliche Methoden ein "Bild" in ein Worddokument zu packen, und jede verhält sich anders. Und da auch die Möglichkeit an der Darstellung zu drehen könnte es schon sein, daß Word der Speicher ausgeht. Die Fehlermeldung besagt auch nur, daß Word der Speicher ausgegangen ist. Auf dem Rechner kann noch einiges frei sein. Meist half es ,unter anderem Format zu speichern (.RTF) und dann wieder nach .doc zurück holen. (Bei Handbetrieb!) Gruß K-H Edith: So hab ich bisher wenig Probleme gehabt:
Code:
msword.selection.inlineshapes.addpicture(filename:=dummy, linktofile:=false, savewithdocument:=true).lockaspectratio:=true;
|
AW: OLE - Word - Eingebettete Grafik
Danke p80286 für deine Antwort,
unglücklicherweise habe ich ein paar Sachen ausgelassen. :oops: Der Link auf den Quellcode sollte nur zeigen was ich so ungefähr mit Word-Dokumenten anstelle. Anstelle des Beispiels öffne ich ein Word-Dokument das bereits eine montröse eingebettete JPEG-Grafik enthält. Dann wird das Suchen und Ersetzen durchgeführt und schließlich gespeichert. MfG Painterxyz |
AW: OLE - Word - Eingebettete Grafik
Hallo Painterxyz,
zunächst möchte ich auf die Ergänzung meines letzten Beitrags verweisen, damit kann ich so ziemlich alles, was mir über den Weg läuft, in ein Word-Dokument packen, aber das ist auch schon einmal schief gegangen, weil Word einem nie erzählt was es mit "Bildern" wirklich anstellt. Soweit ich weiß, erfolgt vor bzw. während des Speicherns eine Umrechnung der Rohdaten, was den Speicherverbrauch in die Höhe treibt. Ggf. solltest Du das Speichern zwischendurch mehrere Male machen, aber das leert nicht zwangsläufig den Hauptspeicher. Gruß K-H |
AW: OLE - Word - Eingebettete Grafik
Hallo 80286,
dein Code-Schnipsel hat funktioniert und ich konnte die Grafik ohne Fehlermeldung einfügen. Danke. Die Eigentliche problematische Stelle habe ich nun gefunden und auf einen Beispielcode reduziert.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtnrs; type TForm1 = class(TForm) OleContainer1: TOleContainer; procedure FormShow(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} const QUELLE = 'D:\Delphi-Experimente\Word\Speichern_grosse_Bilder\Dokument_mit_grosser_Grafik.doc'; procedure TForm1.FormShow(Sender: TObject); begin try OleContainer1.CreateObjectFromFile(QUELLE,False); except on e:Exception do begin MessageDlg('Öffnen: ' + e.Message, mtWarning, [mbOK], 0); Exit; // wenn kein Olecontainer geladen werden kann, kann abgebrochen werden end; end; try OleContainer1.Run; OleContainer1.DoVerb(0); except on X:Exception do begin MessageDlg('Ausführen: ' + X.Message, mtWarning, [mbOK], 0); try OleContainer1.Close; OleContainer1.DestroyObject; except end; Exit; end; end; try OleContainer1.SaveAsDocument(ExtractFilePath(QUELLE)+'\01_'+ExtractFileName(QUELLE)); except on e:Exception do begin ShowMessage('Speichern: ' + e.Message); end; end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 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