AGB  ·  Datenschutz  ·  Impressum  







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

Je Seite ein Bild in RTF Datei darstellen

Ein Thema von BlueStarHH · begonnen am 31. Okt 2007 · letzter Beitrag vom 5. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#1

Je Seite ein Bild in RTF Datei darstellen

  Alt 31. Okt 2007, 13:41
Wie kann ich mit Delphi eine RTF-Datei erstellen, die 3 Seiten hat und auf jeder dieser Seiten ein Bild ist. Die Bilder sollen in einem Positionsrahmen eingefügt sein. Das ganze erzeuge ich zur Laufzeit aus meinem Delphi-Program. Ich hab es auch schon fast hinbekommen. Bloss sind die 3 Bilder immer alle zusammen in einem Positionsrahmen auf einer Seite obwohl der RTF-Befehl \page für eine neue Seite im Code angegeben ist. Ich hänge die Datei mal an. Was muss ich da wie verändern, damit die 3 Bilder auch auf drei Seiten sind? Das ganze soll im OpenOffice und MS Word richtig angezeigt werden. Ihr könnt die RTF-Datei mit dem normalen Editor öffnen. Die RTF-Spec gitbs hier: http://www.biblioscape.com/rtf15_spec.htm
Danke!
Angehängte Dateien
Dateityp: rtf test_764.rtf (5,1 KB, 42x aufgerufen)
  Mit Zitat antworten Zitat
31. Okt 2007, 19:49
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Wie kann ich mit Delphi ...
-> Delphi-Frage.
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Je Seite ein Bild in RTF Datei darstellen

  Alt 1. Nov 2007, 17:19
*push* Hat keiner eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Je Seite ein Bild in RTF Datei darstellen

  Alt 1. Nov 2007, 17:36
Ich hab mal in nem alten Projekt gekramt. Da habe ich noch RTF direkt in ein Textfile geschrieben.
Schau dir das einfach mal an:
Delphi-Quellcode:
procedure TRTF.WritePictureFrame(const PictureFile:string;posx,posy:integer;maxwidth:integer=0;maxheight:integer=0);
var i:integer;
    jpg:tjpegimage;
    bmp:tbitmap;
    hoehe,breite,nbreite,nhoehe:integer;
    mem:TMemorystream;
    data:string;
    b:^Byte;
begin
  if length(picturefile)=0 then exit;
  jpg:=tJpegimage.Create;
  if lowercase(ExtractFileExt(PictureFile))='.bmpthen begin
    bmp:=tbitmap.Create;
    try
      bmp.LoadFromFile(Picturefile);
    except
      exit;
    end;
    jpg.Assign(bmp);
    bmp.Free;
  end else if (lowercase(ExtractFileExt(PictureFile))='.jpg')or
              (lowercase(ExtractFileExt(PictureFile))='.jpeg')or
              (lowercase(ExtractFileExt(PictureFile))='.jpe') then begin
    try
      jpg.LoadFromFile(pictureFile);
    except
      exit;
    end;
  end else exit;
  jpg.JPEGNeeded;
  hoehe:=jpg.Height*20;
  breite:=jpg.Width*20;
  mem:=Tmemorystream.Create;
  jpg.SaveToStream(mem);
  mem.Seek(0,sofrombeginning);
  b:=mem.Memory;
  data:='';
  for i:=1 to mem.Size do begin
    data:=data+inttohex(b^,2);
    inc(b);
  end;
  mem.Free;
  jpg.Free;

  nbreite:=breite;
  nhoehe:=hoehe;
  maxwidth:=maxwidth*20;
  maxheight:=maxheight*20;
  if (nbreite>maxwidth)and(maxwidth>0) then begin
    nhoehe:=round(nhoehe/(nbreite/maxwidth));
    nbreite:=maxwidth;
  end;
  if (nhoehe>maxheight)and(maxheight>0) then begin
    nbreite:=round(nbreite/(nhoehe/maxheight));
    nhoehe:=maxheight;
  end;
  if posx<0 then begin
    inc(posx);
    posx:=9071+posx*20-nbreite;
  end else posx:=posx*20;
  if posy<0 then begin
    inc(posy);
    posy:=14288+posy*20-nhoehe;
  end else posy:=posy*20;

  writeln(Datei,'\pard\pvmrg\phmrg\posx'+inttostr(posx)+'\posy'+inttostr(posy)+'\absw'+inttostr(nbreite)+'\absh'+inttostr(nhoehe)+'\dxfrtext80');
  writeln(Datei,'{\pict\jpegblip\picw'+inttostr(breite)+'\pich'+inttostr(hoehe)+'\picwgoal'+inttostr(nbreite)+'\pichgoal'+inttostr(nhoehe));
  writeln(Datei,data,'}');
  writeln(Datei,'\par\pard ');

end;

procedure TRTF.WriteMetaFilePicture(const Meta:TMetaFile;posx,posy,maxwidth,maxheight:integer);
var b:^byte;
    data:string;
    Stream:TMemorystream;
    i,hoehe,breite,nbreite,nhoehe:integer;
