Aller au contenu
getnextpdf.com

Pro édition

Projection

La Projection analyse un flux de contenu PDF pour en faire une liste de tokens plate, puis émet un nouveau flux de contenu à partir de ces tokens. L’émission requiert une intention déclarée explicite. Ce module n’est pas un éditeur PDF polyvalent.

Note. Ici, « Projection » désigne la projection de tokens de flux de contenu. Ce n’est pas une projection de coordonnées ni géospatiale. Pour les fonctionnalités géospatiales, voir le module Geo.

Cette fonctionnalité est livrée dans NextPDF Pro (nextpdf/pro) et s’active avec une enveloppe de licence de palier Pro. Un déploiement sans ce droit ne charge pas les classes de la fonctionnalité. Comparer les éditions et obtenir une licence.

Il n’y a pas d’indicateur de licence distinct par fonctionnalité. Un argument ProjectionIntent requis restreint l’émission au niveau de l’API, et non un commutateur de licence.

Fenêtre de terminal
composer require nextpdf/pro:^3

Le code se trouve sous l’espace de noms NextPDF\Pro\Projection.

ContentProjectionWriter fournit trois opérations statiques :

  • tokenize() analyse un flux de contenu pour en faire une liste de tokens plate et ordonnée. C’est une opération en lecture seule qui ne nécessite aucune intention.
  • emit() écrit un nouveau flux de contenu à partir d’une liste de tokens (éventuellement modifiée). Elle requiert un ProjectionIntent.
  • roundTrip() tokenise puis réémet sans modification, à des fins de validation.

La sortie est conceptuellement un nouveau flux de contenu, et non une copie éditée de l’original. L’émetteur normalise les espaces et les commentaires mais conserve la séquence d’opérateurs et les valeurs d’opérandes à l’identique. L’énumération d’intention comporte exactement deux cas — assainissement (caviardage) et incorporation stéganographique — et n’a délibérément aucun cas générique, afin que l’analyse statique puisse détecter un usage non voulu.

La Projection refuse d’être un éditeur PDF polyvalent. L’émission reconstruit un flux de contenu neuf à partir d’une liste de tokens plate, si bien que l’original n’est jamais muté sur place. Ce modèle à sens unique est ce qui rend le caviardage digne de confiance : les tokens supprimés sont absents de la sortie, pas recouverts d’une peinture. emit() exige donc un ProjectionIntent explicite, et l’énumération n’offre que l’assainissement et l’incorporation stéganographique — aucun cas générique. L’analyse statique peut alors signaler toute émission dépourvue d’un but déclaré et connu. Ce choix de conception échange la commodité d’édition contre la garantie qu’une intention destructive est toujours visible au site d’appel.

Contexte de conception : Le caviardage n’est pas un rectangle noir.

  • tokenize($contentStream) renvoie une liste de tokens couvrant les chaînes, les noms, les nombres, les tableaux, les dictionnaires, les booléens, null et les opérateurs.
  • emit($tokens, $intent) requiert une intention explicite ; le système de types l’impose au site d’appel.
  • La sortie de roundTrip() n’est pas identique octet-à-octet à l’entrée, mais la séquence d’opérateurs et les valeurs d’opérandes correspondent.
  • L’émetteur formate les nombres pour conserver la distinction entre entier et flottant et ré-échappe les chaînes littérales.
  • Les deux intentions déclarées sont l’assainissement (une opération de caviardage destructive et irréversible) et l’incorporation stéganographique.

Ce qui suit reflète l’API publique documentée. Le dépôt ne livre pas d’exemple exécutable pour ce module.

use NextPDF\Pro\Projection\ContentProjectionWriter;
$tokens = ContentProjectionWriter::tokenize($contentStream);
use NextPDF\Pro\Projection\ContentProjectionWriter;
use NextPDF\Pro\Projection\ProjectionIntent;
$tokens = ContentProjectionWriter::tokenize($contentStream);
// Validate first: a clean round-trip must hold before any modification.
$check = ContentProjectionWriter::roundTrip($contentStream);
// Apply your modification to $tokens, then emit with a declared intent.
$output = ContentProjectionWriter::emit($tokens, ProjectionIntent::Sanitization);
  • Exécute roundTrip() et confirme qu’il tient avant de faire confiance à une séquence de modification-et-émission. Traite un aller-retour défaillant comme une condition d’arrêt.
  • L’intention d’assainissement est irréversible. Le contenu supprimé ne peut pas être récupéré depuis la sortie.
  • L’émetteur normalise les espaces et abandonne les commentaires, si bien qu’une comparaison au niveau des octets avec l’original diffère même pour un aller-retour non modifié.

La tokenisation et l’émission sont linéaires en longueur de flux de contenu. Le tokeniseur borne les lectures d’échappements octaux et le traitement des chaînes hexadécimales. Il n’existe pas de chiffre de débit publié. Mesure avec des flux de contenu représentatifs.

L’argument d’intention requis empêche le détournement en éditeur polyvalent. L’intention d’assainissement est destructive et irréversible ; vérifie d’abord l’aller-retour et confirme la sortie caviardée avant distribution. Ce module ne journalise aucun contenu.

La tokenisation suit les conventions lexicales et de flux de contenu d’ISO 32000-2 ; la source annote les clauses pertinentes. Le corpus RAG était indisponible au moment de la rédaction, si bien que cette page n’affirme aucun identifiant de clause externe et limite les déclarations de conformité au comportement vérifié par les tests du module.

Enterprise ne change pas le comportement de la Projection. Enterprise ajoute des fonctionnalités de confidentialité et de conformité de palier supérieur documentées séparément ; elles ne sont pas requises pour utiliser l’API de projection.

Il n’existe pas d’équivalent Core. Sans Pro, les appelants doivent construire leur propre tokeniseur de flux de contenu ; le modèle de projection restreint par intention est un ajout réservé à Pro.

Cette page documente uniquement le comportement observable de l’extérieur et la surface d’API publique prise en charge. Les chemins d’espaces de noms internes, les classes auxiliaires, les tables de mécanismes, les noms de fichiers de runbook et les préfixes de ticket sont hors périmètre.