|
| Zone répétée et aperçu de pages PDF |
| Débuté par Julien V, 04 déc. 2018 15:59 - 3 réponses |
| |
| | | |
|
| |
Membre enregistré 134 messages |
|
| Posté le 04 décembre 2018 - 15:59 |
Bonjour,
Je rencontre actuellement des difficultés pour alimenter une zone répétée contenant un champ image qui doit faire apparaitre une vignette pour chaque page d'un document PDF.
Soit :
- une variable chemin contenant le chemin vers le fichier PDF - une zone répétée ZR_pages contenant : - un champ IMG_apercu - les attributs ATT_apercu (lié à la valeur de IMG_apercu) et ATT_apercu_page (lié à la valeur NuméroPage de IMG_apercu).
Ci-dessous le code d'alimentation de la zone répétée :
SELON fExtraitChemin( chemin, fExtension ) CAS ~= ".pdf" : jMax = PDFNombreDePages( chemin ) POUR j = 1 À jMax
k = ZoneRépétéeAjouteLigne( ZR_pages ) ZR_pages[ k ].ATT_apercu = chemin ZR_pages[ k ].ATT_apercu_page = j FIN
FIN
La zone répétée s'alimente bien et plutôt rapidement.

Par contre, la navigation au scroll est un vrai calvaire sur les fichiers volumineux.
J'ai voulu partir sur une piste de copie d'image cachée avec un champ IMG_apercu_PDF hors écran avec le code suivant :
IMG_apercu_PDF = chemin
jMax = PDFNombreDePages( chemin ) POUR j = 1 À jMax IMG_apercu_PDF..NuméroPage = j buffer = dSauveImagePNG( IMG_apercu_PDF, enMémoire ) ZR_pages[ k ].ATT_apercu = buffer FIN Là c'est l'inverse, la navigation est OK par contre la génération des images est super lente. Je me retrouve aussi avec des bords noirs là où ça devrait être transparent.
J'ai essayé avec dcopie, mais le rendu est très mauvais avec problème de proportions et d'opacité...
Est-ce qu'il y aurait un moyen de positionner la bonne page sur une image hors écran (IMG_apercu_PDF) et faire une copie simple du champ vers une image de zone répétée en respectant les proportions et l'opacité ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 134 messages |
|
| Posté le 05 décembre 2018 - 10:22 |
Pour le moment la solution cracra que j'ai trouvée est de mettre une image temporaire lors du scroll avec le code suivant :
Evénement( lproc_maj_pages_scroll, "ZR_pages", WM_VSCROLL )
Procedure lproc_maj_pages_scroll( _message <utile>, _wParam, _lParam <utile> )
i, iMax est un entier
SELON _wParam CAS 8 : iMax = ZoneRépétéeOccurrence( ZR_pages ) POUR i = 1 À iMax SI fExtraitChemin( ZR_pages[ i ].ATT_chemin, fExtension ) ~= ".pdf" ALORS ZR_pages[ i ].ATT_apercu = ZR_pages[ i ].ATT_chemin FIN FIN AUTRE CAS : iMax = ZoneRépétéeOccurrence( ZR_pages ) POUR i = 1 À iMax SI fExtraitChemin( ZR_pages[ i ].ATT_chemin, fExtension ) ~= ".pdf" ALORS ZR_pages[ i ].ATT_apercu = IMG_apercu_TMP FIN FIN FIN Il y a quand même un temps de latence lors du réaffichage des vignettes.
Et bon, il doit forcément y avoir une solution pour afficher la bonne vignette et avoir un scroll normalMessage modifié, 05 décembre 2018 - 10:26 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 134 messages |
|
| Posté le 05 décembre 2018 - 16:53 |
Désolé de spammer sur ce problème, je pense que j'y suis presque...
Si je fais un mix champ image caché et variable image comme suit
Image est une Image
IMG_apercu_PDF = _document.fichiers[ i ].chemin
jMax = PDFNombreDePages( _document.fichiers[ i ].chemin )
POUR j = 1 À jMax
k = ZoneRépétéeAjouteLigne( ZR_pages )
IMG_apercu_PDF..NuméroPage = j VariableRAZ( Image ) dDébutDessin( Image, dEffacer + dAvecOpacité ) Image.Largeur = IMG_apercu_PDF..Largeur Image.Hauteur = IMG_apercu_PDF..Hauteur dCopie( IMG_apercu_PDF, Image, 0, 0, IMG_apercu_PDF..Largeur, IMG_apercu_PDF..Hauteur, 0, 0, Image.Largeur, Image.Hauteur ) ZR_pages[ k ].ATT_apercu = Image
FIN J'ai une génération rapide des vignettes, un scroll normal
MAIS avec uniquement la première page du PDF sur toutes les vignettes alors que je positionne bien IMG_apercu_PDF..NuméroPage = j avant de faire la copie... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 134 messages |
|
| Posté le 06 décembre 2018 - 11:38 |
Bonjour,
Pour ceux que ça intéresse, ci-dessous une solution qui fonctionne plutôt pas mal :
Procedure lproc_initialiser()
i, iMax, j est un entier chemin est une chaîne buffer est un Buffer
chemin = "C:\test.pdf"
buffer = fChargeBuffer( chemin )
ZoneRépétéeSupprimeTout( ZR_pages ) ZR_pages..AffichageActif = Faux
iMax = PDFNombreDePages( chemin ) POUR i = 1 À iMax j = ZoneRépétéeAjouteLigne( ZR_pages )
ZR_pages[ j ].ATT_apercu = _iproc_apercu( i ) FIN
ZR_pages..AffichageActif = Vrai
PROCEDURE INTERNE _iproc_apercu( _i est un entier ) c est un Champ c <- ChampCrée( DonneGUID(), typImage, 0, 0, 100, 150, Faux ) c..ImageMode = imgHC c = buffer c..NuméroPage = _i img est une Image VariableRAZ( img ) dDébutDessin( img, dEffacer + dAvecOpacité ) img.Largeur = c..Largeur img.Hauteur = c..Hauteur dCopie( c, img, 0, 0, c..Largeur, c..Hauteur, 0, 0, img.Largeur, img.Hauteur )
ChampSupprime( c )
RENVOYER img FIN |
| |
| |
| | | |
|
| | | | |
| | |
|