Convertir des PDF aux formats PDF/A

Aspose.PDF pour C++ vous permet de convertir un fichier PDF en un fichier PDF conforme à PDF/A. Avant de le faire, le fichier doit être validé. Ce sujet explique comment.

Convertissez le fichier à l’aide de la méthode Convert de la classe Document. Avant de convertir le PDF en un fichier conforme à PDF/A, validez le PDF en utilisant la méthode Validate. Le résultat de la validation est stocké dans un fichier XML et ce résultat est ensuite passé à la méthode Convert. Vous pouvez également spécifier l’action pour les éléments qui ne peuvent pas être convertis en utilisant l’énumération ConvertErrorAction.

Convertir un fichier PDF en PDF/A-1b

Le snippet de code suivant montre comment convertir des fichiers PDF en PDF conformes à PDF/A-1b.

void ConverttoPDFA_1b()
{
    std::clog << __func__ << ": Start" << std::endl;
    // Chaîne pour le nom du chemin
    String _dataDir("C:\\Samples\\Conversion\\");

    // Chaîne pour le nom du fichier d'entrée
    String infilename("sample.pdf");
    // Chaîne pour le nom du fichier journal
    String logfilename("log.xml");
    // Chaîne pour le nom du fichier de sortie
    String outfilename("PDFToPDFA_out.pdf");

    // Ouvrir le document
    auto document = new Document(_dataDir + infilename);

    // Convertir en document conforme à PDF/A
    // Pendant le processus de conversion, la validation est également effectuée
    document->Convert(_dataDir + logfilename, PdfFormat::PDF_A_1B, ConvertErrorAction::Delete);

    // Enregistrer le document de sortie
    document->Save(_dataDir + outfilename);
    std::clog << __func__ << ": Finish" << std::endl;
}

Pour effectuer uniquement la validation, utilisez la ligne de code suivante :

void ConverttoPDFA_1b_Validation()
{
    std::clog << __func__ << ": Start" << std::endl;
    // Chaîne pour le nom du chemin
    String _dataDir("C:\\Samples\\Conversion\\");

    // Chaîne pour le nom du fichier d'entrée
    String infilename("sample.pdf");
    // Chaîne pour le nom du fichier de log
    String logfilename("log.xml");

    // Ouvrir le document
    auto document = new Document(_dataDir + infilename);

    // Convertir en document conforme PDF/A
    // Pendant le processus de conversion, la validation est également effectuée
    document->Validate(_dataDir + logfilename, PdfFormat::PDF_A_1B);
    std::clog << __func__ << ": Finish" << std::endl;
}

Convertir un fichier PDF en PDF/A-3b

Aspose.PDF pour C++ prend également en charge la fonctionnalité de conversion d’un fichier PDF au format PDF/A-3b.

void ConverttoPDFA_3b()
{
    std::clog << __func__ << ": Start" << std::endl;
    // Chaîne pour le nom du chemin
    String _dataDir("C:\\Samples\\Conversion\\");

    // Chaîne pour le nom du fichier d'entrée
    String infilename("sample.pdf");
    // Chaîne pour le nom du fichier de log
    String logfilename("log.xml");
    // Chaîne pour le nom du fichier de sortie
    String outfilename("PDFToPDFA3b_out.pdf");

    // Ouvrir le document
    auto document = new Document(_dataDir + infilename);

    // Convertir en document conforme PDF/A
    // Pendant le processus de conversion, la validation est également effectuée
    document->Convert(_dataDir + logfilename, PdfFormat::PDF_A_3B, ConvertErrorAction::Delete);

    // Enregistrer le document de sortie
    document->Save(_dataDir + outfilename);
    std::clog << __func__ << ": Finish" << std::endl;
}

Convertir un fichier PDF en PDF/A-2u

Aspose.PDF pour C++ prend également en charge la fonctionnalité de conversion d’un fichier PDF au format PDF/A-2u.

