IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

état combiné : état + x pdf


Sujet :

WinDev

  1. #1
    Membre expérimenté
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Par défaut état combiné : état + x pdf
    Bonjour

    Je cherche à éditer (aperçu et/ou en pdf) x états différents au sein du même état.
    le premier est un état de type "bon de commande"
    les suivants sont des documents annexes et variables en pdf (a4 portrait) (chacun pouvant faire 1 à n pages).

    pour les pdf associés, les résultats sont hasardeux et non satisfaisant.


    j'ai utilisé des fonctions de la 21 comme pdfextraitpage
    dans mon état annexe (qui doit contenir le pdf), j'ai tenté de jouer sur l'image de fond (maintenant on peut le changer par programmation), de créer une image dans un seul bloc corps, de jouer sur les marges...

    j'obtiens trop de page, des pages blanches, les mêmes pages qui se répètent.

    après pas mal de bricolage
    Je favorise l'option :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    iaperçu(100)
    iEnchaînementAjoute(sNomEtatAImprimer)
    pour nPdf = 1 a nNbPdf 
    iEnchaînementAjoute(ETAT_Annexe_Fond_PDF)
    fin
    iEnchaînementImprime()
    bref je tourne en rond. et j'ai besoin d'un oeil neuf.
    sur le principe, vous feriez comment?

  2. #2
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 518
    Par défaut
    Sur le principe, je trouve que ton approche est bonne. Par contre, sir tes annexes sont des pdf, pourquoi les repasses tu dans un état ?

    As tu essayé pdffusionne ?

  3. #3
    Membre expérimenté
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Par défaut
    merci pour ton retour

    j'ai en effet pensé à cette option. option qui fonctionne très bien.

    Mais je ne passe plus par l'aperçu (et de ses fonctions possibles (zoom, mail, ajout de texte), ou encore si je veux ajouter un filigrane sur l'ensemble).
    Bon pour ce dernier point, je peux le faire avec un assemblage .net


    Pour revenir au problème initial.
    En utilisant ..imagefond

    j'ai le bon nombre de page dans mon aperçu.
    Mais pour chacun des pdf (2 pages chacun) à joindre, j'ai deux fois la même page (la première).

    Et l'aperçu est d'une lenteur extrême (tant lors de la génération, que lors du défilement une fois fait).

  4. #4
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 518
    Par défaut
    C'est parce que par défaut, il ne prend comme image que la première page d'un pdf. Je travaille actuellement sur des imports d'images et j'ai fait le test.

    Je ne sais pas si on peut dynamiquement changer le numéro de la page PDF dans les états. J'ai trouvé ceci dans l'aide : http://doc.pcsoft.fr/fr-FR/?1013218

    ceci plus précisement a attiré mon attention :
    Si le champ Image affiche un fichier PDF, il suffit de sélectionner le fichier PDF à afficher. Les propriétés ..ImageMode, ..NombrePage et ..NuméroPage permettent de sélectionner si nécessaire la page du PDF à afficher dans le champ Image.
    Du coup, dans l'état, tu charges ton PDF à la bonne page dans une image suivant le numéro de page où tu te trouves. Et tu l'affectes à ton fond de page.

    Si ça ne fonctionne pas une solution est de faire un appel en chargeant l'image (page PDF) sur la fenêtre appelant. Et tu appelles autant de fois ton état que de pages dans ton pdf en passant l'image en paramètre.

    A tester...

  5. #5
    Membre expérimenté
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Par défaut
    Bonjour

    je n'y arrive pas. Toujours la même page qui s'affiche bizarre.
    De plus il y a des lenteurs énormes (j'ai remarqué d'ailleurs que certains s'en plaignaient) => impraticable

  6. #6
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 518
    Par défaut
    Est-ce que, depuis la fenêtre appelante, tu peux afficher l'image d'une page du pdf ?

    Une idée qui m'est venue est de charger tes pages dans des images clonées avec comme nom, le numéro de page (IMG_05 par exemple). Ensuite, tu peux faire tes appels en passant l'image en paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    pour i = 1 _A_ MonPdf..NombrePage
    MonPDF..NumeroPage = i
    Champclone(IMG_00,"IMG_"+NumeriqueVersChaine(i,"02d"))
    {"IMG_"+NumeriqueVersChaine(i,"02d"),indchamp} = MonPDF
    ienchaineEtat(MonEtat, {"IMG_"+NumeriqueVersChaine(i,"02d"),indchamp} )
    Code écrit à l'arrache, sans test. A analyser, déboguer et améliorer...

  7. #7
    Membre expérimenté
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Par défaut
    bonjour

    je relance le sujet.
    je m'étais débrouiller avec itextsharp avec quoi on peut faire un peu ce q'on veut. super. en bien plus rapide et plus fiable et moins volumineux que ce que propose pcsoft. Le hic, c'est qu'il manque l'apercu avant impression.

    mais pour un autre truc, il faudrait vraiment que je puisse avoir dans l'apercu avant impression mon état combiné.
    à savoir
    x fichiers pdf (de 1 à x pages)
    mon état windev
    x fichiers pdf (de 1 à x pages)

    la question est la suivante, comment mettre un pdf de x pages dans un etat windev vierge afin de pouvoir utiliser ensuite les ienchainementajoute et ienchainementimprime.
    merci

  8. #8
    Membre chevronné
    Avatar de Narwe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 257
    Par défaut
    Proposition peut-être stupide :

    1. Imprimer l'état Windev dans un PDF (dans le répertoire temporaire)
    2. Fusionner les PDF initiaux et le(s) PDF(s) Windev avec iTextSharp (que je ne connais pas mais qui semble pouvoir le faire, mais s'il ne peut pas le faire, je suppose que d'autres bibliothèques peuvent le faire) dans un fichier PDF (lui aussi dans le répertoire temporaire)
    3. Afficher l'aperçu du PDF en lançant Acrobat Reader (ou autre, les goûts et les couleurs ...) avec LanceAppli(..., exeBloquant)
    4. Ne pas oublier de supprimer les fichiers temporaires car Windows ne le fait pas de lui-même.

    EDIT : Pour la fusion de PDF, il y a la fonction Windev PDFFusionne

  9. #9
    Membre expérimenté
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Par défaut
    Citation Envoyé par Narwe Voir le message
    Proposition peut-être stupide :

    1. Imprimer l'état Windev dans un PDF (dans le répertoire temporaire)
    2. Fusionner les PDF initiaux et le(s) PDF(s) Windev avec iTextSharp (que je ne connais pas mais qui semble pouvoir le faire, mais s'il ne peut pas le faire, je suppose que d'autres bibliothèques peuvent le faire) dans un fichier PDF (lui aussi dans le répertoire temporaire)
    3. Afficher l'aperçu du PDF en lançant Acrobat Reader (ou autre, les goûts et les couleurs ...) avec LanceAppli(..., exeBloquant)
    4. Ne pas oublier de supprimer les fichiers temporaires car Windows ne le fait pas de lui-même.

    EDIT : Pour la fusion de PDF, il y a la fonction Windev PDFFusionne
    cc'est précisément ce que je fais et qui fonctionne très bien via itextsharp.

    Mais pour un besoin précis, je veux passer par l'apercu (pcsoft) et donc réellement utiliser les fonctions pcsoft (filigrane, page, enchainement, fusionne) sans avoir à lancer le viewer pdf de l'utilisateur.

  10. #10
    Membre chevronné
    Avatar de Narwe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 257
    Par défaut
    Désolé, je n'avais pas vraiment pris le temps de lire les messages précédents.

    Pour repartir des premiers message, il n'y ait pas fait mention de la fonction Windev PDFExtraitPage() qui semble permettre d'obtenir l'image de la page voulue (donc extraire chaque page dans une image et afficher les images comme l'indiquait frenchsting et comme vous semblez l'avoir tenté). Est-ce que cette fonction a été essayée ?

  11. #11
    Membre expérimenté
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Par défaut
    Citation Envoyé par Narwe Voir le message
    Désolé, je n'avais pas vraiment pris le temps de lire les messages précédents.

    Pour repartir des premiers message, il n'y ait pas fait mention de la fonction Windev PDFExtraitPage() qui semble permettre d'obtenir l'image de la page voulue (donc extraire chaque page dans une image et afficher les images comme l'indiquait frenchsting et comme vous semblez l'avoir tenté). Est-ce que cette fonction a été essayée ?
    oui.
    je dois rater quelque chose sans doute
    quel genre d'état.
    quel bloc, quelle dimensions?
    que mettre dedans et où ?

  12. #12
    Membre chevronné
    Avatar de Narwe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 257
    Par défaut
    Je viens d'essayer de mettre en pratique ce que j'ai écris et j'obtiens le résultat que j'imagine que vous désirez.
    Pour faire simple, dans un projet test (vide), on créer un écran avec un bouton (qui lance l'impression) avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    iAperçu(iPage)
    iEnchaînementAjoute(E_PDF, "C:\Mes Projets\GrosPDFExterne.pdf", 105, 2)
    iEnchaînementAjoute(ETAT_SansNom1)
    iEnchaînementAjoute(E_PDF, "C:\Mes Projets\GrosPDFExterne.pdf", 7, 10)
    iEnchaînementImprime()
    L'état ETAT_SansNom1 est un état Windev classique (dans mon exemple un état sans source de données avec juste 2 champs texte).

    L'état E_PDF est l'état qui va imprimer les pages des PDF Externes. Les 2 numéros qui suivent sont les numéros de pages désiré (on imaginera passer un tableau de numéros de page).
    L'état E_PDF à une source de données programmé ("les donnés viennent de la programmation" dans l'onglet Données de l'état)
    L'état n'a pas de marge
    L'état ne contient que le bloc Corps d'une taille de 210 / 297 mm et ne contient qu'un champ image de la même taille que nous appelerons IM_PDF.
    Le code d'ouverture de l'état :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PROCEDURE OuvreE_PDF (gf_p_sCheminPdf, gf_p_nNumPage1, gf_p_nNumPage2)
     
    GLOBAL
    	gf_nNumPage		est un entier
     
     
    gf_nNumPage	= 1
    Le code de Lecture des données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SI gf_nNumPage>2 ALORS RENVOYER Faux
     
    IM_PDF = PDFExtraitPage(gf_p_sCheminPdf, {"gf_p_nNumPage"+gf_nNumPage, indVariable})
     
    gf_nNumPage++
    A l'aperçu, j'ai 5 pages et je peux rajouter un filigrane qui apparaît sur ces 5 pages.
    Etant donné qu'on passe par des images, la qualité n'est pas forcément parfaite.

    Par contre je ne sais pas ce qui se passe avec des orientation paysage dans les PDF Externe. Je teste cela.

    EDIT : Si on demande des pages en paysage dans E_PDF, elle sont affichées en portrait (et retaillé car j'ai oublié de préciser que l'image IM_PDF avait pour mode d'affichage Homothétique centré).

  13. #13
    Membre expérimenté
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Par défaut
    j'ai fait un truc vraiment similaire,
    même création d'état, un seul bloc, une image...

    je veux prendre toutes les pages du pdf passé en paramètre

    * dans l'ouverture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PROCEDURE ETAT_ANNEXE(gs_CheminAnnexe est une chaîne)
     
    gnNumpage est un entier = 1
     
    gnNbPage est un entier = PDFNombreDePages(gs_CheminAnnexe)
    * dans la lecture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SI gnNumpage > gnNbPage ALORS RENVOYER Faux
     
    IMG_Pdf = PDFExtraitPage(gs_CheminAnnexe,gnNumpage)
     
    gnNumpage ++

    * sur mon bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    nNbAnnexe = dimension(gtabFichierPdf)	
    POUR nA = 1 A nNbAnnexe		
    	iEnchaînementAjoute(ETAT_ANNEXE,gtabFichierPdf[nA].sNomFichier)		
    FIN
    iEnchaînementAjoute(sNomEtat)
    iEnchaînementImprime()
    * Annexe 1 : 1 page
    * Annexe 2 : 2 pages
    * SnomEtat est etat wde

    j'obtiens cette fois ci (de manière rapide)
    Annexe1
    pageblanche
    Annexe2
    pageblanche
    MonEtatWde

  14. #14
    Membre chevronné
    Avatar de Narwe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 257
    Par défaut
    Citation Envoyé par fffttt Voir le message
    j'obtiens cette fois ci (de manière rapide)
    Annexe1
    pageblanche
    Annexe2
    pageblanche
    MonEtatWde
    Donc cela fonctionne mise à part les pages blanches ? (j'ai un doute sur l'annexe 2, les 2 pages sont bien imprimées ? )

    Pour les pages blanches, je jouerais sur la hauteur de l'image et du bloc corps.
    D'abord pour les test enlever 5 cm et voir si les pages blanches sont toujours là.
    Je pense qu'elles n'apparaîtront plus et donc il faudrait jouer sur la hauteur du corps (et de l'image), peut-être des marges, pour qu'il n'y a pas de pages blanches. Sur Windev, le trait pointillé rouge indiquant la hauteur de la page doit être sous l'état.

    EDIT :
    Durant le chemin du retour du boulot je me suis dit que plutôt que d'affecter IMG_PDF directement PDFExtraitPage, on pourrait passer une variable de type image.
    1.
    On pourrait alors retailler l'image pour supprimer des marges (avec un produit en croix, par contre il faut peut-être que les marges des PDF lus soit fixe, par exemple 5mm tout autour).
    Cela permettrait de rétablir les marges sur notre état E_PDF.
    2.
    Les propriétés Hauteur et Largeur de cette variable permettrait de savoir si on est en Paysage ou Portrait.
    l'état E_PDF n'imprime donc plus rien mais ferait appel à E_PDF_PORTRAIT ou E_PDF_PAYSAGE selon l'orientation de l'image de la page lue.

  15. #15
    Membre expérimenté
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Par défaut
    Merci Narwe pour ton implication.
    Oui, les deux pages sont bien imprimées. Et oui, cela fonctionne hormis les pages blanches qui s'insèrent.


    Je pense bien aussi à une histoire de marge. ou de paramètre à la con sur un des 7 onglets.
    Pour info, les pdf sont de banals pdf (word convertis en pdf).
    Je n'ai pas de pointillé qui s'affiche dans l'éditeur d'état.

  16. #16
    Membre chevronné
    Avatar de Narwe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 257
    Par défaut
    Est-ce que PDFNombreDepAges renvoie la bonne valeur ?
    Peut-être essayé en remplaçant le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gnNbPage est un entier = PDFNombreDePages(gs_CheminAnnexe)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gnNbPage est un entier = PDFNombreDePages(gs_CheminAnnexe)-1
    Biensûr, si cela corrige le problème, c'est un problème.

  17. #17
    Membre expérimenté
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Par défaut
    Citation Envoyé par Narwe Voir le message
    Est-ce que PDFNombreDepAges renvoie la bonne valeur ?
    Peut-être essayé en remplaçant le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gnNbPage est un entier = PDFNombreDePages(gs_CheminAnnexe)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gnNbPage est un entier = PDFNombreDePages(gs_CheminAnnexe)-1
    Biensûr, si cela corrige le problème, c'est un problème.
    oui c'est juste ici.
    C'est bien un pb de bloc, de marge....
    Si je réduis totalement le bloc, l'image.
    je n'ai plus de page blanche qui s'insère. mais forcement je n'ai pas mes images pdf au bon format.

  18. #18
    Membre expérimenté
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Par défaut
    si je mets le bloc à 288mm. cela passe.
    si au dessus, cela m'insère une page blanche après chaque annexe

  19. #19
    Membre chevronné
    Avatar de Narwe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 257
    Par défaut
    Je n'ai pas de problème de page blanche car j'utilise l'imprimante PDFCreator.
    Si j'utilise un imprimante "physique", j'obtiens ce problème de page blanche à l'aperçu.

    Il "suffit" donc réduire suffisamment la taille du bloc corps (et donc de l'image) (je dirais -1cm sur chaque bord) et pour que les pages des PDF garde le bon format, passer par une variable de type image pour la retravailler et y enlever l'équivalent de 1 cm sur chaque bord.

  20. #20
    Membre expérimenté
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Par défaut
    Citation Envoyé par Narwe Voir le message
    Je n'ai pas de problème de page blanche car j'utilise l'imprimante PDFCreator.
    Si j'utilise un imprimante "physique", j'obtiens ce problème de page blanche à l'aperçu.

    Il "suffit" donc réduire suffisamment la taille du bloc corps (et donc de l'image) (je dirais -1cm sur chaque bord) et pour que les pages des PDF garde le bon format, passer par une variable de type image pour la retravailler et y enlever l'équivalent de 1 cm sur chaque bord.
    en effet. cela devrait régler les pb. Le hic c'est que le pdf ne sera pas à la bonne taille car réduit. Ce qui dans mon cas est génant car certains pdf sont des catalogues ou brochures très travaillées sur la globalité de la page.

Discussions similaires

  1. envoi état par mail : conversion pdf aléatoire
    Par stagolee dans le forum VBA Access
    Réponses: 1
    Dernier message: 05/02/2016, 16h36
  2. Afficher un état crystal report en PDF avec PHP
    Par sabrina07 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 11
    Dernier message: 21/10/2013, 17h35
  3. [WD10] Enregistrement d'un état en arabe sous PDF
    Par Fahed_Dev dans le forum WinDev
    Réponses: 0
    Dernier message: 16/10/2009, 10h22
  4. Ouverture d'un état mais en format PDF
    Par karinette21 dans le forum IHM
    Réponses: 1
    Dernier message: 27/02/2009, 06h56
  5. Sauvegarder un état QuickReport en fichier PDF
    Par bilal_ini dans le forum Langage
    Réponses: 5
    Dernier message: 03/07/2008, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo