Frage zum "Print"-Verständnis

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
wie_jetzt?
Beiträge: 21
Registriert: 28.08.2017 17:23

Frage zum "Print"-Verständnis

Beitrag von wie_jetzt? »

Hallo Ihr guten Geister!

Heute mal ein ganz anderes Problem: Habe einen RTF-Text, in dem einige Platzhalter eingesetzt sind, wie z. B.: **Gesamt**, was dann mal durch einen Gesamtbetrag ersetzt werden soll.

Warum RTF: Text soll weitgehend so formatiert werden können, wie das der User möchte. RTF ist nicht komprimiert (wie docx, odf, ...). Wichtig ist, dass einfache Text-Platzhalter darin ersetzbar sind. Und dass kostenlose Software wie OpenOffice oder Libreoffice den Text bearbeiten können.

Mein Proggi soll vom User Daten annehmen (Texte, Werte), die das Proggi dann in der o. g. RTF-Datei einsetzen soll (die Platzhalter ersetzend) und soll die Datei anschliessend drucken, und zwar auf Papier oder wahlweise als PDF.

Stelle ich mir so vor:
Datei in einen String lesen (wie lange darf ein String werden?)
Platzhalter darin ersetzen
String in eine temporäre Datei schreiben
Druckerdialog aufrufen, Datei drucken.

Frage: wie sähe so ein Befehl aus, mit dem ich eine soundso.rtf-Datei via Printerdialog, Druckerauswahl und ggf. Druckereinstellung drucken kann?
Was das Programmieren angeht, bin ich ein Anfänger mit fast 40 Jahren Erfahrung, mit gelegentlichen, mitunter jahrzehntelangen Unterbrechungen. Kann mich noch dunkel an den TI58 bei der Bundeswehr Anfang der 1980er erinnern. Habe da mit "Mondlandung" viele Stunden der Heimatverteidung verbracht - Insider werden's kennen.
... wir hatten doch sonst nix!
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Frage zum "Print"-Verständnis

Beitrag von RSBasic »

wie_jetzt? hat geschrieben:wie lange darf ein String werden?
Ist unlimitiert. So viel, wie dein Arbeitsspeicher bzw. der maximale Adressbereich ausreicht.

Falls du Beispiele und Informationen bezüglich RTF brauchst:
http://www.rsbasic.de/aktualisierung/wi ... rtieren.pb
http://www.rsbasic.de/aktualisierung/wi ... tierung.pb
https://de.wikipedia.org/wiki/Rich_Text_Format
http://formatting-and-more.de/2016/01/3 ... xt-format/
http://www.aboutvb.de/bas/formate/pdf/rtf.pdf

Bezüglich Drucken kann ich dir leider nicht helfen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Frage zum "Print"-Verständnis

Beitrag von TroaX »

Das Drucken über Pure-Basic ist nicht ganz trivial, da du innerhalb von Pure-Basic das Dokument erst Zeichnen musst. Das bedeutet, das du das RTF auslesen, die Platzhalter ersetzen und dann auch noch die Steuerbefehle für die Formatierung interpretieren und über die Zeichenbefehle anwenden musst.

Such mal hier und im englischen Forum nach "RTF drucken" bzw. "RTF print/printing" und schau mal, ob da schon jemand ein Include für geschrieben hat (meine Zeit iist gerade leider etwas knapp ... Sorry). Ansonsten wirste dich selbst dransetzen müssen. Ich empfehle dir aber, statt RTF auf eine textbasierte Formatierungssprache zu wechseln, da sich diese gerade als Einsteiger leichter zu parsen und dann mit den Drawing-Befehlen leichter zeichnen lassen (HTML, Markdown, BBCode etc.). Gerade für HTML oder Markdown gibt es Editoren, mit denen man Dokumente ohne die Codes erstellen kann.

Alternativ kannst du auch die Datei einlesen, die Platzhalter in die Datei zurückschreiben bzw. in eine temporäre packen und diese dann mit der Kommandozeile bzw. über RunProgramm drucken: https://technet.microsoft.com/en-us/lib ... S.10).aspx