begin
  Stream:=tmemorystream.Create;
  Meta.SaveToStream(Stream);
  Stream.Seek(0,sofrombeginning);
  b:=Stream.Memory;

  data:='';
  for i:=1 to Stream.Size do
  begin
    data:=data+inttohex(b^,2);
    inc(b);
  end;
  Stream.Free;

  nbreite:=Meta.Width;
  nhoehe:=Meta.Height;
  maxwidth:=maxwidth*20;
  maxheight:=maxheight*20;
  if (nbreite>maxwidth)and(maxwidth>0) then
  begin
    nhoehe:=round(nhoehe/(nbreite/maxwidth));
    nbreite:=maxwidth;
  end;
  if (nhoehe>maxheight)and(maxheight>0) then
  begin
    nbreite:=round(nbreite/(nhoehe/maxheight));
    nhoehe:=maxheight;
  end;
  if posx<0 then
  begin
    inc(posx);
    posx:=9071+posx*20-nbreite;
  end else posx:=posx*20;
  if posy<0 then
  begin
    inc(posy);
    posy:=14288+posy*20-nhoehe;
  end else posy:=posy*20;

  writeln(Datei,'\pard\pvmrg\phmrg\posx'+inttostr(posx)+'\posy'+inttostr(posy)+'\absw'+inttostr(nbreite)+'\absh'+inttostr(nhoehe)+'\dxfrtext80');
  writeln(Datei,'{\pict\emfblip\picw'+inttostr(breite)+'\pich'+inttostr(hoehe)+'\picwgoal'+inttostr(nbreite)+'\pichgoal'+inttostr(nhoehe));
  writeln(Datei,data,'}');
  writeln(Datei,'\par\pard ');
end;
Datei ist ein TextFile, was so vorbereitet wurde (:
Delphi-Quellcode:
  write(Datei,'{\rtf1 \ansi\ansicpg1252');
  writeln(Datei,'\deff0{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}}');
  writeln(Datei,'{\info{\title ',Titel,'}{\subject ',Inhalt,'}{\author ',Bearbeiter,'}{\company ',
          Firma,'}{\category Protokoll}{\comment Created by MusterMaus}{\doccomm '+messort+'}{\version1}{\creatim\yr',
          yearof(Zeit),'\mo',monthof(Zeit),'\dy',dayof(Zeit),'\hr',hourof(Zeit),
          '\min',minuteof(Zeit),'\sec',secondof(Zeit),'}}');
  //die Infozeile kannst du weglassen

  writeln(Datei,'\paperw11907\paperh16840\margl1418\margr1418\margt1418\margb1134 ');
  writeln(Datei,'\viewkind1\viewzk2\uc1\pard ');
Vergess dann das "}" am Ende nicht!

Und für nen Seitenumbruch musst du mal in den Spec nachlesen. Ich glaube "/page" ist dann dein Freund.

Edit: Upps, du warst ja schon soweit
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Je Seite ein Bild in RTF Datei darstellen

  Alt 1. Nov 2007, 17:46
@sirius: Danke, aber den code kenne ich glaube ich schon aus der DP. Die Bilder sind ja schon im Positionsrahmen und werden auch angezeigt. Nur alle zusammen und auf einer Seite. In Dein Code erzeugt keinen Seitenumbruch. Die Positionsrahmen scheinen irgendwie nicht richtig abgeschlossen zu sein. Oder es könnte auch sein, dass wenn 3x die gleiche Rahmendefiniton hintereinander auftritt diese 3 Rahmen zu einem zusammmengefasst werden?!
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Je Seite ein Bild in RTF Datei darstellen

  Alt 5. Nov 2007, 14:15
So?
Angehängte Dateien
Dateityp: rtf 1neu_159.rtf (5,1 KB, 21x aufgerufen)
Christian
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Je Seite ein Bild in RTF Datei darstellen

  Alt 5. Nov 2007, 14:30
@Kedariodakon: Danke für den Versuch: In Word sieht es ok aus. Aber nicht in OpenOffice. Dort sind Bild 1+2 zusammen in einem Rahmen auf Seite 1 und Bild 3 ist auf Seite 2. D.h. der Rahmen ist wohl nicht richtig beendet?! Die Anforderung ein Bild pro Seite ist also nicht erfüllt.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Je Seite ein Bild in RTF Datei darstellen

  Alt 5. Nov 2007, 15:16
Hallo,

dieser Thread dürfte Dir wenig Hoffnung machen - das ganze zum Laufen zu bringen.
Ist aber schon etwas älter.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Je Seite ein Bild in RTF Datei darstellen

  Alt 5. Nov 2007, 15:26
@Klaus01: Danke für die Mühe, aber der Thread den Du gefunden hat, ist für meine Fragestellung nicht relevant. Ich benötige nicht irgendwelche Delphi-Controls/Komponenten, die den Seitenumbruch evtl. nicht können. Ich benötige reinen RTF-Code, den jeder mit dem Notepad erstellen könnte. Wenn man es genau nimmt, hat meine Fragestellung überhaupt nichts mit Delphi zu tun.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Je Seite ein Bild in RTF Datei darstellen

  Alt 5. Nov 2007, 15:40
Da habe ich Dich mißverstanden.
Die RTF Spec kennst Du schon?
\page oder \pagebb funktionieren nicht?

Grüße
Klaus
Angehängte Dateien
Dateityp: zip gc0165_update_195.zip (165,2 KB, 13x aufgerufen)
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:53 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