AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OLE - Word - Eingebettete Grafik

Ein Thema von Painterxyz · begonnen am 8. Aug 2010 · letzter Beitrag vom 10. Aug 2010
Antwort Antwort
Painterxyz

Registriert seit: 25. Nov 2007
36 Beiträge
 
#1

OLE - Word - Eingebettete Grafik

  Alt 8. Aug 2010, 18:55
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:
  • Delphi 5 Enterprise
  • MS Office 2003

Wie kann man ein Word-Dokument nun mit einer oder mehreren großen eingebetteten Grafiken über die Word-OLE-Schnittstelle speichern?

Geändert von Painterxyz ( 8. Aug 2010 um 18:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: OLE - Word - Eingebettete Grafik

  Alt 9. Aug 2010, 09:30
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Painterxyz

Registriert seit: 25. Nov 2007
36 Beiträge
 
#3

AW: OLE - Word - Eingebettete Grafik

  Alt 9. Aug 2010, 10:58
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 hier aus.

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
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: OLE - Word - Eingebettete Grafik

  Alt 9. Aug 2010, 12:30
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;
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 ( 9. Aug 2010 um 13:06 Uhr)
  Mit Zitat antworten Zitat
Painterxyz

Registriert seit: 25. Nov 2007
36 Beiträge
 
#5

AW: OLE - Word - Eingebettete Grafik

  Alt 9. Aug 2010, 12:46
Danke p80286 für deine Antwort,

unglücklicherweise habe ich ein paar Sachen ausgelassen. 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
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: OLE - Word - Eingebettete Grafik

  Alt 9. Aug 2010, 13:20
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Painterxyz

Registriert seit: 25. Nov 2007
36 Beiträge
 
#7

AW: OLE - Word - Eingebettete Grafik

  Alt 10. Aug 2010, 09:51
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz