Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eine RTF-Datei in mehrere aufteilen (https://www.delphipraxis.net/131803-eine-rtf-datei-mehrere-aufteilen.html)

Progman 31. Mär 2009 10:29


Eine RTF-Datei in mehrere aufteilen
 
Hallo, ich habe nach langer Zeit mal wieder ein Problem.
Gegeben ist eine Anwendung, in der in JvRichEdits der Anwender Textvorlagen bekommt und diese nach Belieben bearbeiten kann.
Diese können auf Wunsch im PDF-Format abgespeichert werden. Dazu nutzen wir ein zugekauftes Tool von softExpansion.
Dies funktioniert auch prima bis auf die Tatsache, dass der RTF zu PDF-Konverter aus exakt einer RTF auch nur eine Seite im PDF macht. Das heißt, alles was über den Inhalt einer Seite hinausgeht, verschwindet im Nirwana ;)
Die einzige Möglichkeit, das zu verhindern, wäre: Jede RTF-Datei, deren Inhalt größer als eine A4-Seite ist, in mehrere RTF-Dateien aufzuteilen und diese dann nacheinander dem RTF-Converter übergeben.
Händisch ist das ja nicht schwer. Man selektiert so viel, wie man glaubt, dass es auf eine Seite passt, kopiert es (oder schneidet es aus) in die Zwischenablage, öffnet ein zweites JvRichEdit, fügt den Inhalt da ein und speichert es ab. Das so oft, bis der gesamte Inhalt aufgeteilt ist.
Dies müsste aber nun automatisiert werden, da der User damit nicht konfrontiert werden soll.
Kann man feststellen, wie viele A4-Seiten voraussichtlich eine RTF-Datei benötigt?
Ja, dazu hab ich eine Routine. Aber das Ergebnis ist nur die Seitenanzahl.
Problem ist, die Range (ich nenn das jetzt mal so oder das Rect), die zu einer Seite gehört, zu selektieren? Wenn das gelingt, wäre das Problem gelöst (CopyToClipboard) ;)
Anmerkung: Zeilen zählen und sowas scheidet aus, da der Inhalt in Schriftgröße usw. frei gestaltet werden kann und auch Grafiken enthalten sein können.
Hat da jemand einen Lösungsansatz?

mjustin 31. Mär 2009 10:36

Re: Eine RTF-Datei in mehrere aufteilen
 
Zitat:

Zitat von Progman
Dies funktioniert auch prima bis auf die Tatsache, dass der RTF zu PDF-Konverter aus exakt einer RTF auch nur eine Seite im PDF macht.

Prima Tool :) - ein anderes kommt nicht in Frage?

Zum Beispiel Rave - kann auch PDF exportieren, und ist bei neueren Delphi Versionen enthalten.
Ein Richtext-Feld in den Report geworfen, exportieren, fertig ... (mit Fast Reports & Co. geht es natürlich auch).

Cheers,

Progman 31. Mär 2009 10:50

Re: Eine RTF-Datei in mehrere aufteilen
 
Ein anderes kommt nicht in Frage, ich muss dieses verwenden, da die PDF-Dateien auch bestimmte Voraussetzungen erfüllen müssen, die dieses Tool eben bietet.

p80286 31. Mär 2009 15:20

Re: Eine RTF-Datei in mehrere aufteilen
 
Hallo Progman,

wenn Du nicht eine ganze Textverarbeitung nachbauen willst, siehst Du erst einmal alt aus.
Das Problem ist ja, daß der vorgegebene Text, je nach Schriftgröße und Schriftart auf Papier eine unterschiedliche Menge Platz einnimmt. Du brauchst also einen Drucksimulator.

Wie wäre es denn mit Word, um den Ausdruck zu simulieren?
Arbeitet dieses PDF-Tool als Druckertreiber?
Dann könntest Du über OLE alle Seiten einzeln ausdrucken.

Gruß
K-H

Progman 31. Mär 2009 16:18

Re: Eine RTF-Datei in mehrere aufteilen
 
Das Problem siehst du richtig ;)
Meine ersten Versuche gingen dahin, das JvRichEdit mit SaveToPicture in ein Bild zu rendern. Das ergab dann anhand der Höhe schonmal, ob es mehr als eine Seite wird. Wenn ja, hab ich das Picture.Bitmap einfach in neue Bitmaps kopiert, so dass ich jede Seite als Bitmap hatte. Die könnte ich in den PDF-Konverter importieren. Aber das ist für ein PDF, dass auch sehr starke Vergrößerungen machen kann, ein NoGo. Eine RTF-Datei wird anscheinend als Vektorgrafik umgewandelt und damit die PDF-Seite erzeugt. Denn die lässt sich dann beliebig vergrößern und alle Kanten bleiben gestochen scharf. Daher bleibt mir nur der Weg, aus einem (zu großen) RTF mehrere zu machen. Die Range für eine Seite kann ich ja ermitteln. Ich sehe nur keine Möglichkeit, diesen Bereich zu bestimmen und an dessen Ende den Cursor zu setzen. Denn dann könnte ich alles bis zum Cursor selektieren, ins Clipboard und daraus ne neue Datei machen. Also vom Prinzip her ganz einfach ;) Nur das zu automatisieren, ist wohl nicht so leicht, wenn überhaupt möglich.

shmia 31. Mär 2009 16:19

Re: Eine RTF-Datei in mehrere aufteilen
 
Es gibt eine Stelle, die ist prädestiniert um den Seitenumbruch durchzuführen:
innerhalb des RTF zu PDF-Konverter.
Nur der Konverter weiss wirklich, wann genau eine PDF-Seite zuende ist.
Du hast doch sicher den Sourcecode des Konverters gekauft, oder?

Progman 31. Mär 2009 16:23

Re: Eine RTF-Datei in mehrere aufteilen
 
Zitat:

Zitat von shmia
Es gibt eine Stelle, die ist prädestiniert um den Seitenumbruch durchzuführen:
innerhalb des RTF zu PDF-Konverter.
Nur der Konverter weiss wirklich, wann genau eine PDF-Seite zuende ist.
Du hast doch sicher den Sourcecode des Konverters gekauft, oder?

Nein, da gibt es keinen Source, nur einige DLLs und andere Dateien, die wir unserer Anwendung beilegen müssen.
Ich habe nur einige *.pas-Files, die alle Schnittstellen zur DLL definieren. Leider....

p80286 31. Mär 2009 18:10

Re: Eine RTF-Datei in mehrere aufteilen
 
Hallo progman,

Da Du augenscheinlich nicht scharf darauf bist Word als Vermittler zu nutzen (oder es nicht kannst/darfst) muß ich mal spekulieren.
Besteht die Möglichkeit einen Reportgenerator mit dem RTF-File zu füttern?
Oder falls Du ganz abgebrüht bist mach die Druckersimulation mit Hilfe von Printers selber. Da ich beim Ausdrucken immer Probleme mit dem Papierformat hatte, würde ich Dir das nicht ruhigen Gewissens empfehlen.
Aber vielleicht gibt es dafür irgendwo eine Komponente(?)

Gruß
K-H

Nur so am Rande: PDF kennt auch verschiede Papierformate. Wenn Dein Konverter nach einer DIN A4-Seite die Arbeit einstellt, klingt das sehr nach Crippleware.

Progman 31. Mär 2009 18:24

Re: Eine RTF-Datei in mehrere aufteilen
 
Bei Übergabe des RTF-Files habe ich ja vorher den Converter configuriert und als Format A4 festgelegt. Das klappt ja auch alles prima. Nur habe ich (noch) keine Möglichkeit, der Import-Function mitzuteilen, dass sie evtl. mehrere Seiten machen soll. Daher macht sie nur eine neue Seite in der PDF-Datei und der Rest (der nicht mehr auf die Seite passt) wird unterschlagen ;)
Deshalb wollte ich die RTF, falls sie zu groß ist, in mehrere RTFs aufteilen und die nacheinander übergeben. dann würde es ja klappen. Das Problem ist eben nur, etwa so viel zu selektieren, wie ein Seiteninhalt ausmacht um damit dann über das Clipboard ein neues RTF zu machen.

Lannes 31. Mär 2009 23:00

Re: Eine RTF-Datei in mehrere aufteilen
 
Hallo,

schau Dir doch mal RichEdit: Variable Druckfunktion in Flockes Garage an, denke das Dir das weiter helfen könnte.

Zitat:

Zitat von Flocke
...Der Rückgabewert ist der Index des ersten Zeichens, dass nicht mehr in das Ausgaberechteck passte und somit nicht mehr ...



Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr.
Seite 1 von 2  1 2      

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