__________________________________________________
URL-Tags hinzugefügt
01.11.2017
RSBasic
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Frage zum "Print"-Verständnis

Beitrag von DarkDragon »

Vielleicht hilft dir ja Arctic Reports von srod aus dem englischen Forum. Generell nennt man das Reporting und es gibt noch andere Bibliotheken, die dir dabei helfen könnten. Z.B. Crystal Reports.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
wie_jetzt?
Beiträge: 21
Registriert: 28.08.2017 17:23

Re: Frage zum "Print"-Verständnis

Beitrag von wie_jetzt? »

Hallo Allerseits!

besten Dank schon mal für die Hilfestellungen, werde mir das ansehen. Der Verdacht, dass das drucken nicht ganz so trivial sei, kam mir schon. Deswegen und wegen meiner angeborenen Neigung, ganz gerne Wege des geringeren Widerstandes beschreiten zu wollen, hatte ich mir das (natürlich) einfacher machen wollen. Ich kann z. B. via WindowsExplorer eine Rtf-Datei drucken. Da sonst gerade keine Software läuft, gehe ich davon aus, dass dann das OS für mich ausdruckt. Wenn das richtig gedacht wäre, wäre meine Frage:

Könnte ich mit meinem Proggi das OS veranlassen, eine Rtf-Datei auszudrucken, so wie ich das per WindowsExplorer und "rechte Maustaste->Drucken" mache? Also nicht selber drucken, sondern das OS die Arbeit machen lassen (kann es ja offensichtlich). Wobei mir wichtig wäre, trotzdem vorher den Drucker (Papierdrucker oder PDF) und ggf. Druckereinstellungen wie "randlos" oder "duplex" oder "Graustufen" oder oder oder einstellen zu können.
Was das Programmieren angeht, bin ich ein Anfänger mit fast 40 Jahren Erfahrung, mit gelegentlichen, mitunter jahrzehntelangen Unterbrechungen. Kann mich noch dunkel an den TI58 bei der Bundeswehr Anfang der 1980er erinnern. Habe da mit "Mondlandung" viele Stunden der Heimatverteidung verbracht - Insider werden's kennen.
... wir hatten doch sonst nix!
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Frage zum "Print"-Verständnis

Beitrag von TroaX »

Siehe Link aus dem letzten Post von mir ;)
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: Frage zum "Print"-Verständnis

Beitrag von juergenkulow »

Hallo,

Frage: Könnte man **Variable** auch durch WertVariable ersetzen?

Idee zu einem PureBasic Programm:
Vorlage RTF-Datei in einen String$ laden.ReadData(#Datei, *Speicherpuffer, ZuLesendeLänge) und bei UTF8 mit String=PeekS(*Speicherpuffer, -1, #PB_UTF8)
Alle WertVariablen mit FindString(String$, "Wert", StartPosition ) finden und in eine Liste eintragen(Position und Name der Variablen).
Werte der Variablen in die Liste als Unicode-String eintragen.
Alle WertVariablen in String mit String$ = ReplaceString(String$, SuchString$, ErsatzString$) ersetzen.
String$ in Datei.RTF speichern. WriteString(#Datei, Text$ [, Format])
Datei.RTF ausdrucken z.B. mit offices -p Datei.RTF aus PureBasic mit RunProgram(DateiName$ , Parameter$, Arbeitsverzeichnis$)
vergleiche https://help.libreoffice.org/Common/Sta ... ameters/de

Beispiel für RTF-Datei

Code: Alles auswählen

{\rtf1\ansi\deff3\adeflang1025
{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}{\f4\fswiss\fprq2\fcharset0 Liberation Sans{\*\falt Arial};}{\f5\fnil\fprq2\fcharset0 Microsoft YaHei;}{\f6\fnil\fprq2\fcharset0 Mangal;}{\f7\fnil\fprq0\fcharset128 Mangal;}}
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
{\stylesheet{\s0\snext0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031 Normal;}
{\s15\sbasedon0\snext16\sb240\sa120\keepn\dbch\af5\dbch\af6\afs28\loch\f4\fs28 \u220\'dcberschrift;}
{\s16\sbasedon0\snext16\sl288\slmult1\sb0\sa140 Textk\u246\'f6rper;}
{\s17\sbasedon16\snext17\sl288\slmult1\sb0\sa140\dbch\af7 Liste;}
{\s18\sbasedon0\snext18\sb120\sa120\noline\i\dbch\af7\afs24\ai\fs24 Beschriftung;}
{\s19\sbasedon0\snext19\noline\dbch\af7 Verzeichnis;}
}{\*\generator LibreOffice/5.3.0.3$Windows_X86_64 LibreOffice_project/7074905676c47b82bbcfbea1aeefc84afe1c50e1}{\info{\creatim\yr2017\mo11\dy2\hr17\min11}{\revtim\yr2017\mo11\dy2\hr17\min27}{\printim\yr0\mo0\dy0\hr0\min0}}{\*\userprops}\deftab709
\viewscale125
{\*\pgdsctbl
{\pgdsc0\pgdscuse451\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Standard;}}
\formshade\paperh16838\paperw11906\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\sectunlocked1\pgndec\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
{\*\ftnsep\chftnsep}\pgndec\pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031{\rtlch \ltrch\loch
WertName}
\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031{\rtlch \ltrch\loch
WertStra\u223\'dfe}
\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031{\rtlch \ltrch\loch
WertPLZOrt}
\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031{\rtlch \ltrch\loch
Rechnung  WertRechnungsnummer }{\rtlch \ltrch\loch
Datum: WertRechnungsdatum Auftrag: WertAuftragsnummer }
\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031{\rtlch \ltrch\loch
Sehr WertGeehrterName,}
\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031{\rtlch \ltrch\loch
wir freuen uns \u252\'fcber Ihren Kauf.}
\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031{\rtlch \ltrch\loch
WertAnzahl  WertArtikelname WertPreis einschlie\u223\'dflich WertMehrwertsteuer (MwSt WertStSatz)}
\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031{\rtlch \ltrch\loch
F\u252\'fcr R\u252\'fcckfragen erreichen Sie uns telefonisch unter WertTelefon (WertSachbearbeiter)}
\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031{\rtlch \ltrch\loch
Empfehlen Sie uns weiter.}
\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031{\rtlch \ltrch\loch
Mit freundlichem Gru\u223\'df }
\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par \pard\plain \s0\widctlpar\hyphpar0\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f3\hich\af3\fs24\lang1031\rtlch \ltrch\loch

\par }
Bitte stelle Deine Fragen, denn den Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im Universum.

Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
Benutzeravatar
wie_jetzt?
Beiträge: 21
Registriert: 28.08.2017 17:23

Re: Frage zum "Print"-Verständnis

Beitrag von wie_jetzt? »

Hallo juergenkulow!

Das war jetzt aber mal pfiffig! Dein Tipp, den Ausdruck via LibreOffice zu machen, ist genauso genial wie einfach! Du hast mein Proggi-Projekt gerettet, denn damit sind die schlimmsten Hürden einfach aus dem Weg geräumt. Vielen, vielen Dank!

Ich fände es zwar schöner, wenn mein Proggi selbst drucken könnte, aber so funktioniert das schon mal sehr gut. Falls jemandem da was geeignetes in die Hände fällt, ich bin für jeden Tipp dankbar!
Was das Programmieren angeht, bin ich ein Anfänger mit fast 40 Jahren Erfahrung, mit gelegentlichen, mitunter jahrzehntelangen Unterbrechungen. Kann mich noch dunkel an den TI58 bei der Bundeswehr Anfang der 1980er erinnern. Habe da mit "Mondlandung" viele Stunden der Heimatverteidung verbracht - Insider werden's kennen.
... wir hatten doch sonst nix!
Antworten