JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Un petit livret Mar 5 Avr 2011 - 22:53 | |
| Fabrication d'un petit livret de poche de 8 pages à partir d'une feuille A4. Je m'en sers par exemple pour faire un petit annuaire téléphonique qui tient dans mon portefeuille. 1) Fabrication matérielle: On imprime le texte formaté sous forme de 8 images de page sur une feuille A4, qui est ensuite pliée judicieusement pour que les pages se suivent: à gauche la page en sortie d'imprimante. Une incision est pratiquée au cutter sur la ligne rouge, puis la page est pliée: - dans le sens de la longueur, texte à l'extérieur - dans le sens de la largeur entre 7/8 et 3/4, texte à l'extérieur, puis entre 1/8 et 2/3, et 6/7 et 4/5 texte à l'intérieur et le tout est replié de façon que les pages se suivent. Pour le pliage, ne pas se fier aveuglément aux traits qui peuvent être un peu décalés en fonction de l'imprimante, mais plutôt aux bords de la feuille, l'incision se faisant juste sur la pliure. 2) Logiciel: Le fichier d'origine est mis en forme pour obtenir une largeur continue du nombre de caractères de chaque page, compte tenu de la police de caractères et des marges gauche et droite. On utilise ici une police fixe, et il est bon de prévoir un minimum de marges. (il est possible d'éditer le fichier d'origine, pour ajustements). Puis chaque page est fabriquée sous forme d'image dans des Picture ( 8 ), certaines tête-bêche. Enfin, l'ensemble est regroupé sous forme d'une image unique (image de la page A4) qui sera imprimée. Image partielle de l'écran de travail: On utilise IrfanView pour les manipulations d'images: retournements et regroupements, et WinTextPrint de l'ami Klaus pour l'impression finale (mais on peut aussi imprimer l'image avec un programme de traitement d'image). - Code:
-
' Livret.bas, fabrication et impression d'un livret à partir d'une feuille A4 DIM w0, h0, w1, h1, wa, t1, l1, x, y, x1%, x2%, x3%, x4%, y1%, y2%, p, sens(8), u% DIM f$, f1$, a$, b$, n, pol$, sz, nc, nl, l, lc%, hc%, xa, ya, r, g, b, lp, hp DIM t2,t3,t4,t5,t6,t7,t8,l2,l3,l4,l5,l6,l7,l8, td, lf, lm, eda, i%, j%, gras, ital DIM iv$, ip$, mh, mb, mg, md, nump, ncu, nlu, rtemp$, nm$, ad$, tl$, lt, ln DIM la, fi$(8), fm$, fp$, fh1$, fh2$, fpr$, fsz$, fbk$, atf, ats, w, h, xt, yt DIM fa$, fb$, fc$, fr$, fd$, ff$, v%(1000) DIM tf%, tf2, tf3, lh%, w%, h%, bpp%, ll%, ll2, ll3, pos
LABEL Chf, Chp, Cht, Che, Param, Mfo, Refresh, Mfot, Mfoa, Mfop, ra, rq, ewt LABEL Ecpage, Vflip, phot, Edite, Edr, Imprime, Tailcar, Dimima, Composite LABEL BmpInfos, Aide
' ************** chemins de fichiers à adapter ***************** rtemp$ = "Z:\": ' répertoire de travail f1$ = rtemp$ + "Txfor.txt" fm$ = rtemp$ + "page1.bmp" fp$ = rtemp$ + "livret.jpg" fpr$ = rtemp$ + "Impr" fh1$ = rtemp$ + "H1.bmp" fh2$ = rtemp$ + "H2.bmp" fsz$ = rtemp$ + "Listail" fbk$ = rtemp$ + "Back.bmp" fd$ = rtemp$ + "Dir.tmp" ff$ = rtemp$ + "Info.txt" fb$ = rtemp$ + "Img.bmp" ' Ressources externes: iv$ = "C:\Progra~1\Irfanv~1\i_view32.exe ": ' IrfanView ip$ = "C:\Util\WinTextPrint.exe ": ' utilitaire d'impression de Klaus
sens(1)=1:sens(2)=0:sens(3)=0:sens(4)=0:sens(5)=0:sens(6)=1:sens(7)=1:sens(8)=1 w0= 1140: h0 = 960 WIDTH 0, w0: HEIGHT 0, h0: FONT_BOLD 0: CAPTION 0, " - LIVRET -" COLOR 0, 128,255,255 w1 = 1100: h1 = w1*210/297: ' (image finale = 1100 x 778 pixels) lp = w1/4: hp = h1/2 t1 = 10: l1 = 10 x1% = w1/4: x2% = w1/2: x3% = 3*w1/4: x4% = w1 y1% = h1/2: y2% = h1 t2 = t1+hp: l2 = l1 t3 = t2: l3 = l1+lp t4 = t2: l4 = l3+lp t5 = t2: l5 = l4+lp t6 = t1: l6 = l5 t7 = t1: l7 = l4 t8 = t1: l8 = l3 PICTURE 1: TOP 1, t1: LEFT 1, l1: WIDTH 1, lp: HEIGHT 1, hp 2D_TARGET_IS 1: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp PICTURE 2: TOP 2, t2: LEFT 2, l2: WIDTH 2, lp: HEIGHT 2, hp 2D_TARGET_IS 2: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp PICTURE 3: TOP 3, t3: LEFT 3, l3: WIDTH 3, lp: HEIGHT 3, hp 2D_TARGET_IS 3: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp PICTURE 4: TOP 4, t4: LEFT 4, l4: WIDTH 4, lp: HEIGHT 4, hp 2D_TARGET_IS 4: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp PICTURE 5: TOP 5, t5: LEFT 5, l5: WIDTH 5, lp: HEIGHT 5, hp 2D_TARGET_IS 5: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp PICTURE 6: TOP 6, t6: LEFT 6, l6: WIDTH 6, lp: HEIGHT 6, hp 2D_TARGET_IS 6: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp PICTURE 7: TOP 7, t7: LEFT 7, l7: WIDTH 7, lp: HEIGHT 7, hp 2D_TARGET_IS 7: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp PICTURE 8: TOP 8, t8: LEFT 8, l8: WIDTH 8, lp: HEIGHT 8, hp 2D_TARGET_IS 8: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp td = t1 + h1 + 60 lf = 350 ALPHA 10: TOP 10, td: LEFT 10, lf CAPTION 10, "Marges: Haut Bas Gauche Droite" mg = 2: md = 2: mh = 1: mb = 0: ' marges (en caractères ou lignes) SPIN 11: TOP 11, td+20: LEFT 11, lf+50: WIDTH 11, 50: POSITION 11, mh SPIN 12: TOP 12, td+20: LEFT 12, lf+110: WIDTH 12, 50: POSITION 12, mb SPIN 13: TOP 13, td+20: LEFT 13, lf+170: WIDTH 13, 50: POSITION 13, mg SPIN 14: TOP 14, td+20: LEFT 14, lf+230: WIDTH 14, 50: POSITION 14, md
FOR x = 11 TO 14: MIN x, 0: MAX x, 20: NEXT x
CHECK 15: TOP 15, td+50: LEFT 15, lf+50: WIDTH 15, 200: CAPTION 15, "Pages numérotées" MARK_ON 15 ALPHA 16: TOP 16, td-55: LEFT 16, lf: CAPTION 16, "Fichier:" EDIT 17: TOP 17, td-55: LEFT 17, lf+50: WIDTH 17, 270 TEXT 17, f$: ON_CLICK 17, Chf BUTTON 18: TOP 18, td-20: LEFT 18, lf+330: WIDTH 18, 100: CAPTION 18, "EXEC" ON_CLICK 18, Mfo BUTTON 19: TOP 19, td-55: LEFT 19, lf+330: WIDTH 19, 100: CAPTION 19, "Edit source" ON_CLICK 19, Edite BUTTON 20: TOP 20, td+45: LEFT 20, lf+330: WIDTH 20, 100: CAPTION 20, "Imprimer" ON_CLICK 20, Imprime BUTTON 28: TOP 28, td+45: LEFT 28, lf+440: WIDTH 28, 100: CAPTION 28, "Aide" ON_CLICK 28, Aide BUTTON 25: TOP 25, td+15: LEFT 25, lf+330: WIDTH 25, 100: CAPTION 25, "Edit résultat" ON_CLICK 25, Edr CONTAINER_OPTION 21: TOP 21, td-35: LEFT 21, lf+50: WIDTH 21, 270: HEIGHT 21, 35 OPTION 22: PARENT 22, 21: TOP 22, 12: LEFT 22, 10: CAPTION 22, "Texte" OPTION 23: PARENT 23, 21: TOP 23, 12: LEFT 23, 100: CAPTION 23, "Annuaire" OPTION 24: PARENT 24, 21: TOP 24, 12: LEFT 24, 200: caption 24, "Photos" MARK_ON 22
OPEN_DIALOG 50 pol$ = "Lucida Console": sz = 8: ' Police à pas fixe gras = 0: ital = 0 GOSUB Tailcar: ' -> lc%, hc%: taille des caractères, en pixels FOR p = 1 TO 8 FONT_NAME p, pol$: FONT_SIZE p, sz NEXT p nc = INT(x1%/lc%)-1: ' largeur totale de colonne, en caractères nl = INT(y1%/hc%)-1: ' nombre total de lignes par page nump = 0: ' numérotation des pages eda = 0 atf = 0: ats = 0 ALPHA 30: TOP 30, td-55: LEFT 30, 10: CAPTION 30, "Police =" LIST 31: TOP 31, td-55: LEFT 31, 60: HEIGHT 31, 25: WIDTH 31, 200: ITEM_ADD 31, pol$ ON_CLICK 31, Chp ALPHA 32: TOP 32, td-28: LEFT 32, 10: CAPTION 32, "Taille =" LIST 33: TOP 33, td-28: LEFT 33, 60: HEIGHT 33, 25: WIDTH 33, 40: ITEM_ADD 33, STR$(sz) ON_CLICK 33, Cht ALPHA 34: TOP 34, td+2: LEFT 34, 10: CAPTION 34, "1 carac= mm." LIST 35: TOP 35, td: LEFT 35, 60: HEIGHT 35, 20: WIDTH 35, 40: ITEM_ADD 35, STR$(lc%*297/1100) ALPHA 36: TOP 36, td+27: LEFT 36, 10: CAPTION 36, "1 ligne= mm." LIST 37: TOP 37, td+25: LEFT 37, 60: HEIGHT 37, 20: WIDTH 37, 40: ITEM_ADD 37, STR$(hc%*297/1100) ALPHA 38: TOP 38, td+52: LEFT 38, 10: CAPTION 38, "1 page= lignes de caract.(total)" LIST 39: TOP 39, td+50: LEFT 39, 60: HEIGHT 39, 20: WIDTH 39, 30: ITEM_ADD 39, STR$(nl) LIST 40: TOP 40, td+50: LEFT 40, 155: HEIGHT 40, 20: WIDTH 40, 30: ITEM_ADD 40, STR$(nc) CHECK 45: TOP 45, td-25: LEFT 45, 120: CAPTION 45, "Gras" CHECK 46: TOP 46, td-25: LEFT 46, 180: CAPTION 46, "Italique" ON_CLICK 45, Che: ON_CLICK 46, Che
ALPHA 41: TOP 41, td-55: LEFT 41, w1-140: CAPTION 41, "Feuille A4 = 297 x 210 mm"
IF FILE_EXISTS(f1$) = 1 THEN FILE_DELETE f1$ END
' ================================= S/P ==================================== Chf: a$ = FILE_NAME$(50) IF a$ <> "" AND a$ <> "_" f$ = a$: TEXT 17, f$ END_IF RETURN
Chp: IF atf = 0 FONT_NAMES_ADD 31: atf = 1 ELSE pol$ = ITEM_INDEX$(31) CLEAR 31: ITEM_ADD 31, pol$ atf = 0 GOSUB Param END_IF RETURN
Cht: IF ats = 0 FILE_OPEN_WRITE 1, fsz$ FOR x = 5 TO 30: FILE_WRITELN 1, STR$(x): NEXT x FILE_CLOSE 1 FILE_ADD 33, fsz$: ats = 1 ELSE sz = VAL(ITEM_INDEX$(33)) CLEAR 33: ITEM_ADD 33, STR$(sz): FILE_DELETE fsz$ ats = 0 GOSUB Param END_IF RETURN
Che: gras = 0: ital = 0 IF CHECKED(45) = 1 THEN gras = 1 IF CHECKED(46) = 1 THEN ital = 1 GOSUB Param RETURN
Param: GOSUB Tailcar: ' -> lc%, hc%: taille des caractères, en pixels FOR p = 1 TO 8 FONT_NAME p, pol$: FONT_SIZE p, sz FONT_BOLD_OFF p: IF gras = 1 THEN FONT_BOLD p FONT_ITALIC_OFF p: IF ital = 1 THEN FONT_ITALIC p NEXT p nc = INT(x1%/lc%)-1: ' largeur totale de colonne, en caractères nl = INT(y1%/hc%)-1: ' nombre total de lignes par page CLEAR 35: ITEM_ADD 35, STR$(lc%*297/1100) CLEAR 37: ITEM_ADD 37, STR$(hc%*297/1100) CLEAR 39: ITEM_ADD 39, STR$(nl) CLEAR 40: ITEM_ADD 40, STR$(nc) RETURN
Mfo: ' Mise en largeur du fichier f$ -> f1$ mh = POSITION(11): mb = POSITION(12): mg = POSITION(13): md = POSITION(14) nump = 0: IF CHECKED(15) = 1 THEN nump = 1 ncu = nc-mg-md nlu = nl-mh-mb-nump f$ = TEXT$(17): IF f$ = "" THEN RETURN eda = 0 IF CHECKED(23) = 1 eda = 1 ELSE IF CHECKED(24) = 1 eda = 2 END_IF END_IF IF eda = 0 GOSUB Mfot: ' mise en forme fichier texte standard ELSE IF eda = 1 GOSUB Mfoa: ' mise en forme fichier type annuaire ELSE ' GOSUB Mfop: ' mise en forme photos GOSUB Composite END_IF END_IF Refresh: ' affichage des pages FOR p = 1 TO 8 GOSUB Ecpage NEXT p 2D_TARGET_IS 8: 2D_PEN_COLOR 255,0,0: 2D_LINE 0, hp-1, lp-1, hp-1 2D_TARGET_IS 7: 2D_PEN_COLOR 255,0,0: 2D_LINE 0, hp-1, lp-1, hp-1 2D_TARGET_IS 3: 2D_PEN_COLOR 255,0,0: 2D_LINE 0, 0, lp-1, 0 2D_TARGET_IS 4: 2D_PEN_COLOR 255,0,0: 2D_LINE 0, 0, lp-1, 0 2D_PEN_COLOR 0,0,0 RETURN
Mfot: ' Mise au format d'un fichier texte ordinaire FILE_OPEN_READ 1, f$: lm = 0 WHILE FILE_EOF(1) = 0 FILE_READLN 1, a$: IF LEN(a$) > lm THEN lm = LEN(a$) END_WHILE FILE_CLOSE 1 FILE_OPEN_READ 1, f$: FILE_OPEN_WRITE 2, f1$ WHILE FILE_EOF(1) = 0 FILE_READLN 1, a$: a$ = RTRIM$(a$) ra: IF LEN(a$) > ncu FOR x = ncu+1 TO 1 STEP -1 IF MID$(a$, x, 1) = " " THEN EXIT_FOR NEXT x IF x > 1 FILE_WRITELN 2, LEFT$(a$, x-1): a$ = MID$(a$, x+1, 200) ELSE FILE_WRITELN 2, LEFT$(a$, ncu): a$ = MID$(a$, ncu+1, 200) END_IF a$ = RTRIM$(a$): GOTO ra END_IF IF FILE_EOF(1) = 0 FILE_READLN 1, b$ IF LEFT$(b$, 1) <> " " AND LEFT$(b$, 1) <> CHR$(9) a$ = a$ + " " + b$: GOTO ra ELSE FILE_WRITELN 2, a$ a$ = b$: GOTO ra END_IF END_IF FILE_WRITELN 2, a$ END_WHILE FILE_CLOSE 1: FILE_CLOSE 2 RETURN
Mfoa: ' Mise en forme du fichier annuaire téléphonique, ' articles de la forme: Nom;Adresse;Numéro FILE_OPEN_READ 1, f$: FILE_OPEN_WRITE 2, f1$ WHILE FILE_EOF(1) = 0 FILE_READLN 1, a$: a$ = RTRIM$(a$) IF LEFT$(a$, 1) = "*" THEN GOTO ewt: ' ligne ignorée (commentaire) i% = INSTR(a$, ";") IF i% < 1 ad$ = a$ ELSE nm$ = LEFT$(a$, i%-1): ln = LEN(nm$) a$ = MID$(a$, i%+1, 200) i% = INSTR(a$, ";") IF i% > 0 ad$ = LEFT$(a$, i%-1): tl$ = MID$(a$, i%+1, 200) ELSE ad$ = "": tl$ = a$ END_IF tl$ = RTRIM$(tl$): lt = LEN(tl$) IF lt > 0 a$ = "": ' compactage du numéro (suppression des espaces) FOR i% = 1 TO LEN(tl$) IF MID$(tl$, i%, 1) <> " " THEN a$ = a$ + MID$(tl$, i%, 1) NEXT i% tl$ = a$: lt = LEN(tl$) x = ncu -lt - 1 ELSE x = ncu END_IF IF ln > x FOR i% = x+1 TO 1 STEP -1 IF MID$(nm$, i%, 1) = " " THEN EXIT_FOR NEXT i% IF ad$ <> "" ad$ = MID$(nm$, i%+1, 100) + " " + ad$ ELSE ad$ = MID$(nm$, i%, 100) END_IF nm$ = LEFT$(nm$, i%-1) END_IF FILE_WRITELN 2, nm$ + STRING$(x+1-LEN(nm$), " ") + tl$ END_IF rq: IF LEN(ad$) > (ncu-1) FOR i% = ncu TO 1 STEP -1 IF MID$(ad$, i%, 1) = " " THEN EXIT_FOR NEXT i% FILE_WRITELN 2, " " + LEFT$(ad$, i%-1) ad$ = MID$(ad$, i%+1, 100): GOTO rq END_IF ad$ = RTRIM$(ad$): IF ad$ <> "" THEN FILE_WRITELN 2, " " + ad$ ewt: END_WHILE FILE_CLOSE 1: FILE_CLOSE 2 RETURN
Mfop: xt = mg*lc%: yt = mh*hc% FOR u% = LEN(f$) TO 1 STEP -1 IF MID$(f$, u%, 1) = "\" THEN EXIT_FOR NEXT u% fr$ = rtemp$ + "composite.bmp" EXECUTE_WAIT "Cmd.exe /c DIR " + LEFT$(f$, u%) + "*.jpg /B >" + fd$ FILE_OPEN_READ 1, fd$ FOR p = 1 TO 8 IF FILE_EOF(1) = 1 THEN EXIT_FOR w0 = lp-INT((mg+md)*lc%): ' largeur réelle de l'image FILE_READLN 1, a$: f1$ = LEFT$(f$, u%) + a$: ' image d'origine GOSUB Dimima: ' -> dimensions de l'image: w, h h0 = INT(w0*h/w) IF w > h EXECUTE_WAIT iv$+f1$+" /resize=(0,"+STR$(w0)+") /aspectratio /rotate_l /convert="+fb$ ELSE EXECUTE_WAIT iv$+f1$+" /resize=("+STR$(w0)+",0) /aspectratio /convert="+fb$ END_IF PICTURE 300: TOP 300, -500: HEIGHT 300, hp-1: WIDTH 300, lp-1 FILE_SAVE 300, fr$: DELETE 300: ' image de fond (32 bpp) EXECUTE_WAIT iv$ + fr$ + " /bpp=24 /convert=" + fr$: ' -> 24 bpp fc$ = fb$: GOSUB BmpInfos: IF bpp% <> 24 THEN message str$(bpp%): stop tf2 = tf%: ll2 = ll%: w0 = w%: h0 = h% fc$ = fr$: GOSUB BmpInfos: IF bpp% <> 24 THEN message str$(bpp%): stop tf3 = tf%: ll3 = ll% FILEBIN_OPEN_READ 2, fb$: FILEBIN_OPEN_WRITE 3, fr$ FOR j% = 0 TO h0-1 FILEBIN_POSITION 2, tf2-(j%+1)*ll2: FILEBIN_BLOCK_READ 2, 3*w0, v%(0) FILEBIN_POSITION 3, tf3-(yt+j%+1)*ll3+xt*3: FILEBIN_BLOCK_WRITE 3, 3*w0, v%(0) NEXT j% FILEBIN_CLOSE 2: FILEBIN_CLOSE 3 FILE_LOAD p, fr$ IF nump > 0 PRINT_TARGET_IS p y = 2+(nl-1)*hc%: PRINT_LOCATE lp/2-20, y: PRINT "- "+STR$(p)+" -" END_IF NEXT p FILE_DELETE fb$: FILE_DELETE fr$ FILE_CLOSE 1: FILE_DELETE fd$ RETURN
Ecpage: ' écriture de la page p, depuis le fichier f1$ IF eda = 2 THEN GOTO phot 2D_TARGET_IS p 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp: ' Raz PRINT_TARGET_IS p FONT_BOLD_OFF p: IF gras = 1 THEN FONT_BOLD p FONT_ITALIC_OFF p: IF ital = 1 THEN FONT_ITALIC p FILE_OPEN_READ 1, f1$ IF p > 1 FOR n = 1 TO (p-1)*nlu IF FILE_EOF(1) = 1 THEN EXIT_FOR FILE_READLN 1, a$ NEXT n END_IF y = 2 IF mh > 0 FOR n = 1 TO mh PRINT_LOCATE 2, y: PRINT "" y = y + hc% NEXT n END_IF FOR n = 1 TO nlu IF FILE_EOF(1) = 1 THEN EXIT_FOR FILE_READLN 1, a$ IF mg > 0 THEN a$ = STRING$(mg, " ") + a$ PRINT_LOCATE 2, y: PRINT a$ y = y + hc% NEXT n FILE_CLOSE 1 IF mb > 0 FOR n = 1 TO mb PRINT_LOCATE 2, y: PRINT "" y = y + hc% NEXT n END_IF IF nump > 0 y = 2+(nl-1)*hc%: PRINT_LOCATE lp/2-20, y: PRINT "- "+STR$(p)+" -" END_IF EXECUTE_WAIT iv$ + fm$ + " /swap_bw /convert=" + fm$: ' meilleur contraste ? phot: IF sens(p) = 1 GOSUB Vflip END_IF RETURN
Vflip: ' rotation de l'image de 180° FILE_SAVE p, fm$ EXECUTE_WAIT iv$ + fm$ + " /vflip /hflip /convert=" + fm$: ' symétrie V puis H FILE_LOAD p, fm$ RETURN
Edite: IF f$ = "" OR FILE_EXISTS(f$) = 0 THEN RETURN EXECUTE_WAIT "Notepad.exe " + f$ RETURN
Edr: IF FILE_EXISTS(f1$) = 0 THEN RETURN EXECUTE_WAIT "Notepad.exe " + f1$ GOSUB Refresh RETURN
Imprime: IF f$ = "" THEN RETURN ' Images pages x = INSTR(fm$, ".") FOR p = 1 TO 8 fi$(p) = LEFT$(fm$, x-2) + STR$(p) + ".bmp" FILE_SAVE p, fi$(p) NEXT p ' Assemblage horizontal EXECUTE_WAIT iv$+"/panorama=(1,"+fi$(1)+","+fi$(8)+","+fi$(7)+","+fi$(6)+") /convert="+fh1$ EXECUTE_WAIT iv$+"/panorama=(1,"+fi$(2)+","+fi$(3)+","+fi$(4)+","+fi$(5)+") /convert="+fh2$ ' Assemblage vertical EXECUTE_WAIT iv$+"/panorama=(2,"+fh1$+","+fh2$+") /convert="+fp$: ' (image 1100x778) ' Découpage de la partie centrale (pour tenir compte des marges imprimante) EXECUTE_WAIT iv$ + fp$ + " /crop=(12,12,1073,756) /convert="+fp$ FILE_OPEN_WRITE 1, fpr$ FILE_WRITELN 1, "<#orientation=Paysage#>" FILE_WRITELN 1, "<#image="+fp$+",0,0,289,204#>": ' zone imprimable FILE_CLOSE 1 x = MESSAGE_CONFIRMATION_YES_NO("Prêt pour impression ?") IF x = 1 EXECUTE_WAIT ip$+" /file=" + fpr$ END_IF FILE_DELETE fh1$: FILE_DELETE fh2$ RETURN
Tailcar: ' Largeur/Hauteur des caractères, en pixels PICTURE 300: TOP 300, -150: WIDTH 300, 900: HEIGHT 300, 100: COLOR 300, 1, 1, 1 PRINT_TARGET_IS 300: FONT_NAME 300, pol$: FONT_SIZE 300, sz IF gras = 1 THEN FONT_BOLD 300 IF ital = 1 THEN FONT_ITALIC 300 FONT_COLOR 300,0,0,0: PRINT "12345678901234567890" FOR x = 0 TO 799 IF COLOR_PIXEL_RED(300,x,0) = 1 THEN EXIT_FOR NEXT x FOR y = 0 TO 100 IF COLOR_PIXEL_RED(300,0,y) = 1 THEN EXIT_FOR NEXT y PRINT_TARGET_IS 1: DELETE 300 lc% = x/20: hc% = y RETURN
Dimima: EXECUTE_WAIT iv$ + f1$ + " /info=" + ff$ FILE_OPEN_READ 5, ff$ WHILE FILE_EOF(5) = 0 FILE_READLN 5, a$ IF LEFT$(a$, 16) = "Image dimensions" a$ = MID$(a$, 20, 100) i% = INSTR(a$, " "): w = VAL(LEFT$(a$, i%-1)) a$ = MID$(a$, i%+3, 100): i% = INSTR(a$, " ") h = VAL(LEFT$(a$, i%-1)) END_IF END_WHILE FILE_CLOSE 5: FILE_DELETE ff$ RETURN
Composite: xt = mg*lc%: yt = mh*hc% FOR u% = LEN(f$) TO 1 STEP -1 IF MID$(f$, u%, 1) = "\" THEN EXIT_FOR NEXT u% fr$ = "Z:\composite.bmp" EXECUTE_WAIT "Cmd.exe /c DIR " + LEFT$(f$, u%) + "*.jpg /B >" + fd$ FILE_OPEN_READ 1, fd$ FOR p = 1 TO 8 IF FILE_EOF(1) = 1 THEN EXIT_FOR w0 = lp-INT((mg+md)*lc%): ' largeur réelle de l'image FILE_READLN 1, a$: f1$ = LEFT$(f$, u%) + a$: ' image d'origine GOSUB Dimima: ' -> w, h h0 = INT(w0*h/w) IF w > h EXECUTE_WAIT iv$+f1$+" /resize=(0,"+STR$(w0)+") /aspectratio /rotate_l /convert="+fb$ ELSE EXECUTE_WAIT iv$+f1$+" /resize=("+STR$(w0)+",0) /aspectratio /convert="+fb$ END_IF PICTURE 300: TOP 300, -500: HEIGHT 300, hp-1: WIDTH 300, lp-1 FILE_SAVE 300, fr$: DELETE 300: ' image de fond (32 bpp) EXECUTE_WAIT iv$ + fr$ + " /bpp=24 /convert=" + fr$: ' -> 24 bpp fc$ = fb$: GOSUB BmpInfos: IF bpp% <> 24 THEN message str$(bpp%): stop tf2 = tf%: ll2 = ll%: w0 = w%: h0 = h% fc$ = fr$: GOSUB BmpInfos: IF bpp% <> 24 THEN message str$(bpp%): stop tf3 = tf%: ll3 = ll% FILEBIN_OPEN_READ 2, fb$: FILEBIN_OPEN_WRITE 3, fr$ FOR j% = 0 TO h0-1 FILEBIN_POSITION 2, tf2-(j%+1)*ll2: FILEBIN_BLOCK_READ 2, 3*w0, v%(0) FILEBIN_POSITION 3, tf3-(yt+j%+1)*ll3+xt*3: FILEBIN_BLOCK_WRITE 3, 3*w0, v%(0) NEXT j% FILEBIN_CLOSE 2: FILEBIN_CLOSE 3 FILE_LOAD p, fr$ IF nump > 0 PRINT_TARGET_IS p y = 2+(nl-1)*hc%: PRINT_LOCATE lp/2-20, y: PRINT "- "+STR$(p)+" -" END_IF NEXT p FILE_DELETE fb$: FILE_DELETE fr$ FILE_CLOSE 1: FILE_DELETE fd$ RETURN
BmpInfos: ' Lecture des données du fichier bmp fb$ ' -> tf: taille fichier, w%,h%: dimensions ' bpp%: bits par pixel, ll%: taille ligne image FILE_OPEN_READ 5, fc$: FILE_READBUF 5, a$, 54: FILE_CLOSE 5: ' en-tête bmp tf% = ASC(MID$(a$,3,1))+256*ASC(MID$(a$,4,1)): ' taille totale du fichier tf% = tf% + 256*256*ASC(MID$(a$,5,1))+256*256*256*ASC(MID$(a$,6,1)) lh% = ASC(MID$(a$,11,1))+256*ASC(MID$(a$,12,1)): ' taille du header lh% = lh% + 256*256*ASC(MID$(a$,13,1))+256*256*256*ASC(MID$(a$,14,1)) w% = ASC(MID$(a$,19,1))+256*ASC(MID$(a$,20,1)): ' largeur image, en pixels w% = w% + 256*256*ASC(MID$(a$,21,1))+256*256*256*ASC(MID$(a$,22,1)) h% = ASC(MID$(a$,23,1))+256*ASC(MID$(a$,24,1)): ' hauteur image, en pixels h% = h% + 256*256*ASC(MID$(a$,25,1))+256*256*256*ASC(MID$(a$,26,1)) bpp% = ASC(MID$(a$,29,1))+256*ASC(MID$(a$,30,1)): ' bits par pixel image ll% = (tf%-lh%)/h%: ' longueur d'une ligne image, en octets RETURN
Aide: a$ = "Impression sous forme d'un livret de 8 pages résultant d'une feuille A4 imprimée"+chr$(10) a$ = a$ + "sur une seule face:"+chr$(10) a$ = a$ + "- d'un texte quelconque"+chr$(10) a$ = a$ + "- d'un annuaire téléphonique (source de la forme Nom;Adresse;Téléphone)"+chr$(10) a$ = a$ + "- d'une série de 8 photos maximum (une photo par page)."+chr$(10)+chr$(10) a$ = a$ + "Le choix du fichier source se fait par clic dans la zone 'Fichier'."+chr$(10) a$ = a$ + "Une fois définis la police de caractères, sa taille, ses enrichissements"+chr$(10) a$ = a$ + "éventuels (gras et/ou souligné), les marges gauche, droite, haut et bas,"+chr$(10) a$ = a$ + "la numérotation éventuelle des pages, un clic sur le bouton EXEC déclenche"+chr$(10) a$ = a$ + "le formatage du fichier source (mise à la largeur voulue) et le découpage en"+chr$(10) a$ = a$ + "pages, puis l'affichage sur l'aperçu de la feuille telle qu'elle sera imprimée."+chr$(10) a$ = a$ + "On peut alors modifier les paramètres de départ à sa convenance, puis recliquer"+chr$(10) a$ = a$ + "sur le bouton EXEC pour voir l'effet des modifications."+chr$(10)+chr$(10) a$ = a$ + "Dans le cas de photos, on choisit (clic dans la zone Fichier) une image quelconque"+chr$(10) a$ = a$ + "dans un répertoire, les 8 images choisies seront les 8 premières images de ce"+chr$(10) a$ = a$ + "répertoire. Les paramètres marges s'appliquent, les images étant entourées d'une"+chr$(10) a$ = a$ + "bordure blanche correspondant aux marges choisies."+chr$(10)+chr$(10) a$ = a$ + "Nota: les marges s'expriment en nombre de caractères suivant la police choisie et"+chr$(10) a$ = a$ + "sa taille (gauche et droite), ou de lignes (haut et bas)."+chr$(10)+chr$(10) a$ = a$ + "Impression: clic le bouton 'Imprimer' (demande de confirmation)."+chr$(10)+chr$(10) a$ = a$ + "Mise en livret (pliage):"+chr$(10) a$ = a$ + "- Replier en deux la feuille imprimée dans le sens de la longueur, texte à l'extérieur."+chr$(10) a$ = a$ + "- Déplier, puis replier en deux dans le sens de la largeur, texte à l'extérieur."+chr$(10) a$ = a$ + "- Plier les deux moitiés obtenues dans le sens de la largeur, texte à l'intérieur."+chr$(10) a$ = a$ + "Bien marquer les plis, puis pratiquer au cutter une incision dans le pli du milieu,"+chr$(10) a$ = a$ + "sens de la longueur, limitée à la moitié de la feuille (entre les pages 3/4 et 7/8)."+chr$(10) a$ = a$ + "Puis replier le tout suivant les plis, de façon à avoir les pages qui se suivent."+chr$(10) a$ = a$ + "(on peut mettre une bande de colle - stick - entre les bords des pages 1 et 2, et 5 et 6,"+chr$(10) a$ = a$ + "pour les solidariser)."+chr$(10) MESSAGE a$ RETURN
Dernière édition par JL35 le Lun 11 Avr 2011 - 18:17, édité 4 fois | |
|