Des polices dont les lettres coûtent un octet
Fabriquer une police à codes d’un octet, ajustée au texte que vous dessinerez : une page plus légère, et une espace entre les mots qui a son propre code.
Le résultat dans un vrai PDF
Une page dont les lettres coûtent un octet chacune
Les trois mêmes lignes écrites deux fois — de la façon ordinaire, puis avec chaque lettre tenue sur un seul octet — et la page dit ce qu’a donné chacune des deux. La façon courte permet en plus de régler l’espace entre les mots d’une ligne, ce que la façon ordinaire ne permet pas.
Ouvrir le PDF Voir l’exemple complet
Également dans les exemples : Des prix barrés, une ombre derrière le titre
Résumé
Dans un PDF, chaque lettre dessinée sur une page s’écrit sous forme de nombre, et normalement ce nombre prend deux octets. Si vous dites d’avance quelles lettres votre document emploiera — et un document en emploie bien moins qu’une police n’en contient — chacune peut recevoir à la place un petit numéro qui tient sur un octet. Le second gain est moins visible : le réglage qui écarte les mots pour justifier un paragraphe agit sur le code de l’espace, et ce code n’existe que sous cette forme.
Techniquement
Écrit au premier niveau d’une requête, sous
"simple_fonts"
simple_fonts construit, à partir d’une police déjà déclarée, une police simple /Subtype /TrueType à un octet que les éléments atteignent par des codes plutôt que par un index de glyphe. fitted_to est le texte auquel l’encodage /Differences est ajusté : chaque caractère de ce texte que la police sait dessiner reçoit un code, l’espace gardant 32 et le reste prenant le plus petit code libre à partir de 33, dans l’ordre où on les rencontre. Un caractère que ce texte omet est un caractère que la police ne sait pas dessiner, donc la chaîne doit contenir toutes les lettres, tous les accents et tous les signes que le document montrera sous ce nom. La source doit être une police avec un fichier derrière elle — une police que la requête contient, une police du client, une police du magasin de polices — et jamais l’une des quatorze polices standard, qui voyagent hors du document et n’ont donc rien à recoder. Deux gains suivent : une lettre coûte un octet de flux de page au lieu de deux, et l’espacement des mots a un code sur lequel agir — sous des codes à deux octets, le réglage qui élargit le blanc n’a aucun effet.
Schéma de la requête
-
simple_fonts— tableau, facultatif, vide par défaut. -
simple_fonts[].name— chaîne, obligatoire. Le nom sous lequel les éléments dessinent avec cette police. -
simple_fonts[].from— chaîne, obligatoire. Le nom de la police dont elle est faite : une police que la requête contient dansfontsou une police du magasin de polices. Jamais l’une desstandard_fonts: ces quatorze polices voyagent hors du fichier, il n’y a donc pas de fichier auquel donner des codes à un octet. -
simple_fonts[].fitted_to— chaîne, facultative. Le texte auquel les codes sont ajustés. Chaque caractère de ce texte que la police sait dessiner prend un code, l’espace gardant 32 et les autres prenant le plus petit code libre à partir de 33 ; un caractère qu’il omet ne pourra pas être dessiné sous ce nom. Jamais donné aveccode_pageouslots. -
simple_fonts[].code_page— chaîne, facultative. Une table de codes d’un octet que les logiciels de lecture connaissent déjà, désignée par sa norme ; un caractère qui n’y a pas de code ne pourra pas être dessiné sous ce nom. Si elle est absente, ainsi quefitted_to, chaque code est libre sauf l’espace en 32. Trente valeurs :win_ansi, la page de codes Windows par laquelle on atteint les douze polices de texte des quatorze polices standard ;standard, celle sur laquelle un programme PostScript se rabat ;pdf_doc, celle dans laquelle s’écrivent les chaînes hors du texte d’une page ; les parties de la norme ISO 8859,iso8859_1,iso8859_2,iso8859_3,iso8859_4,iso8859_5,iso8859_6,iso8859_7,iso8859_8,iso8859_9,iso8859_10,iso8859_11,iso8859_13,iso8859_14,iso8859_15etiso8859_16; les pages de codes Windowswindows874,windows1250,windows1251,windows1253,windows1254,windows1255,windows1256,windows1257etwindows1258;mac_roman; etibm037etibm500, deux pages EBCDIC dont l’espace est en 64, si bien que l’espacement des mots n’a aucun code sur lequel agir. -
simple_fonts[].slots— tableau, facultatif, vide par défaut. Des caractères posés à des codes de votre choix, par-dessus la page de codes ou sur des codes libres, chacun un objet decode, un entier de 1 à 255 autre que 32, etcharacter, une chaîne d’un seul caractère. Chacun est une entrée que le document écrit ; le code 0, le code 32 et un code nommé deux fois sont refusés.
Portée : le nom déclaré, et lui seul. La police dont il est fait reste accessible sous son propre nom, inchangée. Un document peut contenir les deux, et un élément prend celle qu’il nomme.
Une requête entière qui crée un PDF
Un nom ci-dessous tient lieu de fichier de police : mettez le fichier encodé à sa place, ou envoyez le fichier lui-même à côté de la description, comme une pièce fournie dans le même appel. Une page contient une vraie police déjà encodée, et sa requête part telle quelle.
{
"fonts": [{ "name": "body", "data": "PASTE_THE_FONT_FILE_BASE64_HERE" }],
"simple_fonts": [
{
"name": "coded",
"from": "body",
"fitted_to": "One byte a letter, and the file says which."
},
{ "name": "latin", "from": "body", "code_page": "win_ansi" }
],
"items": [
{
"type": "text",
"rect": { "llx": 72, "lly": 700, "urx": 523, "ury": 740 },
"content": ["One byte a letter"],
"font": "coded",
"font_size": 18
},
{
"type": "text",
"rect": { "llx": 72, "lly": 650, "urx": 523, "ury": 690 },
"content": ["One byte a letter"],
"font": "latin",
"font_size": 18
}
]
}
Les polices
Contenir sa police dans le document Les anciens programmes de police Type 1 Les quatorze polices que possède tout logiciel de lecture Les finesses typographiques d’une police Une police dont vous dessinez les lettres Une police de secours pour les signes les plus rares Polices aux signes en couleur Des polices que le document nomme sans les contenir Une police que ses auteurs interdisent d’inclure Polices incorporées en entier
Où aller ensuite
Toutes les clés JSON d’une requête, en une page Les quarante et un autres réglages d’une requête