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

Free Pascal Discussion :

Problème lors de la création d'un document PDF avec Cairo [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 458
    Points
    15 458
    Billets dans le blog
    9
    Par défaut Problème lors de la création d'un document PDF avec Cairo
    Bonjour ! J'essaie de créer un document PDF avec Cairo (Free Pascal 3.0.0, Windows 10). J'arrive à écrire un mot dans le document. Si je remplace le mot par le résultat de la fonction FormatDateTime(), le fichier PDF est créé mais le texte n'apparaît pas. Je n'y comprends rien.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    program test;
     
    {$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
     
    uses
      SysUtils, Cairo;
     
    const
      IMAGE_WIDTH = 595;
      IMAGE_HEIGHT = 842;
    { http://www.a4papersize.org/a4-paper-size-in-pixels.php }
     
    var 
      cr: pcairo_t;
      surface: pcairo_surface_t;
      s: string;
     
    begin
      surface := cairo_pdf_surface_create(
        pchar(ChangeFileExt(ParamStr(0), '.pdf')), 
        IMAGE_WIDTH,
        IMAGE_HEIGHT
      );
     
      cr := cairo_create(surface);
      cairo_surface_destroy(surface);
     
      cairo_select_font_face(cr, 'Palatino Linotype', CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
      cairo_set_font_size(cr, 12);
     
      s := 'bonjour';
      //s := FormatDateTime('dddd dd mmmm', Date());
     
      cairo_move_to(cr, 10, 30);
      cairo_show_text(cr, pchar(s));
     
      cairo_stroke(cr);  
      cairo_destroy(cr);
     
      WriteLn(s);
      ReadLn;
    end.
    Auriez-vous une idée de ce qui se passe ?

    Je joins les DLL nécessaires pour exécuter le programme.
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  2. #2
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 114
    Points
    114
    Par défaut
    Bonsoir Roland

    N'étant pas sous windows, je ne peux malheureusement pas répondre à ce problème mais pour info :
    Sous ubuntu (fpc 2.6.2), cela fonctionne dans les deux cas en essayant tel quel ce programme (sans les DLL que j'avais oublié):

    Sans FormatDateTime : le pdf est créé avec 'bonjour' affiché.
    Avec FormatDateTime (désactivation des // à la ligne 32) : le pdf est créé avec ''Sunday 07 February' affiché à la place.

    En espérant que quelqu'un sous windows trouve la solution ...

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 458
    Points
    15 458
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par bataff Voir le message
    Bonsoir Roland

    N'étant pas sous windows, je ne peux malheureusement pas répondre à ce problème mais pour info :
    Sous ubuntu (fpc 2.6.2), cela fonctionne dans les deux cas en essayant tel quel ce programme (sans les DLL que j'avais oublié):

    Sans FormatDateTime : le pdf est créé avec 'bonjour' affiché.
    Avec FormatDateTime (désactivation des // à la ligne 32) : le pdf est créé avec ''Sunday 07 February' affiché à la place.

    En espérant que quelqu'un sous windows trouve la solution ...
    Merci pour le retour d'expérience.

    Ta réponse m'a mis sur une piste. J'ai noté que chez toi la date s'affiche en anglais. Ce seraient peut-être les caractères accentués de la date en français qui poseraient problème ?

    J'ai essayé la modification suivante, qui semble résoudre le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s := AnsiToUTF8(FormatDateTime('dddd dd mmmm', Date()));
    P.-S. Tu n'as pas besoin des DLL : les DLL c'est pour Windows. Si le programme fonctionne c'est que tu as les fichiers nécessaires sur ta machine. Sous Linux je crois que ce sont des fichiers *.so.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #4
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par Roland Chastain
    P.-S. Tu n'as pas besoin des DLL : les DLL c'est pour Windows. Si le programme fonctionne c'est que tu as les fichiers nécessaires sur ta machine. Sous Linux je crois que ce sont des fichiers *.so.
    Pas faux (je devais me croire avec Wine ...)

    En espérant que cette modification résolve complètement ce problème (bizarre quand même que l'unité refuse complètement dés qu'il y a un caractère non anglo-saxon ...). Et comme il n'y a pas que dans les dates où il peut y avoir des caractères accentués, cela signifie qu'il faudrait employer la fonction AnsiToUTF8 pour n'importe quoi à écrire dans le pdf en général.

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 458
    Points
    15 458
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par bataff Voir le message
    En espérant que cette modification résolve complètement ce problème (bizarre quand même que l'unité refuse complètement dés qu'il y a un caractère non anglo-saxon ...).
    J'ai l'impression que l'unité Cairo contrôle la validité des chaînes et "disjoncte" dès que la chaîne n'est pas valide (c'est-à-dire n'est pas encodée en UTF8).

    Citation Envoyé par bataff Voir le message
    Et comme il n'y a pas que dans les dates où il peut y avoir des caractères accentués, cela signifie qu'il faudrait employer la fonction AnsiToUTF8 pour n'importe quoi à écrire dans le pdf en général.
    Les caractères accentués en eux-mêmes ne sont pas le problème, mais c'est leur encodage qui est le problème. D'après les essais que j'ai encore faits, non il n'est pas nécessaire d'employer systématiquement la fonction AnsiToUTF8. En principe même on ne devrait pas avoir à l'employer. Je pense que c'est la fonction FormatDateTime qui aurait besoin d'une révision.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 458
    Points
    15 458
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par bataff Voir le message
    Et comme il n'y a pas que dans les dates où il peut y avoir des caractères accentués, cela signifie qu'il faudrait employer la fonction AnsiToUTF8 pour n'importe quoi à écrire dans le pdf en général.
    J'ai trouvé un moyen de savoir si une chaîne a besoin ou pas d'être traitée par la fonction AnsiToUTF8.

    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
    program stringcodepage1;
     
    {$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
     
    uses
      SysUtils;
     
    var 
      s: string;
     
    begin
      s := FormatDateTime('dddd dd mmmm', Date());
      WriteLn(StringCodePage(s)); // 1252
      s := AnsiToUTF8(FormatDateTime('dddd dd mmmm', Date()));
      WriteLn(StringCodePage(s)); // 65001
      ReadLn;
    end.
    J'ai trouvé aussi une autre façon de faire la conversion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var 
      s: rawbytestring;
     
    begin
      s := FormatDateTime('dddd dd mmmm', Date());
      SetCodePage(s, CP_UTF8, TRUE);
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

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

Discussions similaires

  1. [XL-2010] Problème lors de la création de tableau croisé dynamique avec vba
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/07/2012, 17h10
  2. Réponses: 11
    Dernier message: 05/08/2009, 12h30
  3. Réponses: 3
    Dernier message: 26/02/2006, 23h53
  4. Réponses: 2
    Dernier message: 21/11/2005, 09h29
  5. Clé étrangère problème lors de la création de la table.
    Par snoopy69 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 18/08/2005, 08h15

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