La première page, montrée pendant que le reste arrive
Demandez que le fichier soit écrit première page d'abord, pour que celui qui l'ouvre depuis un lien voie la page 1 presque tout de suite.
Résumé
Un PDF s'écrit à l'envers : ce qui dit où commence chaque page se trouve tout à la fin du fichier. Le logiciel de lecture attend donc le fichier entier avant de pouvoir montrer quoi que ce soit, et sur un catalogue de quatre cents pages ouvert depuis un lien, cette attente dure plusieurs secondes. Le même document peut s'écrire dans un autre ordre, sa première page et une table disant où commencent les autres posées en tête, de sorte que la page 1 s'affiche pendant que le reste arrive encore. Le fichier est un peu plus gros et un peu plus long à écrire, et il contient exactement le même document.
Techniquement
Écrit au premier niveau d'une requête, sous
"first_page_first"
first_page_first écrit le fichier linéarisé : un dictionnaire d'indices en tête, les objets de la première page et les ressources avec lesquelles elle se trace rassemblés derrière lui, et les tables qui disent où commencent chaque autre page et chaque catégorie d'objet. Un logiciel de lecture qui sait s'en servir va chercher la tête par une requête de plage et affiche la page 1 ; celui qui ne sait pas lit le fichier de la façon ordinaire et n'y perd rien. Deux façons d'écrire un fichier ne se combinent pas avec elle, et le moteur refuse chacune plutôt que d'écrire un fichier qui ne s'ouvrirait pas : compression.object_streams, parce qu'un fichier écrit première page d'abord énonce la position en octets de chaque objet et qu'un objet rassemblé dans un flux n'en a pas qui lui soit propre, et protection, parce que ce qui verrouille chaque objet se dérive du numéro qu'il porte et qu'écrire la première page d'abord les renumérote.
Schéma de la requête
-
first_page_first— objet, facultatif, absent par défaut. -
first_page_first.enabled— booléen, facultatif,truepar défaut. Une requête qui nomme le bloc sans rien en dire est écrite première page d'abord, ce pour quoi elle a nommé le bloc. Mis àfalse, le fichier sort dans l'ordre ordinaire. -
Refusés à côté de lui :
protection, etcompressiondéclarantobject_streamsà vrai. Les deux refus viennent du moteur, qui dit laquelle des deux le fichier ne peut pas porter.
Une requête entière qui crée un PDF
{
"first_page_first": { "enabled": true },
"standard_fonts": [{ "name": "sans", "face": "helvetica" }],
"items": [
{
"type": "text",
"rect": { "llx": 60, "lly": 740, "urx": 535, "ury": 762 },
"content": ["Page one, while the rest is still arriving"],
"font": "sans",
"font_size": 14
}
]
}
Ce qui est dessiné, et comment cela sort
Tout ce qu'on peut dessiner sur une page Le poids du fichier et le temps de calcul Les calques que le logiciel de lecture montre ou cache Un nom qui vaut pour plusieurs calques à la fois Un dessin fait une fois, montré par un bouton Les jeux de calques que le logiciel propose Les calques dont le logiciel ne montre qu'un à la fois
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