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

Qt Discussion :

[Impression en PDF] Mauvaise prise en compte du CSS


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Par défaut [Impression en PDF] Mauvaise prise en compte du CSS
    Bonjour,

    Je souhaite pouvoir générer automatiquement des fichiers au format PDF dans une application.
    D'après mes renseignements, le plus simple est de créer un contenu HTML que l'on assigne à un QTextDocument que l'on affiche à l'aide d'un QPrinter qui est configuré pour générer un document PDF.

    Cette solution me convient parfaitement car mes données sont dans des fichiers XML et que je peux ainsi utiliser XSLT pour générer le code HTML.

    Mon problème est que l'impression en PDF ne prends pas en compte la totalité du code CSS, rendant mon affichage incohérent.

    J'aimerais donc savoir si cela vient d'une mauvaise utilisation de Qt de ma part ou si cette méthode de génération de PDF est limitée dans le nombre de propriété CSS reconnues.

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    QXmlQuery requeteXml(QXmlQuery::XSLT20);
     
    	QString cheminFichierXml = "donnees/2009/167.xml";
    	QString cheminFichierXsl = "donnees/demandesToPdf.xsl";
     
    	if (!QFile::exists(cheminFichierXml))
    	{
    		throw new FileNotExistsException(cheminFichierXml);
    	}
     
    	if (!requeteXml.setFocus(QUrl(cheminFichierXml)))
    	{
    		throw new FileCantBeReadException(cheminFichierXml);
    	}
     
    	if (!QFile::exists(cheminFichierXsl))
    	{
    		throw new FileNotExistsException(cheminFichierXsl);
    	}
     
    	requeteXml.setQuery(QUrl(cheminFichierXsl));
    	if (!requeteXml.isValid())
    	{
    		throw new FileCantBeReadException(cheminFichierXsl);
    	}
     
    	QString html;
    	requeteXml.evaluateTo(&html);
     
    	QTextDocument doc;
    	doc.setHtml(html);
    	doc.print(&printer);
    Je vous épargne la partie XML/XSLT ainsi que XHTML/CSS car le résultat contenu dans la variable "html" rends bien un affichage correcte que ce soit dans un navigateur classique ou dans un QWebView.

    Merci d'avance pour votre aide.

    [ EDIT ]
    Bonjour,
    Dans mon cas le problème venait de deux choses différentes.
    Premièrement, pensez à vérifier l'attribut "media" de la balise de déclaration de votre CSS.
    Deuxièmement, il semble être préférable de passer par un QWebView que par un QTextDocument pour obtenir un résultat correct. Effectivement le QTextDocument ne prends pas correctement en compte le CSS. Pour preuve, peut importe la valeur de l'attribut "media" le résultat est le même.

    Ci-dessous un récapitulatif du code nécessaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    QString html; // Contient le code HTML de votre page
    QPrinter printer(QPrinter::PrinterResolution);
    	printer.setOutputFileName("mon_fichier.pdf");
    	printer.setOutputFormat(QPrinter::PdfFormat);
     
    QWebView webView;
    	webView.setHtml(html);
    	webView.print(&printer);

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Bonjour,

    Je n'ai pas la réponse à ton problème mais quelques pistes :
    - Si tu ouvres le fichier HTML avec ton navigateur et que tu l'imprimes en PDF, tu obtiens le résultat souhaité, contrairement à avec Qt ?
    - Dans ce cas le problème vient bien du code Qt. As-tu essayé en imprimant avec un object QWebView à la place de QTextDocument ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Par défaut
    Bonjour,

    Concernant le premier point, comme dit à la fin du message le code HTML généré par la transformation XSLT s'affiche sans erreurs dans un navigateur ainsi que dans un QWebView.
    Pour le second, c'était une idée intéressante. Malheureusement elle n'a pas eu de résutat.
    Bien au contraire, l'affichage du QWebView dans l'application Qt est niquel, l'impression dans le fichier PDF ne prends pas le CSS en compte. Pas du tout cette fois, comme si il n'y en avait pas.

    Merci quand même.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    J'ai bien compris que ta page s'affiche bien dans le navigateur ou dans QWebView, ce que je cherchais à savoir c'est si l'impression en PDF donne le bon résultat. Donc faudrait essayer depuis le navigateur aussi, imprimer ton PDF depuis ton navigateur donc, pour s'assurer que ce ne soit pas l'impression PDF qui soit foireuse. Une fois cette possibilité écartée, alors on peut mettre les mains dans le cambouis...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Par défaut
    Bonjour,

    Je n'avais pas compris ce que tu voulais dire, j'avais encore jamais essayer l'impression dans un fichier.
    Ce qui m'a permis de me rendre compte que j'avais conservé l'habitude de définir mon CSS pour l'affichage à l'aide de l'attribut "media".
    Que je l'enlève ou que je le définisse à "print" j'ai le même résultat en exportant, depuis Chrome, au format PDF :
    Un fichier avec mes tableaux mais sans les couleurs.

    Je viens de modifier mon fichier XSLT.
    Le résultat est toujours mauvais lorsque j'utilise un QTextDocument mais est correct avec QWebView.

    Merci pour ton conseil, je met à jours mon premier message pour les futurs visites puis je passe le sujet en résolu.

    Bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mails, impression PDF et prise de notes
    Par iPimousse dans le forum Android
    Réponses: 1
    Dernier message: 28/10/2011, 16h49
  2. Taille d'impression non prise en compte par QuickReport
    Par chiraze dans le forum QuickReport
    Réponses: 11
    Dernier message: 28/01/2010, 11h09
  3. [CSS - IE] CSS d'impression non prise en compte par IEX
    Par messier79 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 08/11/2009, 02h20
  4. [CKEditor] Mauvaise prise en compte de la mise en forme du texte
    Par Félix62 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 10/07/2007, 11h51
  5. [MFC]: prise en compte du clavier
    Par ben_iap dans le forum MFC
    Réponses: 8
    Dernier message: 20/01/2004, 15h00

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