Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   SynPDF und "Bonrollen" (https://www.delphipraxis.net/207887-synpdf-und-bonrollen.html)

noisy_master 12. Mai 2021 10:13

SynPDF und "Bonrollen"
 
Hallo Gemeinde,

ich hätte da mal eine Frage zu SynPDF: Normalerweise gebe ich etwas auf einem Bondrucker (80mm und ich glaube 72dpi) aus. Dazu benutze ich die normale printer unit mit BeginDoc, canvas.TextOut, EndDoc. Nun soll das Ganze aber als PDF erzeugt werden. Ist ja mit SynPDF im Prinzip genau das gleiche Vorgehen. Aber jetzt kommt der Knackpunkt:
Zu einem späteren Zeitpunkt soll das PDF wieder auf dem Bondrucker ausgegeben werden. Dazu wäre es meinem Verständnis nach sinnvoll, wenn das "Seitenformat" des PDF dem des Bondruckers entsprechen würde, oder habe ich dort ein Missverständnis?

Wenn das richtig ist: Wie überzeuge ich denn nun den Canvas des SynPDF davon "genauso zu sein" wie der des Bondruckers(insbesondere in Hinblick auf "endlos" und beschränkte Breite)?

Danke schon mal wieder vorab!

Gruß

Delphi.Narium 12. Mai 2021 11:04

AW: SynPDF und "Bonrollen"
 
Schau Dir in den Quellen von SynPdf mal diese Methode an:
Delphi-Quellcode:
procedure TPdfDocument.SetDefaultPaperSize(const Value: TPDFPaperSize);
const PAPERSIZE: array[TPDFPaperSize] of array[0..1] of integer =
  ( (595,842), (419,595), (842,1190), (1190,1683), (1683,2382), (2382,3369),
    (612,792), (612,1008), (0,0) );
begin // psA4, psA5, psA3, psA2, psA1, psA0, psLetter, psLegal, psUserDefined
  FDefaultPaperSize := Value;
  if Value<>psUserDefined then begin
    FDefaultPageWidth := PAPERSIZE[Value,0];
    FDefaultPageHeight := PAPERSIZE[Value,1];
  end;
end;
Anhand dieser Werte kannst Du dann das von Dir benötigte Format berechnen.
Code:
(595,842) entspricht DIN A4 mit 210 x 297 mm bzw. 21,0 cm x 29,7 cm

Kettensatz:
? = 80 mm
210 mm = 595

595 * 80 / 210 = 226,66666666666666666666666666667

DefaultPageWidth := 226;
Da Du ja "endloslange" drucken musst, musst Du die DefaultPageHeight (jeweils vom Inhalt abhängig) individuell berechnen.

noisy_master 12. Mai 2021 11:40

AW: SynPDF und "Bonrollen"
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1489256)
Da Du ja "endloslange" drucken musst, musst Du die DefaultPageHeight (jeweils vom Inhalt abhängig) individuell berechnen.


Ah, Danke! Das mit der Breite war ja schon mal einfach :-D Aber das mit der Länge ist ja blöd...Dann müsste das Drucken ja quasi in 2 Durchgängen erfolgen: 1*ohne Ausgabe um die Höhen zu errechnen, dann die Höhe setzen und dann nochmal "richtig" drucken. Kann man die Papersize auch noch nach BeginDoc setzen(um die Papersize größer oder kleiner zu machen)?

Delphi.Narium 12. Mai 2021 11:57

AW: SynPDF und "Bonrollen"
 
Keine Ahnung, ob man die Papiergröße noch während der Ausgabe verändern kann. Einfach ausprobieren und die PDF anschauen.

Aber warum muss denn die Ausgabe auf eine Seite?

Ein PDF kann doch 1:n Seiten enthalten.

Wenn man die Seite auf 80 mm "kleinbiegen" kann, kann man dann doch auch die Höhe auf einen sinnvollen Wert "runterbiegen". Dann bekommt halt die PDF ganz viele kleine Seiten, die hintereinander auf den Bondrucker geschickt werden. (ok: Sofern der das zulässt).

Ausprobieren: Eine PDF mit drei Seiten von z. B. 80 x 80 mm machen und die dann ausdrucken.

Kommt dabei ein Bon raus oder macht der Drucker daraus dann drei einzelne Bons?

Weißt Du denn zum Beginn eines Ausdruckes schon, wieviel da so an Ausgabe kommen wird?

Z. B. Seitenkopf und Seitenfuß plus 25 Zeilen für 25 Artikel.

Dann ist das letztlich auch "nur" Mathematik.

Man muss halt einmal wissen, wir hoch Seitenkopf und Seitenfuß sind und wie hoch eine Zeile.

Ohne konkrete Aufgabenstellung, was genau ausgegeben werden muss und wie der prinzipielle Aufbau der Ausgabe ist, ist es leider nicht möglich hier einen sinnvollen Lösungsansatz zu liefern.

Mal ein Muster so eines Ausdruckes als Bild hier anhängen oder genauer beschreiben, was genau ausgegeben werden soll. Eventuell gibt's dann ja einen konkreteren Lösungsansatz.

noisy_master 12. Mai 2021 12:31

AW: SynPDF und "Bonrollen"
 
Tja, das muss ich dann wohl doch mal ausprobieren, ob man die Seitenhöhe auch nach dem BeginDoc setzen kann. Das Problem mit mehreren Seiten ist, dass der Bondrucker nach jeder Seite den Bon abschneidet...Somit kommen dann aus einem PDF mit mehreren Seiten leider mehrere "Teilbons" raus...und das findet der Kunde alles andere als schön ;-(

Das Vorberechnen der "benötigten" Zeilen ist leider auch nicht so einfach, da der Bon ganz unterschiedlich lang sein kann(Bewirtungsbeleg oder nicht, TSE funktioniert, oder nicht, Bar oder Unbarzahlung etc.)
Aber trotzdem erstmal DANKE!

Delphi.Narium 12. Mai 2021 12:44

AW: SynPDF und "Bonrollen"
 
Blöde Idee:

Mach Dir ein TImage (o. ä.) und darauf die Ausgabe. Die Imagegröße müsstest Du variabel gestalten können.

Wenn das Image fertig ist, gibst Du das als PDF aus, so dass jedes PDF letztlich nichts weiter ist, als ein 80 mm breites und "beliebig" hohes Bild.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf