Ce que hqf-pdf crée

Des documents entiers — factures, bons de livraison, bulletins de paie, contrats — et un petit exemple pour chaque capacité dont ils sont faits, chacun créant un vrai PDF.

Chaque exemple vient avec son code, écrit deux fois : le même document une fois en Rust et une fois en Python. La plupart ont aussi un troisième bouton : le même document en JSON, la forme envoyée au service.

À quoi sert chaque famille Voir les PDF créés par hqf-pdf Voir pourquoi les fichiers sont deux fois plus légers la plupart du temps, souvent bien davantage, et jusqu'à douze fois plus légers

Documents d'entreprise complets

Les documents qu'une entreprise envoie tous les jours, produits par le logiciel qui détient déjà les chiffres. À quoi sert cette famille

Le détail technique

Chacune des familles ci-dessous prend une chose qu'une page peut contenir et la montre à part. Elles sont là pour que le développeur qui utilise cette bibliothèque voie exactement comment chacune se fait.

Pages, texte et polices

La page elle-même, les mots dessus, et la police — contenue dans le fichier pour que la page ait la même allure partout. À quoi sert cette famille

Paragraphes, colonnes et typographie

Vous fournissez le texte ; la bibliothèque trouve où finit chaque ligne, où s'arrête chaque colonne et où se coupe chaque page. À quoi sert cette famille

Les tabulations et leurs taquets

Les mêmes lignes tabulées sous chacune des trois méthodes, puis un sommaire dont les points courent jusqu'à un taquet placé à droite. Une tabulation peut avancer d'un pas depuis l'endroit où l'on se trouve, tomber sur la grille régulière d'une machine à écrire, ou viser un taquet précis, sur lequel le texte qui suit commence, se centre, ou s'aligne par sa virgule.

Voir le code en : Rust Python JSON

Les tableaux

Des tableaux qui ajustent leurs colonnes au contenu, se coupent d'une page à l'autre et retracent leur ligne de titres sur chaque nouvelle page. À quoi sert cette famille

Un tableau qui se pagine tout seul

Un long tableau confié d'un bloc, qui décide lui-même de son découpage en pages : son en-tête en haut de chaque page, sa note en bas de chaque page, ses fonds gris définis une seule fois pour tout le tableau, et une mention que l'on trace soi-même sous chaque page, à l'endroit exact que le tableau indique.

Voir le code en : Rust Python JSON

Une page et un tampon dans un tableau

Une page de contrôle pour un dossier envoyé par quelqu'un d'autre : chaque ligne montre une de ses pages, prise entière dans le fichier où elle est arrivée, à côté d'un cachet tracé une fois et placé dans chaque ligne qui l'a reçu. Les deux sont ajustés à la cellule que le tableau leur laisse, sans réclamer de largeur à leur colonne ni de hauteur à leur ligne.

Voir le code en : Rust Python JSON

Un montant qui dit de quels titres il dépend

Les recettes de trente agences, trimestre par trimestre, sur deux pages. Chaque montant de la page contient les en-têtes sous lesquels il se tient : l'agence à côté de lui, le trimestre au-dessus, et l'année au-dessus des quatre trimestres réunis. Lu à voix haute, un montant est annoncé par sa ville, son trimestre et son année avant la somme elle-même.

Voir le code en : Rust Python JSON

Couleur, encres et impression

La couleur que vous demandez est celle qui part à la presse, et l'imprimerie prend le fichier tel quel. À quoi sert cette famille

Une feuille préparée pour l'imprimeur

Une feuille plus grande que la page finie : la couleur court trois millimètres au-delà de la lame, les traits de coupe se tiennent en dehors dans une encre que chaque plaque contient, chaque couleur est dite dans les quatre encres d'imprimerie, et la page nomme le papier, la limite de l'encre et la coupe. Donnez-lui le profil d'une presse et elle revendique PDF/X-4, et la feuille imprime sur elle-même le profil sur lequel elle repose.

Voir le code en : Rust Python JSON

Les mêmes nombres, dits pour dire quelque chose

Six couleurs et un dégradé de gris peints trois fois avec exactement les mêmes nombres : d'abord laissés à l'appareil, puis dits de deux façons qui précisent contre quel blanc ils sont mesurés, quelle courbe leur est appliquée et jusqu'où vont les couleurs de base. Tout cela tient en une poignée de nombres, sans aucun profil à ranger dans le fichier.

Voir le code en : Rust Python JSON

Dessin, motifs et transparence

Traits, formes, dégradés et transparence tracés comme des instructions dans le fichier, et non comme des pixels — nets à toute taille, et d'un poids presque nul. À quoi sert cette famille

Dégradés en ligne droite, en cercle, et une couleur lue dans une fonction

Cinq panneaux : un bandeau dont la couleur s'éteint, le même fondu posé en diagonale, une lueur prolongée au-delà de son cercle pour que les coins se remplissent, un dégradé qui passe par une troisième couleur, et un damier dont la couleur se calcule à partir de l'endroit où se tient chaque point, plus rouge vers la droite et plus vert vers le haut.

Voir le code en : Rust Python JSON

Un plan qui montre ce qui se lit

Un plan de terrain dont les calques décident tout seuls quand paraître. Un nom large se tient au-dessus de la parcelle tant que le plan est regardé en entier, les cotes fines des murs arrivent une fois qu'il est agrandi deux fois, et la phrase sous le plan est là en deux langues, dont le logiciel de lecture montre celle sur laquelle il est réglé.

Voir le code en : Rust Python JSON

Les images

Des photographies placées à la taille et à l'endroit que vous choisissez, à partir des fichiers d'image que produisent déjà un appareil photo ou un scanner. À quoi sert cette famille

Une image ajustée à un rectangle

Une même image ajustée de huit façons dans un rectangle d'une seule taille : trois façons de la dimensionner, la même posée dans le coin en haut à gauche avec un retrait de 12 points, un quart de tour à gauche, un quart de tour à droite, une rotation de 20 degrés, et un miroir de gauche à droite — chaque panneau traçant l'image à l'endroit et à la taille que la bibliothèque a calculés.

Voir le code en : Rust Python JSON

Codes-barres et codes 2D

Les codes que lisent une caisse, une douchette d'entrepôt, une porte d'embarquement ou un téléphone, imprimés directement sur le document. À quoi sert cette famille

Formulaires, tampons et superpositions

Des cases que la personne qui reçoit le formulaire remplit à l'écran, et votre texte écrit par-dessus un modèle de page : un fichier PDF que quelqu'un d'autre a déjà créé. À quoi sert cette famille

Le filigrane d'une copie d'essai

Ce que vous obtenez avant de payer quoi que ce soit : un filigrane en travers de chaque page, et sous lui les mêmes pages, mises en page exactement comme une copie payante les met en page. C'est aussi le document qui dit ce qu'une clé de licence change, et pourquoi chaque chiffre de ce site est mesuré avec une clé.

Voir le code en : Rust Python JSON

Archivage, accessibilité et métadonnées

Des documents qui s'ouvriront encore dans des dizaines d'années, qu'un lecteur d'écran lit à voix haute, et qu'un système comptable enregistre sans ressaisie. À quoi sert cette famille

Un fichier qui explique ses entrées

La référence d'un service d'archives, le département dont le document vient, la date jusqu'à laquelle il doit être gardé et sa classification, portés dans un fichier qu'une archive accepte encore. Aucune règle d'archivage ne sait ce qu'est une date de conservation, donc chaque entrée porte une description d'elle-même, et c'est cette description qui fait accepter à un contrôleur un fait que vous seul avez inventé.

Voir le code en : Rust Python JSON