PDF-Writer

Je cherche désespérement des français qui auraient pratiqué cette
librairie avec des caractères accentué :’(

Personne ?

On 9/18/06, iben [email protected] wrote:

Je cherche désespérement des français qui auraient pratiqué cette
librairie avec des caractères accentué :cry:

Tu parle de PDF::Writer pour ruby et pas des autres outils pour Rails ?

Oui, j’ai fait un petit prog qui lit des données en OLE dans Excel et
écrit des rapports en PDF, j’ai pas eu de problème avec les éàç…

Tu peux nous en dire plus ?

Ciao’

Je cherche désespérement des français qui auraient pratiqué cette
librairie avec des caractères accentué :’(

Pas encore avec les accents (mais je vais devoir implémenter ça sous
peu) !

PDF (et donc PDF::Writer) ne supporte pas la norme UTF-8. L’encodage par
défaut de PDF::Writer (WinAnsiEncoding) est proche du Windows code page
1252.

Je vais probablement travailler en UTF-8, et transformer (Ã l’aide
d’iconv)
le résultat en Windows code page 1252 (de façon à garder de l’UTF-8
partout).

Voilà , je ne peux t’en dire plus pour le moment!

a+

Thibaut

cf un extrait de la doc de pdf::writer

Fonts in PDF documents can include encoding information. The PDF
standard
encodings are
‘none’, ‘WinAnsiEncoding’, ‘MacRomanEncoding’, or ‘MacExpertEncoding’.
Symbolic
fonts should be encoded with the ‘none’ encoding. The default encoding
used
in PDF::Writer is
‘WinAnsiEncoding’.

‘WinAnsiEncoding’ encoding is not quite the same as Windows code page
1252
(roughly
equivalent to latin 1). Appendix D of the Adobe PDF Reference version
1.6contains full
information on all encoding mappings (including mappings for the two
included symbolic fonts).

±Le 18/09/2006 15:58 +0200, iben a dit :
| Je cherche désespérement des français qui auraient pratiqué cette
| librairie avec des caractères accentué :’(
|
| Personne ?

Chez moi ça fonctionne tres bien, mais il faut faire attention, le PDF,
ça a son encodage, le symbole Euro n’est pas placé forcément là ou on
le pense, et dans la version actuelle il n’y a pas de support UTF-8.

Maintenant, comme tu n’explique pas ce qui t’arrive avec les accents,
c’est
plutôt difficile de savoir quel problème tu as.

±Le 18/09/2006 16:28 +0100, Thibaut Barrère a dit :
|>
|> Je cherche désespérement des français qui auraient pratiqué cette
|> librairie avec des caractères accentué :cry:
|>
|
| Pas encore avec les accents (mais je vais devoir implémenter ça sous
| peu) !
|
| PDF (et donc PDF::Writer) ne supporte pas la norme UTF-8. L’encodage par
| défaut de PDF::Writer (WinAnsiEncoding) est proche du Windows code page
| 1252.

Ça, ce n’est pas vrai, pdf 1.6 supporte l’unicode, mais pas en utf-8, en
utf-16be (page 131-132 du PDF reference version 5 [1]). Il y a d’autres
ressources pdf qui doivent être écrites en utf-8, mais je doute fortement
que vous tombiez dessus :slight_smile:

Par contre, PDF::Writer ne le supporte pas.

[1] :

Salut,

| PDF (et donc PDF::Writer) ne supporte pas la norme UTF-8.
L’encodage par
| défaut de PDF::Writer (WinAnsiEncoding) est proche du Windows
code page
| 1252.
Ça, ce n’est pas vrai, pdf 1.6 supporte l’unicode, mais pas en
utf-8, en
utf-16be

Oui pas UTF-8 mais UTF-16. En quoi consiste exactement UTF-16be ?
C’est ennuyeux ?

Sinon je n’ai aucune expérience dans le domaine mais je souhaitais
lancer une proposition pour ceux qui travaillent sur le sujet : est-
ce que générer du LaTeX et le parser pour créer un pdf est une bonne
idée ? Existe-t-il des lib latex éventuellement ?

C’est simplement une idée, je n’ai pas testé ni dit que c’était la
voie à suivre ! :slight_smile:

Je sais que LaTeX marche bien, que ça ne doit pas être difficile de
le parser sur la plupart des machines, qu’on ne réinvente pas la roue
et que c’est, peut-être, souple (erb, liquid…), à voir.

à+NP_______________________________________________
Railsfrance mailing list
[email protected]
http://lists.rubyonrails.fr/mailman/listinfo/railsfrance

un bout de mon code :

def pdfwriter
     @guide = Guide.find(params[:id])
      @fichesduguide = @guide.items
      diff= {
        233 => "eacute",
        148 => "copyright"
      }

     _p = PDF::Writer.new(:paper => "A4")
     _p.select_font("Helvetica", {:encoding => "WinAnsiEncoding", 
:differences => diff})

    @fichesduguide.each do |fiche|
   _p.text fiche.nom, :font_size => 72, :justification => :center
   _p.text iso(fiche.descriptif), :font_size => 14, :justification => 
:center

  end
    send_data _p.render, :filename => 'guide', :type => 
"application/pdf"

  end
  def iso(text)
    resultat = Iconv.conv('UTF-8', 'ISO-8859-1', text)  # idem avec 
windows-1252
  end

Mathieu C. wrote:

Tu peux nous en dire plus ?

Désolé de pas avoir développé plus lors de mon premier post !

J’utilise en effet la biblio de Ruby, PDF::Writer pour générer un pdf de
données récupérées dans ma base.

Toute ma base est en UTF-8 et j’ai bien lu que cette librairie ne gérait
pas l’UTF-8.

Donc j’essaie via ICONV de mouliner mes champs en iso avante de les
donner à pdf-writer mais c’est pas mieux.

Ce que je ne comprends pas c’est ce format pdf “WinAnsiEncoding”,
peut-on passer de utf-8 Ã WinAnsiEncoding via ICONV ?

J’ai essaye les ":differences " mais rien :confused:

Merci

Ce que je ne comprends pas c’est ce format pdf “WinAnsiEncoding”,
peut-on passer de utf-8 Ã WinAnsiEncoding via ICONV ?

C’est certainement le cp1252


Eric D.

On 9/19/06, Nicolas P. [email protected] wrote:

Oui pas UTF-8 mais UTF-16. En quoi consiste exactement UTF-16be ?
C’est ennuyeux ?

UTF-16BE = big endian donc â?¬ (euro) = U+20AC est stocké “20 AC” et non
pas “AC 20” pour UTF-16LE.

UTF-8 étant composé d’octets, il n’a pas cet inconvénient. (UTF-32 l’a
évidemment).

Mathieu A. wrote:

Chez moi �a fonctionne tres bien, mais il faut faire attention, le PDF,
�a a son encodage, le symbole Euro n’est pas plac� forc�ment l� ou on
le pense, et dans la version actuelle il n’y a pas de support UTF-8.

Je passe mon utf-8 en cp1252 mais j’obtiens que des caractères très
étranges en lieu et place de mes accents.
Par quel encodage passes-tu ?

±Le 19/09/2006 02:00 +0200, Nicolas P. a dit :
| Sinon je n’ai aucune expérience dans le domaine mais je souhaitais
| lancer une proposition pour ceux qui travaillent sur le sujet : est- ce
| que générer du LaTeX et le parser pour créer un pdf est une bonne
| idée ? Existe-t-il des lib latex éventuellement ?
|
| C’est simplement une idée, je n’ai pas testé ni dit que c’était la
| voie à suivre ! :slight_smile:
|
| Je sais que LaTeX marche bien, que ça ne doit pas être difficile de le
| parser sur la plupart des machines, qu’on ne réinvente pas la roue et
| que c’est, peut-être, souple (erb, liquid…), à voir.

y’a rtex qui est dispo :
http://codefluency.com/code/rtex-rails-plugin,
mais il faut quelquechose comme teTeX pour le faire fonctionner.

Marche tres bien, il peut avoir quelques soucis parfois car il n’apelle
qu’une seule fois pdflatex, et dans le cas ou le document a un index,
une
table des matières ou ce genre de choses qui demande plusieurs
compilations, il posera un tout petit problème (qui se reglera en éditant
un fichier et en répetant une ligne deux ou trois fois).

±Le 19/09/2006 15:40 +0200, Ben B. a dit :
| Mathieu A. wrote:
|>
|> Chez moi �a fonctionne tres bien, mais il faut faire attention, le PDF,
|> �a a son encodage, le symbole Euro n’est pas plac� forc�ment l�
|> ou on le pense, et dans la version actuelle il n’y a pas de support
|> UTF-8.
|>
|
| Je passe mon utf-8 en cp1252 mais j’obtiens que des caractères très
| étranges en lieu et place de mes accents.
| Par quel encodage passes-tu ?

Je fait directement de l’iso8859-15, ça marche tres bien.

±Le 19/09/2006 23:39 +0200, Mathieu A. a dit :
| ±Le 19/09/2006 15:40 +0200, Ben B. a dit :
|| Mathieu A. wrote:
||>
||> Chez moi �a fonctionne tres bien, mais il faut faire attention, le
||> PDF, �a a son encodage, le symbole Euro n’est pas plac� forc�ment
||> l� ou on le pense, et dans la version actuelle il n’y a pas de support
||> UTF-8.
||>
||
|| Je passe mon utf-8 en cp1252 mais j’obtiens que des caractères très
|| étranges en lieu et place de mes accents.
|| Par quel encodage passes-tu ?
|
| Je fait directement de l’iso8859-15, ça marche tres bien.

Ah, euh, en fait, non :slight_smile:

J’ai ça :

module PDF # :nodoc:
module Writer # :nodoc:
module AddOns
ISO8859_15_ENC = {
:encoding => ‘WinAnsiEncoding’,
:differences => {
0 => ‘.notdef’, 1 => ‘.notdef’, 2 => ‘.notdef’,
128 => ‘.notdef’, 130 => ‘.notdef’, 131 => ‘.notdef’,
132 => ‘.notdef’, 133 => ‘.notdef’, 134 => ‘.notdef’,
135 => ‘.notdef’, 136 => ‘.notdef’, 137 => ‘.notdef’,
138 => ‘.notdef’, 139 => ‘.notdef’, 140 => ‘.notdef’,
142 => ‘.notdef’, 145 => ‘.notdef’, 146 => ‘.notdef’,
147 => ‘.notdef’, 148 => ‘.notdef’, 149 => ‘.notdef’,
150 => ‘.notdef’, 151 => ‘.notdef’, 152 => ‘.notdef’,
153 => ‘.notdef’, 154 => ‘.notdef’, 155 => ‘.notdef’,
156 => ‘.notdef’, 158 => ‘.notdef’, 159 => ‘.notdef’,
164 => ‘Euro’, 166 => ‘Scaron’, 168 => ‘scaron’,
180 => ‘Zcaron’, 183 => ‘bullet’, 184 => ‘zcaron’,
188 => ‘OE’, 189 => ‘oe’, 190 => ‘Ydieresis’, 191 =>
‘questiondown’,
192 => ‘Agrave’, 193 => ‘Aacute’, 194 => ‘Acircumflex’,
195 => ‘Atilde’, 196 => ‘Adieresis’, 197 => ‘Aring’,
198 => ‘AE’, 199 => ‘Ccedilla’, 200 => ‘Egrave’,
201 => ‘Eacute’, 202 => ‘Ecircumflex’, 203 => ‘Edieresis’,
204 => ‘Igrave’, 205 => ‘Iacute’, 206 => ‘Icircumflex’,
207 => ‘Idieresis’, 209 => ‘Ntilde’, 210 => ‘Ograve’,
211 => ‘Oacute’, 212 => ‘Ocircumflex’, 213 => ‘Otilde’,
214 => ‘Odieresis’, 217 => ‘Ugrave’, 218 => ‘Uacute’,
219 => ‘Ucircumflex’, 220 => ‘Udieresis’, 221 => ‘Yacute’,
224 => ‘agrave’, 225 => ‘aacute’, 226 => ‘acircumflex’,
227 => ‘atilde’, 228 => ‘adieresis’, 229 => ‘aring’,
230 => ‘ae’, 231 => ‘ccedilla’, 232 => ‘egrave’,
233 => ‘eacute’, 234 => ‘ecircumflex’, 235 => ‘edieresis’,
236 => ‘igrave’, 237 => ‘iacute’, 238 => ‘icircumflex’,
239 => ‘idieresis’, 241 => ‘ntilde’, 242 => ‘ograve’,
243 => ‘oacute’, 244 => ‘ocircumflex’, 245 => ‘otilde’,
246 => ‘odieresis’, 249 => ‘ugrave’, 250 => ‘uacute’,
251 => ‘ucircumflex’, 252 => ‘udieresis’, 253 => ‘yacute’,
}
}

    def select_ttf(font, enc = nil, embed = false)
      select_font("#{font}.afm", enc || ISO8859_15_ENC, embed)
    end

    def select_font_l1(font, enc = nil, embed = false)
      select_font(font, enc || ISO8859_15_ENC, embed)
    end
  end
end

end

class PDF::Writer # :nodoc:
include PDF::Writer::AddOns
end

et j’ai utilisé ttf2afm pour générer les fichiers .afm a partir des
fontes ttf.

et je fait du genre :

pdf.select_font_l1(‘Helvetica’)

Mathieu A. wrote:

J’ai ça :

module PDF # :nodoc:
module Writer # :nodoc:
module AddOns
ISO8859_15_ENC = {
:encoding => ‘WinAnsiEncoding’,
:differences => {
(…)
class PDF::Writer # :nodoc:
include PDF::Writer::AddOns
end

Je dois créer le fichier Addons dans le gem de pdf-writer ou dans mon
appli ?
Au passage, comment à tu trouvé les codes des “differences” ?

et j’ai utilisé ttf2afm pour générer les fichiers .afm a partir des
fontes ttf.

Est-ce obligatoire ? (pour info je suis sous OS X)

Pour finir, voici mon code en fonction de ton exemple :

def pdfwriter
@guide = Guide.find(params[:id])
@fichesduguide = @guide.items
diff= {

    192 => 'Agrave', 193 => 'Aacute', 194 => 'Acircumflex',
    195 => 'Atilde', 196 => 'Adieresis', 197 => 'Aring',
    198 => 'AE', 199 => 'Ccedilla', 200 => 'Egrave',
    201 => 'Eacute', 202 => 'Ecircumflex', 203 => 'Edieresis',
    204 => 'Igrave', 205 => 'Iacute', 206 => 'Icircumflex',
    207 => 'Idieresis', 209 => 'Ntilde', 210 => 'Ograve',
    211 => 'Oacute', 212 => 'Ocircumflex', 213 => 'Otilde',
    214 => 'Odieresis', 217 => 'Ugrave', 218 => 'Uacute',
    219 => 'Ucircumflex', 220 => 'Udieresis', 221 => 'Yacute',
    224 => 'agrave', 225 => 'aacute', 226 => 'acircumflex',
    227 => 'atilde', 228 => 'adieresis', 229 => 'aring',
    230 => 'ae', 231 => 'ccedilla', 232 => 'egrave',
    233 => 'eacute', 234 => 'ecircumflex', 235 => 'edieresis',
    236 => 'igrave', 237 => 'iacute', 238 => 'icircumflex',
    239 => 'idieresis', 241 => 'ntilde', 242 => 'ograve',
    243 => 'oacute', 244 => 'ocircumflex', 245 => 'otilde',
    246 => 'odieresis', 249 => 'ugrave', 250 => 'uacute',
    251 => 'ucircumflex', 252 => 'udieresis', 253 => 'yacute',

  }

  _p = PDF::Writer.new(:paper => "A4")
  _p.select_font("Helvetica", {:encoding => "WinAnsiEncoding", 

:differences => diff})
@fichesduguide.each do |fiche|
_p.text fiche.nom, :font_size => 72, :justification => :center
_p.text iso(fiche.descriptif), :font_size => 14, :justification =>
:center

end
send_data _p.render, :filename => ‘filename’, :type =>
“application/pdf”

end

def iso(text)
Iconv.iconv(‘utf-8’, ‘iso-8859-15’, text)
end

… mais j’arrive toujours pas à sortir des accents :’(

Mathieu A. wrote:

| Je dois cr�er le fichier Addons dans le gem de pdf-writer ou dans mon
| appli ?

Ben, dans ton appli, quelquepart qui sera lu au lancement de l’appli.

Ok :slight_smile:

| Au passage, comment � tu trouv� les codes des “differences” ?

Hum, en lisant le code de PDF::Writer, et le PDF Reference.

Effectivement, le PDF Reference liste les codes des caractères…
Pourtant j’avais lu la doc pdf::writer !

|> et j’ai utilis� ttf2afm pour g�n�rer les fichiers .afm a partir des
|> fontes ttf.
|
| Est-ce obligatoire ? (pour info je suis sous OS X)

Uniquement pour utiliser des fontes ttf.

Est-ce nécesssaire de passer par du ttf pour des fontes accentuées ?

| Pour finir, voici mon code en fonction de ton exemple :
| (…)
| … mais j’arrive toujours pas � sortir des accents :’(

�a me semble plut�t bien, �a ne serait pas par hasard le serveur web qui
renvoie un autre charset ?

Bein J’ai paramétrer mon appli Rails pour faire de l’utf-8 ça aurait une
incidence sur le send_data ?

Merci de ton aide

±Le 29/09/2006 10:23 +0200, Ben B. a dit :
| Mathieu A. wrote:
|> | Je dois cr�er le fichier Addons dans le gem de pdf-writer ou dans
|> | mon appli ?
|>
|> Ben, dans ton appli, quelquepart qui sera lu au lancement de l’appli.
|
| Ok :slight_smile:
|
|> | Au passage, comment � tu trouv� les codes des “differences” ?
|>
|> Hum, en lisant le code de PDF::Writer, et le PDF Reference.
|
| Effectivement, le PDF Reference liste les codes des caractères…
| Pourtant j’avais lu la doc pdf::writer !

pas doc, code :slight_smile:

|> |> et j’ai utilis� ttf2afm pour g�n�rer les fichiers .afm a partir
|> |> des fontes ttf.
|> |
|> | Est-ce obligatoire ? (pour info je suis sous OS X)
|>
|> Uniquement pour utiliser des fontes ttf.
|>
| Est-ce nécesssaire de passer par du ttf pour des fontes accentuées ?

Je n’ai jamais dit ça.

|> | Pour finir, voici mon code en fonction de ton exemple :
|> | (…)
|> | … mais j’arrive toujours pas � sortir des accents :’(
|>
|> �a me semble plut�t bien, �a ne serait pas par hasard le serveur
|> web qui renvoie un autre charset ?
|
| Bein J’ai paramétrer mon appli Rails pour faire de l’utf-8 ça aurait
| une incidence sur le send_data ?

Ben, je ne sait pas, je n’ai jamais essayé.

±Le 20/09/2006 10:23 +0200, Ben B. a dit :
| Mathieu A. wrote:
|>
|> J’ai ça :
|>
|> module PDF # :nodoc:
|> module Writer # :nodoc:
|> module AddOns
|> ISO8859_15_ENC = {
|> : encoding => ‘WinAnsiEncoding’,
|> : differences => {
|> (…)
|> class PDF::Writer # :nodoc:
|> include PDF::Writer::AddOns
|> end
|
| Je dois créer le fichier Addons dans le gem de pdf-writer ou dans mon
| appli ?

Ben, dans ton appli, quelquepart qui sera lu au lancement de l’appli.

| Au passage, comment à tu trouvé les codes des “differences” ?

Hum, en lisant le code de PDF::Writer, et le PDF Reference.

|> et j’ai utilisé ttf2afm pour générer les fichiers .afm a partir des
|> fontes ttf.
|
| Est-ce obligatoire ? (pour info je suis sous OS X)

Uniquement pour utiliser des fontes ttf.

| Pour finir, voici mon code en fonction de ton exemple :
| (…)
| … mais j’arrive toujours pas à sortir des accents :’(

ça me semble plutôt bien, ça ne serait pas par hasard le serveur web qui
renvoie un autre charset ?

±Le 30/09/2006 16:13 +0200, Ben B. a dit :
| Bon j’ai découvert un drôle de truc, sur une appli rails toute simple
| sans avoir rien configuré du côté charset, un “é” est entré dans mon
| mysql comme un “é”.
| Un pdf généré par pdf::writer me recopie texto ce caractère étrange
| alors que mon appli sait me le transformer en “é” dans les vues.
| J’ai tenté via phpmyadmin de remplacer le “é” par un “é”. Désormais
| mon appli rails m’affiche un point d’interrogation à la place de
| l’accent mais le pdf::writer me sort un accent.
|
| Je deviens fou, mon appli rails entièrement utf-8 (qui écrit donc les
| “é” comme des “é” dans ma base) est, elle, incapable de générer un
| pdf correct !

ça me paraît normal, en utf-8, le caractère “é” est représenté par
“é”, forcément tu ne vois que des “é” parce que par défaut, webrick
met utf-8 comme charset.
Bien sur, si tu écris “é” dans un pdf, ça va faire “é” et pas “é”.

Mathieu A. wrote:

�a me para�t normal, en utf-8, le caract�re “�” est repr�sent� par
“é”, forc�ment tu ne vois que des “�” parce que par d�faut, webrick
met utf-8 comme charset.
Bien sur, si tu �cris “é” dans un pdf, �a va faire “é” et pas “�”.

Donc mon problème viendrait plus de webrick que de l’encodage de ma base
? Tes applis rails qui génèrent du pdf ne tournent pas sous webrick ?

Merci de ta patience…