Jusqu’où un PDF fourni a le droit de se déplier
Fixer la taille qu’un flux d’un PDF envoyé peut atteindre une fois décompressé, afin qu’un fichier conçu pour engloutir la machine soit refusé.
Le résultat dans un vrai PDF
Un contrat reçu, complété sans déplacer un octet
Un contrat de maintenance reçu d’un tiers. Sur sa dernière page s’ajoutent un emplacement de signature, une date et une ligne de texte ; après elle, une annexe ; sur l’emplacement de signature, un espace vide où signer. Chaque octet du contrat reste à sa place.
Résumé
Quand vous joignez un PDF — un papier à en-tête sur lequel imprimer, ou une page à placer —, ce fichier est compressé, comme l’est un dossier zippé. Un fichier compressé peut être conçu de telle sorte qu’un tout petit paquet se déplie en quelque chose d’énorme, et un programme qui le déplie sans regarder remplit la machine et s’arrête. Relevez le plafond, jusqu’à un gibioctet, si vous envoyez sciemment de très grandes pages ; abaissez-le si vous acceptez des fichiers de gens que vous ne connaissez pas.
Techniquement
Écrit au premier niveau d’une requête, sous
"supplied_pdfs"
supplied_pdfs règle la lecture des PDF fournis avec la requête : les modèles sur lesquels les pages sont apposées, les pages que les éléments placent, et la source sur laquelle s’ouvre le document. expansion_limit est le plafond de décompression d’un flux d’un tel fichier. Le contrôle a lieu avant que la mémoire ne soit réservée, et non après : un fichier contenant un flux qui en demande davantage est refusé d’emblée, si bien qu’un petit fichier conçu pour se décompresser en plusieurs gigaoctets n’en a jamais l’occasion. En son absence, le plafond est celui que la bibliothèque applique à la lecture d’un fichier. add_to désigne l’un de ces fichiers comme le document auquel les pages rendues sont ajoutées, dans une section écrite après son dernier octet.
Schéma de la requête
-
supplied_pdfs— objet, facultatif. -
supplied_pdfs.expansion_limit— entier, facultatif, un nombre d’octets, au plus 1 073 741 824. La taille maximale à laquelle un flux d’un PDF fourni peut se décompresser. En son absence, c’est le plafond propre à la bibliothèque qui s’applique, soit 268 435 456. Une requête qui demande plus que ce maximum est refusée en 400, et aucun PDF n’est lu. -
supplied_pdfs.add_to— objet, facultatif. Le PDF fourni auquel les pages rendues sont ajoutées, au lieu d’être renvoyées comme un document à part. La réponse est ce fichier, chacun de ses octets à sa place, suivi d’une section qui contient ce qui a été ajouté : une signature qu’il contenait déjà couvre toujours ce qu’elle couvrait, et un logiciel de lecture qui montre les versions antérieures du fichier montre toujours celle qui a été reçue. -
supplied_pdfs.add_to.pdf— chaîne, obligatoire. Le nom de la partie qui contient le PDF. -
supplied_pdfs.add_to.over— tableau d’entiers comptés à partir de 1, facultatif, vide par défaut. Pour les premières pages rendues, dans l’ordre, la page du PDF fourni sur laquelle chacune est posée, depuis le coin inférieur gauche de sa feuille. Chaque page rendue au-delà est ajoutée après la dernière page du PDF fourni, dans l’ordre où le rendu les a produites. -
Quand un
signature_fieldaccompagneadd_to, il suit sa page rendue sur la feuille que celle-ci recouvre. Chaquesignature_fieldest écrit dans une section qui lui est propre, ajoutée après celle qui contient les pages. Le champ ne contient aucune signature : le service ne signe pas. La signature est apposée plus tard, par qui détient le PDF renvoyé, dans une section ajoutée après celles-ci. -
Quand un
signature_fieldaccompagneadd_to, il doit désigner une seule page danspages, sauf si le rendu ne crée qu’une page. Un champ qui se retrouve sur plusieurs pages rendues, ou qui porte le même nom qu’un autre, est refusé en 400, et la réponse en donne la raison. -
Une requête qui contient
add_toreçoit une erreur 400 dans les cas suivants : elle demande aussibookmarks,metadata,archive,protection,structure, des calques, des liens ou des champs de formulaire autres qu’unsignature_field; unsignature_fielda le même nom qu’un champ que le formulaire du PDF fourni contient déjà, verrouille d’autres champs parlocksou réagit à un événement ; un nom ne correspond à aucune partie fournie ; une page à recouvrir se situe au-delà de la dernière page du PDF fourni ; le PDF fourni est protégé, ou sa table des références croisées ne peut pas être suivie ;overnomme plus de pages que le rendu n’en a créé. Compléter un PDF fourni demande une clé de licence : un serveur d’évaluation répond 402.
Portée : chaque PDF que la requête fournit, qu’on l’appose ou qu’on le place. Il ne règle rien du document en train d’être écrit, seulement des fichiers en train d’être lus.
Une requête entière qui crée un PDF
{
"supplied_pdfs": { "expansion_limit": 33554432 },
"standard_fonts": [{ "name": "sans", "face": "helvetica" }],
"items": [
{
"type": "pdf_page",
"pdf": "letterhead",
"page": 1,
"rect": { "llx": 0, "lly": 0, "urx": 595.276, "ury": 841.89 }
},
{
"type": "text",
"rect": { "llx": 72, "lly": 700, "urx": 523, "ury": 740 },
"content": ["Written over the sheet that was supplied"],
"font": "sans",
"font_size": 12
}
]
}
La feuille, et ce qu’on pose dessous
La taille des pages Une taille propre à certaines pages L’unité dans laquelle une page est mesurée Où se place la feuille d’une page dans le dessin Les zones que la page déclare Les formes posées sur ce qu’une page dessine Dans quel sens une page s’affiche Comment une page arrive, et combien de temps elle reste Un PDF que vous envoyez, pris comme pages du document Le modèle sous les pages Un filigrane posé sur une suite de pages Zones nommées à remplir sur une page
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