Aktuelle Zeit: 18.12.2018 21:25

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: VecVi - Dokumentenerstellung und -ausgabe mit VectorDrawing
BeitragVerfasst: 22.11.2017 18:37 
Offline
Moderator
Benutzeravatar

Registriert: 15.06.2008 18:22
Wohnort: Erdgeschoß
Hallo zusammen,

dieses Modul habe ich als Include für ein anderes Projekt begonnen. Dort ist es häufig nötig,
Dokumente zu erstellen und als PDF zu speichern bzw. zu drucken. Bisher habe ich dafür
PurePDF genutzt und mir noch einen Wrapper mit einigen Funktionen drumherumgebastelt,
die mir gefehlt haben. Vor ein paar Wochen war ich dann an dem Punkt angelangt, an dem
ich PurePDF nicht mehr so einfach für meine Bedürfnisse anpassen konnte, außerdem wollte
ich eine Art Druckvorschau haben und die VectorDrawing Bibliothek mal ausprobieren.

Herausgekommen ist also VecVi (VectorView). Bei der Erstellung und der Arbeitsweise habe ich
mich an PurePDF orientiert. Funktionen:

  • einmalige Definition eines Dokuments und dann wahlweise Ausgabe auf CanvasGadget, Image, Window, Drucker, SVG (Linux) oder PDF (nicht Windows)
  • Text- und Bildzellen mit variablem Rahmen, Füllung, Textausrichtung, Schriftart etc.
  • horizontale, vertikale und freie Linien
  • Rechtecke, Ellipsen, Ellipsensegmente (für Diagramme) und Bézier-Kurven
  • automatisch eingefügte und wahlweise pro Seite anpassbare Kopf- und Fußbereiche
  • automatische Seitenumbrüche
  • Vermeidung von Seitenumbrüchen innerhalb zusammengehörender Blöcke
  • automatische Seitennummerierung mit freiem Startwert, Ausschluss einzelner Seiten aus der Nummerierung, Ermittlung der Gesamtseitenzahl
  • Anzeige im CanvasGadget wahlweise als Einzelseiten oder mit Scrollmöglichkeit (siehe Beispielcode)

Das Ganze ist ein Anfang, sicher noch nicht fertig und auch nicht komplett durchgetestet, aber
meiner Meinung nach grundsätzlich schon einsetzbar.
Wer möchte, kann ja mal einen Blick drauf werfen. Die direkte Ausgabe als PDF und SVG kann ich
als Windowsnutzer leider nicht testen. Ich hoffe, das kommt irgendwann noch!

Code: https://raw.githubusercontent.com/hgzh/ ... r/VecVi.pb
Beispiel: https://raw.githubusercontent.com/hgzh/ ... preview.pb

Bild

Schönen Abend noch!

_________________
Win10 x64 | PB 5.62 (x86 und x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VecVi - Dokumentenerstellung und -ausgabe mit VectorDraw
BeitragVerfasst: 22.11.2017 19:45 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
:allright: Sehr schön, so was steht schon länger auf meiner Wunschliste :)

Im eigenem Interesse, gutes gelingen bei der Weiterentwicklung,

Thomas

_________________
PureBasic 5.70 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 19.0 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VecVi - Dokumentenerstellung und -ausgabe mit VectorDraw
BeitragVerfasst: 23.11.2017 01:30 
Offline
PureBasic Team
Benutzeravatar

Registriert: 11.09.2004 16:35
Wohnort: Saxony / Deutscheinsiedel
Schaut sehr vielversprechend aus :allright:

Danke für die öffentliche Bereitstellung :D

_________________
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VecVi - Dokumentenerstellung und -ausgabe mit VectorDraw
BeitragVerfasst: 23.11.2017 08:41 
Offline
Benutzeravatar

Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten
Hallo Andesdaf,
die Druckvorschau nutzt nur 18% meines Bildschirms aus.
Wie kann man VecVi einfach an die aktuelle Bildschirmauslösung anpassen, hier beim Testsystem 1280x1920 oder im Produktionssystem 2160x3840?

_________________
PB Spickzettel

Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im sichtbaren Universum.
Bitte Frage fragen.
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VecVi - Dokumentenerstellung und -ausgabe mit VectorDraw
BeitragVerfasst: 23.11.2017 16:50 
Offline
Moderator
Benutzeravatar

Registriert: 15.06.2008 18:22
Wohnort: Erdgeschoß
Danke schon mal für die positiven Rückmeldungen!

@juergenkulow:
Das CanvasGadget kannst du ja automatisch an die verfügbaren Abmessungen anpassen.
Mit SetOutputScale() kannst du dein am Anfang gewähltes Seitenformat beliebig
hoch- oder runterskalieren.

Da VecVi mit Millimetern als Einheit arbeitet, müsstest du zuerst die Pixel-Werte des A4-Formats
über den PPI-Wert deines Monitors und dann daraus und den Pixel-Abmessungen deines
Desktops den Skalierungsfaktor berechnen.

Vielleicht füge ich dafür noch eine Funktion hinzu, mal sehen.

_________________
Win10 x64 | PB 5.62 (x86 und x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VecVi - Dokumentenerstellung und -ausgabe mit VectorDraw
BeitragVerfasst: 23.11.2017 17:19 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Um aus Auflösung und Displaygröße PPI zu berechnen, hier eine Funktion
Code:
Procedure.d   gimmePPI(width.i, height.i, inch.d)
   ProcedureReturn Sqr(width * width + height * height) / inch
EndProcedure

; Beispiel Samsung Galaxy S4
Debug gimmePPI(1920, 1080, 5)

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VecVi - Dokumentenerstellung und -ausgabe mit VectorDraw
BeitragVerfasst: 23.11.2017 22:27 
Offline
Benutzeravatar

Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten
Hallo Andesdaf,

ich habe noch eine Frage zur Skalierung:
In der Procedure Main gibt es jetzt einen ZoomFaktor und der ist für die Testumgebung 1200x1920 gut.
Code:
Procedure main()
  Protected.i i,
           iEvent,
           iMaxPage
  Protected  AnzahlBildschirme=ExamineDesktops() ; JK Neu Anfang
  Protected  GroessterBildschirm=0
  Protected  k=1
  Protected  BildschirmHoehe=DesktopHeight(0) 
  While k<AnzahlBildschirme
    If DesktopHeight(k)>BildschirmHoehe
      GroessterBildschirm=k
    EndIf
    k+1
  Wend 
  BildschirmHoehe=DesktopHeight(GroessterBildschirm)
  Protected BildschirmBreite=DesktopWidth(GroessterBildschirm)
  Protected Fenster=OpenWindow(#PB_Any, DesktopX(GroessterBildschirm), DesktopY(GroessterBildschirm),
                               BildschirmBreite, BildschirmHoehe, "VecVi",
                               #PB_Window_BorderLess) ; JK Neu Ende
  Protected ZoomFaktor=70 ; JK Neu
  ButtonGadget(1, 5, 5, 100, 25, "Drucken")
  ButtonGadget(2, 110, 5, 50, 25, "<")
  StringGadget(3, 165, 5, 100, 25, "", #PB_String_ReadOnly)
  ButtonGadget(4, 270, 5, 50, 25, ">")
  TextGadget(6, 350, 5, 30, 25, "Zoom:") ; JK Zoom wirkt sich auf die Größe des Ausdrucks aus.
  ScrollBarGadget(5, 400,  5, 300, 20, 0, 200, 1)
    SetGadgetState(5, 100)
 
  CanvasGadget(0, 0, 35, BildschirmBreite, BildschirmHoehe-50) ; JK Width, Height
 
  createVecVi()
 
  iMaxPage = VecVi::GetRealPageCount(*VecVi)
  i = 1
  SetGadgetText(3, "Seite " + Str(i) + " von " + Str(iMaxPage))
  VecVi::SetOutputScale(*VecVi, GetGadgetState(5) / ZoomFaktor, GetGadgetState(5) / ZoomFaktor) ;JK Neu
  VecVi::OutputCanvas(*VecVi, 0, i)
 
  Repeat
    iEvent = WaitWindowEvent()
   
    Select iEvent
      Case #PB_Event_Gadget
        Select EventGadget()
         
          Case 1
            If Not PrintRequester()
              Continue
            EndIf
            If StartPrinting("Test")
              VecVi::OutputPrinter(*VecVi)
              StopPrinting()
            EndIf
           
          Case 2
            If i > 1
              i - 1
              SetGadgetText(3, "Seite " + Str(i) + " von " + Str(iMaxPage))
              VecVi::OutputCanvas(*VecVi, 0, i)
            EndIf
         
          Case 4
            If i < iMaxPage
              i + 1
              SetGadgetText(3, "Seite " + Str(i) + " von " + Str(iMaxPage))
              VecVi::OutputCanvas(*VecVi, 0, i)
            EndIf
           
          Case 5
            VecVi::SetOutputScale(*VecVi, GetGadgetState(5) / ZoomFaktor, GetGadgetState(5) / ZoomFaktor) ;JK Zoomfaktor
            VecVi::OutputCanvas(*VecVi, 0, i)
         
        EndSelect
       
    EndSelect
   
  Until iEvent = #PB_Event_CloseWindow
EndProcedure

Allerdings in der 4k Umgebung(2160x3840) müsste der ZoomFaktor um einen Faktor 2 anders gewählt werden, damit der Bildschirm gefüllt wird. Die physikalische Größe der beiden Bildschirme ist in cm fast gleich. Im Ausdruck ist dann nur ein Ausschitt zu sehen, etwa 1/4 des Inhalts.

TOP2
Die Grafik auf der letzten Seite wirkt im Ausdruck in allen Fällen viel kleiner als in der Druckvorschau.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VecVi - Dokumentenerstellung und -ausgabe mit VectorDraw
BeitragVerfasst: 24.11.2017 00:48 
Offline
Moderator
Benutzeravatar

Registriert: 15.06.2008 18:22
Wohnort: Erdgeschoß
bitte verzeiht mir den nachlässigen Stil und eventuelle Denkfehler, ist schon spät.

So funktioniert es auf meinem 18,4-Zoll-Bildschirm, den Wert musst du anpassen,
genauso ob Höhe oder Breite maßgebend sind bei anderer Ausrichtung von Dokument/Monitor etc.
Benutzt den Code von Nic oben (Danke!)

Code:
Procedure main()
  Protected.i i,
           iEvent,
           iMaxPage
  Protected  AnzahlBildschirme=ExamineDesktops() ; JK Neu Anfang
  Protected  GroessterBildschirm=0
  Protected  k=1
  Protected  BildschirmHoehe=DesktopHeight(0)
  While k<AnzahlBildschirme
    If DesktopHeight(k)>BildschirmHoehe
      GroessterBildschirm=k
    EndIf
    k+1
  Wend
  BildschirmHoehe=DesktopHeight(GroessterBildschirm)
  Protected BildschirmBreite=DesktopWidth(GroessterBildschirm)
  Protected Fenster=OpenWindow(#PB_Any, DesktopX(GroessterBildschirm), DesktopY(GroessterBildschirm),
                               BildschirmBreite, BildschirmHoehe, "VecVi",
                               #PB_Window_BorderLess) ; JK Neu Ende
  Protected.d PPI = gimmePPI(BildschirmBreite, BildschirmHoehe, 18.4)
 
  Protected pxW, pxH, pnW, pnH
  pxW = Val(StringField(VecVi::#FORMAT_A4, 1, ",")) * PPI / 25.4
  pxH = Val(StringField(VecVi::#FORMAT_A4, 2, ",")) * PPI / 25.4
 
  Protected.d Ratio = pxW / pxH
 
  Protected.d Zoom
 
  pnH = BildschirmHoehe
  pnW = pnH * Ratio
 
  Zoom = pnW/pxW
 
  ButtonGadget(1, 5, 5, 100, 25, "Drucken")
  ButtonGadget(2, 110, 5, 50, 25, "<")
  StringGadget(3, 165, 5, 100, 25, "", #PB_String_ReadOnly)
  ButtonGadget(4, 270, 5, 50, 25, ">")
  TextGadget(6, 350, 5, 30, 25, "Zoom:") ; JK Zoom wirkt sich auf die Größe des Ausdrucks aus.
  ScrollBarGadget(5, 400,  5, 300, 20, 0, 200, 1)
    SetGadgetState(5, Zoom * 100)
 
  CanvasGadget(0, 0, 35, BildschirmBreite, BildschirmHoehe-50) ; JK Width, Height
 
  createVecVi()
 
  iMaxPage = VecVi::GetRealPageCount(*VecVi)
  i = 1
  SetGadgetText(3, "Seite " + Str(i) + " von " + Str(iMaxPage))
  VecVi::SetOutputScale(*VecVi, Zoom, Zoom) ;JK Neu
  VecVi::OutputCanvas(*VecVi, 0, i)
 
  Repeat
    iEvent = WaitWindowEvent()
   
    Select iEvent
      Case #PB_Event_Gadget
        Select EventGadget()
         
          Case 1
            If Not PrintRequester()
              Continue
            EndIf
            If StartPrinting("Test")
              VecVi::OutputPrinter(*VecVi)
              StopPrinting()
            EndIf
           
          Case 2
            If i > 1
              i - 1
              SetGadgetText(3, "Seite " + Str(i) + " von " + Str(iMaxPage))
              VecVi::OutputCanvas(*VecVi, 0, i)
            EndIf
         
          Case 4
            If i < iMaxPage
              i + 1
              SetGadgetText(3, "Seite " + Str(i) + " von " + Str(iMaxPage))
              VecVi::OutputCanvas(*VecVi, 0, i)
            EndIf
           
          Case 5
            VecVi::SetOutputScale(*VecVi, GetGadgetState(5) / 100, GetGadgetState(5) / 100) ;JK Zoomfaktor
            VecVi::OutputCanvas(*VecVi, 0, i)
         
        EndSelect
       
    EndSelect
   
  Until iEvent = #PB_Event_CloseWindow
EndProcedure

main()


wenn du vor OutputPrinter() nochmal SetOutputScale(*VecVi, 1, 1) aufrufst, wird auch in Originalgröße
gedruckt.

Zum TOP2: dem Bild bei ImageCell() noch eigene Abmessungen mitgeben, sollte es erstmal beheben. Den
Rest muss ich mir erst in Ruhe anschauen.

_________________
Win10 x64 | PB 5.62 (x86 und x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VecVi - Dokumentenerstellung und -ausgabe mit VectorDraw
BeitragVerfasst: 15.12.2017 18:52 
Offline
Moderator
Benutzeravatar

Registriert: 15.06.2008 18:22
Wohnort: Erdgeschoß
Hab eine neue Version (1.02) hochgeladen.

neben einigen Bugfixes gibt es jetzt auch die Möglichkeit, Rechtecke, Ellipsen(-segmente) und Kurven
anzulegen. Außerdem sind gestrichelte, gepunktete Linien/Rahmen etc. und die Verschiebung der gesamten
Seite in X/Y-Richtung möglich. Damit möchte ich demnächst einen vertikalen Seitenlauf und Verschiebung
beim Zoomen im CanvasGadget ermöglichen (so wie in gängigen PDF-Readern).

Edit:

in Version 1.03 ist jetzt Zoomen und Verschieben sowie die fortlaufende Darstellung der Seiten möglich.

_________________
Win10 x64 | PB 5.62 (x86 und x64)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye