Imprimer un diagramme sans passer par une image
Imprimer un diagramme sans passer par une image
Bonjour à tous,
toujours pour mon logiciel de dépistage du diabète, je souhaiterais, pour la nouvelle mise à jour, imprimer des diagrammes sans passer par une image qui déforme les écritures, directement sur l'imprimante.
falsam m'avait montré comment faire des diagramme avec "ChartGadget", c'est parfait mais je voudrais savoir recopier l'écran vers l'imprimante, c'est pourquoi je me tourne vers vous pour solliciter votre aide qui me sera précieuse.
Je vous en remercie d'avance.
Le format pourra être en portrait ou en paysage qui ressemble plus à l'image sur l'écran.
Merci encore
toujours pour mon logiciel de dépistage du diabète, je souhaiterais, pour la nouvelle mise à jour, imprimer des diagrammes sans passer par une image qui déforme les écritures, directement sur l'imprimante.
falsam m'avait montré comment faire des diagramme avec "ChartGadget", c'est parfait mais je voudrais savoir recopier l'écran vers l'imprimante, c'est pourquoi je me tourne vers vous pour solliciter votre aide qui me sera précieuse.
Je vous en remercie d'avance.
Le format pourra être en portrait ou en paysage qui ressemble plus à l'image sur l'écran.
Merci encore
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Imprimer un diagramme sans passer par une image
Bonjour Micoute,
Le mieux à mon sens est d'utilisé la bibliothèque Vector qui fonctionne très bien.
Le mieux à mon sens est d'utilisé la bibliothèque Vector qui fonctionne très bien.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Imprimer un diagramme sans passer par une image
Code : Tout sélectionner
Declare imprime(img,w,h)
Declare prepareprint()
If OpenWindow(0, 0, 0, 700, 350, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; left column
TextGadget (6, 10, 10, 330, 20, "ListIcon Standard", #PB_Text_Center)
ListIconGadget(0, 10, 25, 330, 70, "Column 1", 100)
TextGadget (7, 10, 105, 330, 20, "ListIcon with Checkbox", #PB_Text_Center)
ListIconGadget(1, 10, 120, 330, 70, "Column 1", 100, #PB_ListIcon_CheckBoxes) ; ListIcon with checkbox
TextGadget (8, 10, 200, 330, 20, "ListIcon with Multi-Selection", #PB_Text_Center)
ListIconGadget(2, 10, 215, 330, 70, "Column 1", 100, #PB_ListIcon_MultiSelect) ; ListIcon with multi-selection
; right column
TextGadget (9, 360, 10, 330, 20, "ListIcon with separator lines",#PB_Text_Center)
ListIconGadget(3, 360, 25, 330, 70, "Column 1", 100, #PB_ListIcon_GridLines)
TextGadget (10, 360, 105, 330, 20, "ListIcon with FullRowSelect and AlwaysShowSelection",#PB_Text_Center)
ListIconGadget(4, 360, 120, 330, 70, "Column 1", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
TextGadget (11, 360, 200, 330, 20, "ListIcon Standard with large icons",#PB_Text_Center)
ListIconGadget(5, 360, 220, 330, 65, "", 200,#PB_ListIcon_GridLines)
For a = 0 To 4 ; add columns to each of the first 5 listicons
For b = 2 To 4 ; add 3 more columns to each listicon
AddGadgetColumn(a, b, "Column " + Str(b), 65)
Next
For b = 0 To 2 ; add 4 items to each line of the listicons
AddGadgetItem(a, b, "Item 1"+Chr(10)+"Item 2"+Chr(10)+"Item 3"+Chr(10)+"Item 4")
Next
Next
; Here we change the ListIcon display to large icons and show an image
If LoadImage(0, #PB_Compiler_Home+"Examples\Sources\Data\File.bmp") ; change path/filename to your own 32x32 pixel image
SetGadgetAttribute(5, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon)
AddGadgetItem(5, 1, "Picture 1", ImageID(0))
AddGadgetItem(5, 2, "Picture 2", ImageID(0))
EndIf
ButtonGadget(50,10,300,100,20,"imprimer ?")
BindGadgetEvent(50,@prepareprint())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Procedure prepareprint()
Protected img,h,w,hpage,wpage,hprint,wprint
w=WindowWidth(0)
h=WindowHeight(0)
StartDrawing(WindowOutput(0))
DrawingMode(#PB_2DDrawing_AlphaChannel)
img = GrabDrawingImage(#PB_Any,0,0,w,h)
StopDrawing()
StartDrawing(ImageOutput(img))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0,0,w,h,RGBA(0,0,0,255))
StopDrawing()
;Ici j'ouvre juste pour voir le résultat....
; OpenWindow(1,0,0,WindowWidth(0),WindowHeight(0),"result")
; ImageGadget(#PB_Any,0,0,WindowWidth(0),WindowHeight(0),ImageID(img))
;pour imprimer ça doit ressembler à ça (je te laisse le loins de modifier w et h par le DPI de l'imprimante tout ça...
If PrintRequester()
wpage = PrinterPageWidth()
hpage = PrinterPageHeight()
If hpage > wpage ;Impression en portrait
MessageRequester("protrait","")
If w*wpage>h*hpage
wprint = wpage
hprint = h*wpage/w
Else
hprint = hpage
wprint = w*hpage/h
EndIf
Else ;Impression en paysage
If w*wpage>h*hpage
wprint=wpage
hprint = h*wpage/w
Else
hprint = hpage
wprint = w*hpage/h
EndIf
EndIf
imprime(img,wprint,hprint)
EndIf
EndProcedure
Procedure imprime(img,w,h)
If StartPrinting("Print window")
If StartDrawing(PrinterOutput())
DrawImage(ImageID(img),0, 0 , w,h)
StopDrawing()
EndIf
StopPrinting()
EndIf
FreeImage(img)
EndProcedure
La fonction GrabDrawingImage() ne permet as de dessiner directelent sur l'imprimante, il faut passer par une image, mais j'espère que cette solution évitera de déformer les écritures, tiens moi au courant !imprimer des diagrammes sans passer par une image qui déforme les écritures, directement sur l'imprimante.
Dernière modification par boby le mer. 21/nov./2018 15:52, modifié 1 fois.
Re: Imprimer un diagramme sans passer par une image
Merci boby,
c'est très gentil à toi de me donner de ton temps précieux, ta méthode est très intéressante, mais quand il faut passer par une image, c'est compliqué d'utiliser l'espace de l'écran et faire des calculs pour ça utilise toute une feuille en format A4, c'est pourquoi j'ai demandé sans passer par une image, car ça impose de faire une mise en page impeccable.
J'aimerais trouver une méthode passe-partout, mais il ne faut pas rêver.
c'est très gentil à toi de me donner de ton temps précieux, ta méthode est très intéressante, mais quand il faut passer par une image, c'est compliqué d'utiliser l'espace de l'écran et faire des calculs pour ça utilise toute une feuille en format A4, c'est pourquoi j'ai demandé sans passer par une image, car ça impose de faire une mise en page impeccable.
J'aimerais trouver une méthode passe-partout, mais il ne faut pas rêver.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Imprimer un diagramme sans passer par une image
Rhoo Micoute voyons ! Je sais que l'école ça remonte un peut mais quand même ! Les proportions ça se résume à un simple calcule en croix (Et si t'es aussi mauvais que moi en math, l'utilisation d'un post'It est autorisé !
) .
J'ai mis à jour le code, il regarde le format (portrait/paysage) il compare qui du width ou du heigh et le plus gros, et il adapte celui à adapter en fonction... Dit moi si ça te conviens.

J'ai mis à jour le code, il regarde le format (portrait/paysage) il compare qui du width ou du heigh et le plus gros, et il adapte celui à adapter en fonction... Dit moi si ça te conviens.
Re: Imprimer un diagramme sans passer par une image
Pour faire des impressions sérieuses de texte + images on génère un état, c'est à dire une mise en page spéciale.
Etirer des images, ce sera toujours moche car il faut tenir compte de la résolution de l'écran et de celle de l'imprimante.
Il est plus fiable d'utiliser la nouvelle lib VectorDrawing comme a dit microdevweb.
Mais l'idéal c'est de générer du PDF (pas avec une imprimante virtuelle, mais avec des fonctions de lib (hélas toujours pas dans le package natif de PB, pourtant ce serait un argument de vente pour trouver des nouveaux clients pro, bien plus qu'avec des fonctions 3D, mais bon...)
Avantages à générer du PDF pour les éditions:
Etirer des images, ce sera toujours moche car il faut tenir compte de la résolution de l'écran et de celle de l'imprimante.
Il est plus fiable d'utiliser la nouvelle lib VectorDrawing comme a dit microdevweb.
Mais l'idéal c'est de générer du PDF (pas avec une imprimante virtuelle, mais avec des fonctions de lib (hélas toujours pas dans le package natif de PB, pourtant ce serait un argument de vente pour trouver des nouveaux clients pro, bien plus qu'avec des fonctions 3D, mais bon...)
Avantages à générer du PDF pour les éditions:
- Ne pas se préoccuper de la résolution de l'imprimante. On dit, je veux une page A4.
- Archiver les éditions
- Envoyer des résultats par email sans s'occuper de ce qu'utilise le lecteur
- L’utilisateur peut imprimer tel quel (donc à l'échelle source) ou zoomer et changer de format, ce qui permet de passer de A4 à US

Re: Imprimer un diagramme sans passer par une image
@Marc56, je trouve tes conseils très judicieux.
@boby, ta mise à jour est parfaite, j'adore et je vais sûrement adopter car ça s'approche de très près à ce que je souhaite faire.
Merci à vous deux car vous m'avez été très précieux.
@boby, ta mise à jour est parfaite, j'adore et je vais sûrement adopter car ça s'approche de très près à ce que je souhaite faire.
Merci à vous deux car vous m'avez été très précieux.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Imprimer un diagramme sans passer par une image
Utiliser la lib VectorDrawing est en effet une bonne solution pour ne pas avoir à se soucier de la résolution, mais, utiliser la lib VectorDrawing veux dire dessiner les graphes de micoute en vectoriel dans l'imprimante, la demande étant "comment qu'on imprime un gadget" (à moins que je racompte totalement nimportequoi dans ce cas je suis fort preneur de l'info) l'utilisation de la lib VectorDrawing n'est pas possible.
Pour le PDF, quand j'en ai besoin, j'utilise GhostScript, mais ça grossie drastiquement l'executable (environ 9Mo) et impose de faire des crédits pour les citer. Encore une fois, si tu as un import plus léger et aussi fonctionnel de lib permettant de composer/travailler du PDF, je suis preneur.
@Micoute, cool si ça te dépanne, ravis d'avoir aidé.
Pour le PDF, quand j'en ai besoin, j'utilise GhostScript, mais ça grossie drastiquement l'executable (environ 9Mo) et impose de faire des crédits pour les citer. Encore une fois, si tu as un import plus léger et aussi fonctionnel de lib permettant de composer/travailler du PDF, je suis preneur.
@Micoute, cool si ça te dépanne, ravis d'avoir aidé.
Re: Imprimer un diagramme sans passer par une image
Merci boby, car je dois dire que ça m'a bien aidé, j'ai juste à suivre le cheminement qui m'est tout tracé.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Imprimer un diagramme sans passer par une image
PurePDFboby a écrit : Pour le PDF, quand j'en ai besoin, j'utilise GhostScript, mais ça grossie drastiquement l'executable (environ 9Mo) et impose de faire des crédits pour les citer. Encore une fois, si tu as un import plus léger et aussi fonctionnel de lib permettant de composer/travailler du PDF, je suis preneur.
PurePDF Purebasic UserLibrary Version 2.08 (c) Lucky Luke
Enhancements by ABBKlaus using Adobe PDF-Reference V1.6
The PurePDF user library based upon the FPDF class contains
PureBasic functions to create PDF files.
This library is provided as freeware. It may be used freely for any purpose, personal or commercial. A credit in your application would be appreciated.
This library is written in PureBasic, built with Tailbite and distributed by Library Installer.
Help created with PureHELP Maker.
Le site n'existe plus, mais les fichiers sont toujours là et il a été transformé en module
(ABBKlaus a créé d'excellentes libs (PDF, CodeBar, Printer, ExcelWriter, RMCharts etc), et chacune avec l'aide contextuelle PureBasic. C'est ce travail qu'il serait intéressant de voir intégré à PB si l'auteur initial le veut bien)
Version module
https://www.purebasic.fr/english/viewto ... it=purepdf
Il est basé sur FPDF lib PHP très légère qui existe depuis 2001
http://www.fpdf.org/
Aucune DLL à installer avec l'application.

Re: Imprimer un diagramme sans passer par une image
Merci beaucoup Marc56, maintenant j'ai plus qu'à ...
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Imprimer un diagramme sans passer par une image
@boby
merci pour ton code. Je met dans ma bibli.
a+
merci pour ton code. Je met dans ma bibli.
a+
Re: Imprimer un diagramme sans passer par une image
@Marc56 merci du partage, des libs fort intéressante tout ça !!
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Imprimer un diagramme sans passer par une image
Je peux reproché certaines choses à Pb mais honnêtement la librairie VectorDrawing est top, j'ai fais pas mal d'états imprimé avec et même avec des preview écran (zoom etc). (je reproche d’ailleurs à java de ne pas avoir la possibilité de choisir le type d'unité de pouvoir les convertir aussi facilement que avec pb)
Tu peux même choisir comme unité le mm, donc essayé de copié ce qui est affiché à l'écran est à mon sens un très mauvais plan.
Réutilise par contre ton code est assez simple il suffit simplement de changé les unité de valeur et de refaire la mise en page
Tu peux même choisir comme unité le mm, donc essayé de copié ce qui est affiché à l'écran est à mon sens un très mauvais plan.
Réutilise par contre ton code est assez simple il suffit simplement de changé les unité de valeur et de refaire la mise en page
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Imprimer un diagramme sans passer par une image
Merci microdevweb pour tes conseils avisés, on sent le vêcu
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !