Interface de sortie d'Aspose.TeX | C++
Veuillez vous référer à Aspose.TeX for C++ Référence API pour les définitions formelles de l’implémentation des E/S.
Le concept du répertoire de sortie
Étant donné que les primitives d’E/S du langage TeX ne peuvent traiter que les noms de fichiers, Aspose.TeX définit un répertoire comme un mappage entre les noms et les lots de données. Les masses de données sont censées être des fichiers, des flux, des tableaux ou quoi que ce soit d’autre. L’API nous permet de spécifier séparément les répertoires de travail d’entrée et de sortie. Il fournit l’interface générale IOutputWorkingDirectory pour la sortie, que l’utilisateur peut implémenter à ses propres fins. Il fournit également ses propres implémentations, qui seront discutées ci-dessous. L’interface étend IInputWorkingDirectory, puisque le moteur peut d’abord créer et écrire un fichier, puis le relire. La propre méthode de l’interface GetOutputFile() renvoie le flux dans lequel écrire, par opposition au flux à lire renvoyé par GetFile().
Écriture de la sortie du fichier sur le système de fichiers du disque
Comme nous l’avons mentionné ci-dessus, la valeur la plus courante pour OutputDirectory serait probablement une instance de la classe OutputFileSystemDirectory.
Voici comment nous le définirions :
1// Create conversion options instance.
2...
3// Specify a file system working directory for the output.
4options->set_OutputWorkingDirectory(System::MakeObject<OutputFileSystemDirectory>(RunExamples::OutputDirectory));
Ce cas d’utilisation est assez simple, il n’est donc plus nécessaire de s’y concentrer.
Écriture de la sortie du fichier dans une archive ZIP
Nous pouvons également créer un fichier (ou un flux) et laisser le moteur TeX l’utiliser comme archive ZIP pour stocker les fichiers de sortie. C’est ici:
1 // Open the stream for the ZIP archive that will serve as the output working directory.
2 System::SharedPtr<System::IO::Stream> outZipStream = System::IO::File::Open(System::IO::Path::Combine(RunExamples::OutputDirectory, u"zip-pdf-out.zip"), System::IO::FileMode::Create);
3
4 // Create conversion options instance.
5 ...
6 // Specify a ZIP archive working directory for the output.
7 options->set_OutputWorkingDirectory(System::MakeObject<OutputZipDirectory>(outZipStream));
Tout d’abord, nous créons un flux de sortie pour le fichier ZIP. Ensuite, après avoir créé les options de conversion, nous définissons l’option OutputWorkingDirectory comme étant une instance de la classe OutputZipDirectory.
Le concept du terminal de sortie
Il y a une autre partie importante de la sortie : la sortie du terminal. Quant à celui-ci, Aspose.TeX pour C++ définit l’interface générale IOutputTerminal ayant une seule propriété qui renvoie une instance d’implémentation de TextWriter. Les implémentations fournies sont discutées ci-dessous.
Écriture de la sortie du terminal sur la console
Pour ce faire, nous devons définir l’option TerminalOut pour qu’elle soit une instance de la classe OutputConsoleTerminal.
1// Create conversion options instance.
2...
3// Specify the console as the output terminal.
4options->set_TerminalOut(System::MakeObject<OutputConsoleTerminal>()); // Default. No need to specify.
Encore une fois, il s’agit de la valeur par défaut de l’option, il n’est donc pas vraiment nécessaire de la spécifier. Pour cette raison, cette section sert uniquement à des fins de démonstration.
Écrire la sortie du terminal dans un fichier
Contrairement au terminal d’entrée, Aspose.TeX pour C++ fournit une implémentation de IOutputTerminal, qui nous permet d’écrire la sortie du terminal dans un fichier dans un répertoire de sortie.
1// Create conversion options instance.
2...
3// Specify that the terminal output must be written to a file in the output working directory.
4// The file name is <job_name>.trm.
5options->set_TerminalOut(System::MakeObject<OutputFileTerminal>(options->get_OutputWorkingDirectory()));
Ici, nous demandons au moteur TeX d’écrire la sortie du terminal dans le fichier portant le nom <job_name>.trm, qui sera stocké dans le même répertoire de sortie que celui que nous avons spécifié pour le reste de la sortie. Mais ce n’est pas nécessaire. Nous pourrions aussi bien transmettre toute autre instance de toute implémentation de IOutputTerminal au constructeur.