new NumericType($value); $resources = new ResourceDictionary(new Entry(new NameType('Font'), new DictionaryType(new Entry(new NameType('F1'), new IndirectReference(new Type1Font(StandardFont::Helvetica)))))); $operators = []; $lines = [ [28, 'Fichiers incorpores et collections'], [13, 'Un contenant PDF, deux pieces jointes, un export JSON associe.'], [18, 'Mesures / mesures.csv'], [12, 'CSV : articles A et B, total 19.75.'], [12, 'CI.Amount = 19.75 ; le prefixe EUR ne change pas la valeur.'], [12, 'RF.F : total.json contient le meme total.'], [18, 'Notes / notes.txt'], [12, 'Le sous-element affiche un prefixe, sans inventer de montant.'], [18, 'Relations natives'], [12, 'Names.EmbeddedFiles trie les cles et reference les Filespec.'], [12, 'EF reference les flux ; CI reference les metadonnees typees.'], [12, 'Collection.D = Mesures ; Schema et Sort decrivent la presentation.'], [18, 'Octets et controles'], [12, 'Params.Size compte les octets originaux, avant compression.'], [12, 'Params.CheckSum est leur MD5 de format, sans preuve de confiance.'], [12, 'Flate compresse ensuite chaque flux incorpore.'], [12, 'Aucun chemin, lien distant ou programme joint n est execute.'], ]; $y = 736; foreach ($lines as [$size, $line]) { array_push($operators, new Op\SetNonstrokingRGBColor($n(0.1), $n(0.2), $n(0.28)), new Op\BeginTextObject(), new Op\SetTextFontAndSize(new NameType('F1'), $n($size)), new Op\MoveTextPosition($n(42), $n($y)), new Op\ShowText(new LiteralString($line)), new Op\EndTextObject()); $y -= $size >= 18 ? 45 : 31; } $page = new PageObject(new Rectangle($n(0), $n(0), $n(612), $n(792)), $resources, new StreamObject(new ContentStreams(...$operators))); $catalog = new DocumentCatalog((new PageTreeNode())->addKid($page), $collection->catalogEntry(), new Entry(new NameType('Names'), new NameDictionary($attachments->nameDictionaryEntry()))); $file = new FileStructure(new FileHeader(), new FileBody($catalog), new IndirectReference($catalog)); $path = $argv[1] ?? __DIR__ . '/output/embedded-files.pdf'; $directory = dirname($path); if (!is_dir($directory) && !mkdir($directory, 0777, true) && !is_dir($directory)) { throw new RuntimeException('Cannot create the example output directory.'); } $file->writeTo($path); echo $path, PHP_EOL;