Comment créer un PDF en utilisant C#

Nous cherchons toujours un moyen de générer des documents PDF et de travailler avec eux dans des projets C# de manière plus précise, exacte et efficace. Avoir des fonctions faciles à utiliser d’une bibliothèque nous permet de nous concentrer davantage sur le travail, et moins sur les détails chronophages de la génération de PDF, que ce soit dans .NET.

Le code suivant fonctionne également avec la bibliothèque Aspose.PDF.Drawing.

Créer (ou générer) un document PDF en utilisant le langage C#

L’API Aspose.PDF for .NET vous permet de créer et de lire des fichiers PDF en utilisant C# et VB.NET. L’API peut être utilisée dans une variété d’applications .NET, y compris WinForms, ASP.NET et plusieurs autres. Dans cet article, nous allons montrer comment utiliser l’API Aspose.PDF for .NET pour générer et lire facilement des fichiers PDF dans des applications .NET.

Comment créer un fichier PDF simple

Pour créer un fichier PDF en utilisant C#, les étapes suivantes peuvent être utilisées.

  1. Créez un objet de la classe Document.
  2. Ajoutez un objet Page à la collection Pages de l’objet Document.
  3. Ajoutez TextFragment à la collection Paragraphs de la page.
  4. Enregistrez le document PDF résultant.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateHelloWorldDocument()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_QuickStart();

    // Create PDF document
    using (var document = new Aspose.Pdf.Document())
    {
        // Add page
        var page = document.Pages.Add();
        // Add text to new page
        page.Paragraphs.Add(new Aspose.Pdf.Text.TextFragment("Hello World!"));
        // Save PDF document
        document.Save(dataDir + "HelloWorld_out.pdf");
    }
}

Comment créer un document PDF consultable

Aspose.PDF for .NET fournit la fonctionnalité de créer ainsi que de manipuler des documents PDF existants. Lors de l’ajout d’éléments de texte dans un fichier PDF, le PDF résultant est consultable. Cependant, si nous convertissons une image contenant du texte en fichier PDF, le contenu à l’intérieur du PDF n’est pas consultable. Cependant, en tant que solution de contournement, nous pouvons utiliser l’OCR sur le fichier résultant, afin qu’il devienne consultable.

Cette logique spécifiée ci-dessous reconnaît le texte pour les images PDF. Pour la reconnaissance, vous pouvez utiliser des supports OCR externes conformes à la norme HOCR. À des fins de test, nous avons utilisé un OCR Google Tesseract gratuit. Par conséquent, vous devez d’abord installer Tesseract-OCR sur votre système, et vous aurez l’application console Tesseract.

Voici le code complet pour accomplir cette exigence :

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateSearchableDocument()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_QuickStart();
    
    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "SearchableDocument.pdf"))
    {
        document.Convert(CallBackGetHocr);

        // Save PDF document
        document.Save(dataDir + "SearchableDocument_out.pdf");
    }
}

private static string CallBackGetHocr(System.Drawing.Image img)
{
    var tmpFile = Path.GetTempFileName();
    try
    {
        using (var bmp = new System.Drawing.Bitmap(img))
        {
            bmp.Save(tmpFile, System.Drawing.Imaging.ImageFormat.Bmp);
        }

        var inputFile = string.Concat('"', tmpFile, '"');
        var outputFile = string.Concat('"', tmpFile, '"');
        var arguments = string.Concat(inputFile, " ", outputFile, " -l eng hocr");
        var tesseractProcessName = RunExamples.GetTesseractExePath();

        var psi = new System.Diagnostics.ProcessStartInfo(tesseractProcessName, arguments)
        {
            UseShellExecute = true,
            CreateNoWindow = true,
            WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden,
            WorkingDirectory = Path.GetDirectoryName(tesseractProcessName)
        };

        var p = new System.Diagnostics.Process
        {
            StartInfo = psi
        };
        p.Start();
        p.WaitForExit();

        using (var streamReader = new StreamReader(tmpFile + ".hocr"))
        {
            string text = streamReader.ReadToEnd();
            return text;
        }
    }
    finally
    {
        if (File.Exists(tmpFile))
        {
            File.Delete(tmpFile);
        }
        if (File.Exists(tmpFile + ".hocr"))
        {
            File.Delete(tmpFile + ".hocr");
        }
    }
}

Comment créer un PDF accessible en utilisant des fonctions de bas niveau

Ce code fonctionne avec un document PDF et son contenu étiqueté, en utilisant une bibliothèque Aspose.PDF pour le traiter.

L’exemple crée un nouvel élément span dans le contenu étiqueté de la première page d’un PDF, trouve tous les éléments BDC et les associe au span. Le document modifié est ensuite enregistré.

Vous pouvez créer une déclaration bdc en spécifiant mcid, lang et le texte d’expansion en utilisant l’objet BDCProperties :

var bdc = new Aspose.Pdf.Operators.BDC("P", new Aspose.Pdf.Facades.BDCProperties(1, "de", "Hallo, welt!"));

Après avoir créé l’arbre de structure, il est possible de lier l’opérateur BDC à l’élément spécifié de la structure avec la méthode Tag sur l’objet élément :

Aspose.Pdf.LogicalStructure.SpanElement span = content.CreateSpanElement();
span.Tag(bdc);

Étapes pour créer un PDF accessible :

  1. Chargez le document PDF.
  2. Accédez au contenu étiqueté.
  3. Créez un élément Span.
  4. Ajoutez le Span à l’élément racine.
  5. Itérez sur le contenu de la page.
  6. Vérifiez les éléments BDC et étiquetez-les.
  7. Enregistrez le document modifié.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateAnAccessibleDocument()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_QuickStart();
    
    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "tourguidev2_gb_tags.pdf"))
    {
        // Access tagged content
        Aspose.Pdf.Tagged.ITaggedContent content = document.TaggedContent;
        // Create a span element
        Aspose.Pdf.LogicalStructure.SpanElement span = content.CreateSpanElement();
        // Append span to root element
        content.RootElement.AppendChild(span);
        // Iterate over page contents
        foreach (var op in document.Pages[1].Contents)
        {
            var bdc = op as Aspose.Pdf.Operators.BDC;
            if (bdc != null)
            {
                span.Tag(bdc);
            }
        }
        // Save PDF document
        document.Save(dataDir + "AccessibleDocument_out.pdf");
    }
}

Ce code modifie un PDF en créant un élément span dans le contenu étiqueté du document et en étiquetant un contenu spécifique (opérations BDC) de la première page avec ce span. Le PDF modifié est ensuite enregistré dans un nouveau fichier.