void ConverttoPDFA_2u()
{
    std::clog << __func__ << ": Start" << std::endl;
    // Chaîne pour le nom du chemin
    String _dataDir("C:\\Samples\\Conversion\\");

    // Chaîne pour le nom du fichier d'entrée
    String infilename("sample.pdf");
    // Chaîne pour le nom du fichier journal
    String logfilename("log.xml");
    // Chaîne pour le nom du fichier de sortie
    String outfilename("PDFToPDFA3b_out.pdf");

    // Ouvrir le document
    auto document = new Document(_dataDir + infilename);

    // Convertir en document conforme PDF/A
    // Pendant le processus de conversion, la validation est également effectuée
    document->Convert(_dataDir + logfilename, PdfFormat::PDF_A_2U, ConvertErrorAction::Delete);

    // Enregistrer le document de sortie
    document->Save(_dataDir + outfilename);
    std::clog << __func__ << ": Finish" << std::endl;
}

Convertir un fichier PDF en PDF/A-3u

Aspose.PDF pour C++ prend également en charge la fonctionnalité de conversion d’un fichier PDF au format PDF/A-3u.

void ConverttoPDFA_3u()
{
    std::clog << __func__ << ": Début" << std::endl;
    // Chaîne pour le nom du chemin
    String _dataDir("C:\\Samples\\Conversion\\");

    // Chaîne pour le nom du fichier d'entrée
    String infilename("sample.pdf");
    // Chaîne pour le nom du fichier journal
    String logfilename("log.xml");
    // Chaîne pour le nom du fichier de sortie
    String outfilename("PDFToPDFA3b_out.pdf");

    // Ouvrir le document
    auto document = new Document(_dataDir + infilename);

    // Convertir en document conforme PDF/A
    // Lors du processus de conversion, la validation est également effectuée
    document->Convert(_dataDir + logfilename, PdfFormat::PDF_A_2U, ConvertErrorAction::Delete);

    // Enregistrer le document de sortie
    document->Save(_dataDir + outfilename);
    std::clog << __func__ << ": Fin" << std::endl;
}

Ajouter une pièce jointe au fichier PDF/A

Dans le cas où vous auriez besoin de joindre des fichiers au format de conformité PDF/A, nous recommandons d’utiliser la valeur PDF_A_3A de l’énumération Aspose.PDF.PdfFormat.

PDF/A_3a est le format qui offre la possibilité de joindre n’importe quel format de fichier en tant que pièce jointe à un fichier conforme PDF/A.

void ConverttoPDFA_AddAttachment()
{
    std::clog << __func__ << ": Début" << std::endl;
    // Chaîne pour le nom du chemin
    String _dataDir("C:\\Samples\\Conversion\\");

    // Chaîne pour le nom du fichier d'entrée
    String infilename("sample.pdf");
    // Chaîne pour le nom du fichier de log
    String logfilename("log.xml");
    // Chaîne pour le nom du fichier de sortie
    String outfilename("PDFToPDFA3b_out.pdf");

    // Ouvrir le document
    auto document = new Document(_dataDir + infilename);

    // Configurer un nouveau fichier à ajouter en tant que pièce jointe
    auto fileSpecification = MakeObject<FileSpecification>(_dataDir + String("aspose-logo.jpg"), String("Fichier image de grande taille"));
    // Ajouter la pièce jointe à la collection de pièces jointes du document
    document->get_EmbeddedFiles()->Add(fileSpecification);

    // Convertir en document conforme à PDF/A
    // Pendant le processus de conversion, la validation est également effectuée
    document->Convert(_dataDir + logfilename, PdfFormat::PDF_A_3A, ConvertErrorAction::Delete);

    // Enregistrer le document de sortie
    document->Save(_dataDir + outfilename);
    std::clog << __func__ << ": Fin" << std::endl;
}

Remplacer les polices manquantes par des polices alternatives

Conformément aux normes PDFA, les polices doivent être intégrées dans le document PDFA. Cependant, si les polices ne sont pas intégrées dans le document source ou n’existent pas sur la machine, alors le PDFA échoue à la validation. Dans ce cas, nous avons besoin de remplacer les polices manquantes par des polices alternatives de la machine. Nous pouvons substituer les polices manquantes en utilisant la méthode SimpleFontSubstitution comme suit lors de la conversion de PDF en PDFA.