using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external html assets: Images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
Comment afficher un fichier PDF dans .NET MAUI (étape par étape) Tutoriel
Jordi Bardia
janvier 30, 2023
Mise à jour février 25, 2024
Partager:
.NET MAUI est la nouvelle génération de .NET qui permet aux développeurs de créer des applications multiplateformes de bureau, Web et mobiles, y compris Xamarin.Forms, avec une base de code unique. Avec .NET MAUI, vous pouvez écrire votre application une fois et la déployer sur plusieurs plateformes, y compris Windows, macOS, iOS, Android, et tvOS avec le même nom de projet. .NET MAUI vous permet également de tirer parti des dernières fonctionnalités d'interface utilisateur de chaque plateforme, telles que le mode sombre et la prise en charge du tactile sur macOS, ou la reconnaissance vocale sur Windows 10.
Cet article explique comment utiliser IronPDF dans l'application .NET MAUI pour créer des documents PDF avec de nombreux avantages.
IronPDF est une bibliothèque .NET qui permet de générer et d'éditer des fichiers PDF. Il est parfait pour les applications .NET MAUI, car il offre un large éventail de fonctionnalités qui peuvent être personnalisées pour répondre à vos besoins spécifiques. Grâce à son API facile à utiliser, IronPDF facilite l'intégration de la fonctionnalité PDF dans votre projet .NET MAUI.
Conditions préalables
Il existe certaines conditions préalables à la création de PDF et de visualiseurs de PDF dans .NET MAUI à l'aide d'IronPDF :
La dernière version de Visual Studio
.NET Framework 6 ou 7
Paquets MAUI installés dans Visual Studio
application .NET MAUI fonctionnant dans Visual Studio
Étape 1 : Installer IronPDF
L'une des meilleures façons d'installer IronPDF dans un nouveau projet est d'utiliser la console NuGet Package Manager dans Visual Studio. Cette méthode d'installation d'IronPDF présente certains avantages.
C'est facile à faire et
Vous pouvez être sûr que vous utilisez la dernière version d'IronPDF.
Étapes d'installation d'IronPDF
Tout d'abord, ouvrez la Console du Gestionnaire de Packages en allant à Outils > Gestionnaire de Packages NuGet > Console du Gestionnaire de Packages.
Console du gestionnaire de packages
Ensuite, tapez la commande suivante :
Install-Package IronPdf
Cela installera le package et toutes ses dépendances comme le dossier assets.
Installation de IronPDF
Vous pouvez maintenant commencer à utiliser IronPDF dans votre projet MAUI.
Étape 2 : Mise en place d'une conception frontale dans .NET MAUI
Tout d'abord, créez une mise en page pour trois fonctionnalités d'IronPDF.
URL vers la mise en page PDF
Pour la mise en page URL vers PDF, créez une étiquette avec le texte "Entrez l'URL pour convertir le PDF" à l'aide d'un contrôle d'étiquette MAUI .NET. Ensuite, appliquez une disposition en pile horizontale pour disposer le contrôle d'entrée et le bouton horizontalement. Ensuite, placez une ligne après les contrôles pour diviser la section suivante de contrôles.
Pour la mise en page de la section HTML vers PDF, créez un contrôle Éditeur et un bouton. Le contrôle de l'éditeur sera utilisé pour accepter une chaîne de contenu HTML de la part de l'utilisateur. En outre, ajoutez une ligne de séparation.
<Label
Text="Enter HTML to Convert to PDF"
SemanticProperties.HeadingLevel="Level2"
FontSize="18"
HorizontalOptions="Center" />
<Border
Stroke="White"
StrokeThickness="2"
StrokeShape="RoundRectangle 5,5,5,5"
HorizontalOptions="Center">
<Editor
x:Name="HTML"
HeightRequest="200"
WidthRequest="300"
HorizontalOptions="Center"
/>
</Border>
<Button
x:Name="htmlPDF"
Text="Convert HTML to PDF"
Clicked="HtmlToPdf"
HorizontalOptions="Center" />
<Line Stroke="White" X2="1500" />
<Label
Text="Enter HTML to Convert to PDF"
SemanticProperties.HeadingLevel="Level2"
FontSize="18"
HorizontalOptions="Center" />
<Border
Stroke="White"
StrokeThickness="2"
StrokeShape="RoundRectangle 5,5,5,5"
HorizontalOptions="Center">
<Editor
x:Name="HTML"
HeightRequest="200"
WidthRequest="300"
HorizontalOptions="Center"
/>
</Border>
<Button
x:Name="htmlPDF"
Text="Convert HTML to PDF"
Clicked="HtmlToPdf"
HorizontalOptions="Center" />
<Line Stroke="White" X2="1500" />
XML
Fichier HTML vers mise en page PDF
Pour les fichiers HTML vers PDF, ajoutez un seul bouton. Ce bouton permet de convertir un fichier HTML en document PDF à l'aide d'IronPDF.
<Label
Text="Convert HTML file to PDF"
SemanticProperties.HeadingLevel="Level2"
FontSize="18"
HorizontalOptions="Center" />
<Button
x:Name="htmlFilePDF"
Text="Convert HTML file to PDF"
Clicked="FileToPdf"
HorizontalOptions="Center" />
<Label
Text="Convert HTML file to PDF"
SemanticProperties.HeadingLevel="Level2"
FontSize="18"
HorizontalOptions="Center" />
<Button
x:Name="htmlFilePDF"
Text="Convert HTML file to PDF"
Clicked="FileToPdf"
HorizontalOptions="Center" />
XML
Le code complet de l'interface utilisateur
Le code source complet de l'interface MAUI .NET est donné ci-dessous.
Étape 3 : Code pour l'enregistrement et la visualisation des fichiers PDF
.NET MAUI ne dispose d'aucune fonction prédéfinie permettant d'enregistrer des fichiers dans la mémoire locale. Il est donc nécessaire d'écrire le code nous-mêmes. Pour créer la fonctionnalité d'enregistrement et de visualisation, une classe partielle nommée SaveService est créée avec une fonction void partielle nommée SaveAndView avec trois paramètres : le nom du fichier, le type de contenu du fichier et le flux de mémoire pour écrire le fichier.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PDF_Viewer
{
public partial class SaveService
{
public partial void SaveAndView(string filename, string contentType, MemoryStream stream);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PDF_Viewer
{
public partial class SaveService
{
public partial void SaveAndView(string filename, string contentType, MemoryStream stream);
}
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks
Namespace PDF_Viewer
Partial Public Class SaveService
Public Partial Private Sub SaveAndView(ByVal filename As String, ByVal contentType As String, ByVal stream As MemoryStream)
End Sub
End Class
End Namespace
$vbLabelText $csharpLabel
La fonctionnalité de sauvegarde et de visualisation devra être implémentée pour chaque plateforme qui souhaite prendre en charge (par exemple pour Android, macOS, et/ou Windows). Pour la plateforme Windows, créez un fichier nommé "SaveWindows.cs" et implémentez la méthode partielle SaveAndView :
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.UI.Popups;
namespace PDF_Viewer
{
public partial class SaveService
{
public async partial void SaveAndView(string filename, string contentType, MemoryStream stream)
{
StorageFile stFile;
string extension = Path.GetExtension(filename);
//Gets process windows handle to open the dialog in application process.
IntPtr windowHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
if (!Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
{
//Creates file save picker to save a file.
FileSavePicker savePicker = new FileSavePicker();
savePicker.DefaultFileExtension = ".pdf";
savePicker.SuggestedFileName = filename;
//Saves the file as PDF file.
savePicker.FileTypeChoices.Add("PDF", new List<string>() { ".pdf" });
WinRT.Interop.InitializeWithWindow.Initialize(savePicker, windowHandle);
stFile = await savePicker.PickSaveFileAsync();
}
else
{
StorageFolder local = ApplicationData.Current.LocalFolder;
stFile = await local.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
}
if (stFile != null)
{
using (IRandomAccessStream zipStream = await stFile.OpenAsync(FileAccessMode.ReadWrite))
{
//Writes compressed data from memory to file.
using Stream outstream = zipStream.AsStreamForWrite();
outstream.SetLength(0);
//Saves the stream as file.
byte [] buffer = stream.ToArray();
outstream.Write(buffer, 0, buffer.Length);
outstream.Flush();
}
//Create message dialog box.
MessageDialog msgDialog = new("Do you want to view the document?", "File has been created successfully");
UICommand yesCmd = new("Yes");
msgDialog.Commands.Add(yesCmd);
UICommand noCmd = new("No");
msgDialog.Commands.Add(noCmd);
WinRT.Interop.InitializeWithWindow.Initialize(msgDialog, windowHandle);
//Showing a dialog box.
IUICommand cmd = await msgDialog.ShowAsync();
if (cmd.Label == yesCmd.Label)
{
//Launch the saved file.
await Windows.System.Launcher.LaunchFileAsync(stFile);
}
}
}
}
}
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.UI.Popups;
namespace PDF_Viewer
{
public partial class SaveService
{
public async partial void SaveAndView(string filename, string contentType, MemoryStream stream)
{
StorageFile stFile;
string extension = Path.GetExtension(filename);
//Gets process windows handle to open the dialog in application process.
IntPtr windowHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
if (!Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
{
//Creates file save picker to save a file.
FileSavePicker savePicker = new FileSavePicker();
savePicker.DefaultFileExtension = ".pdf";
savePicker.SuggestedFileName = filename;
//Saves the file as PDF file.
savePicker.FileTypeChoices.Add("PDF", new List<string>() { ".pdf" });
WinRT.Interop.InitializeWithWindow.Initialize(savePicker, windowHandle);
stFile = await savePicker.PickSaveFileAsync();
}
else
{
StorageFolder local = ApplicationData.Current.LocalFolder;
stFile = await local.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
}
if (stFile != null)
{
using (IRandomAccessStream zipStream = await stFile.OpenAsync(FileAccessMode.ReadWrite))
{
//Writes compressed data from memory to file.
using Stream outstream = zipStream.AsStreamForWrite();
outstream.SetLength(0);
//Saves the stream as file.
byte [] buffer = stream.ToArray();
outstream.Write(buffer, 0, buffer.Length);
outstream.Flush();
}
//Create message dialog box.
MessageDialog msgDialog = new("Do you want to view the document?", "File has been created successfully");
UICommand yesCmd = new("Yes");
msgDialog.Commands.Add(yesCmd);
UICommand noCmd = new("No");
msgDialog.Commands.Add(noCmd);
WinRT.Interop.InitializeWithWindow.Initialize(msgDialog, windowHandle);
//Showing a dialog box.
IUICommand cmd = await msgDialog.ShowAsync();
if (cmd.Label == yesCmd.Label)
{
//Launch the saved file.
await Windows.System.Launcher.LaunchFileAsync(stFile);
}
}
}
}
}
Imports Windows.Storage
Imports Windows.Storage.Pickers
Imports Windows.Storage.Streams
Imports Windows.UI.Popups
Namespace PDF_Viewer
Partial Public Class SaveService
Public Async Sub SaveAndView(ByVal filename As String, ByVal contentType As String, ByVal stream As MemoryStream)
Dim stFile As StorageFile
Dim extension As String = Path.GetExtension(filename)
'Gets process windows handle to open the dialog in application process.
Dim windowHandle As IntPtr = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle
If Not Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons") Then
'Creates file save picker to save a file.
Dim savePicker As New FileSavePicker()
savePicker.DefaultFileExtension = ".pdf"
savePicker.SuggestedFileName = filename
'Saves the file as PDF file.
savePicker.FileTypeChoices.Add("PDF", New List(Of String)() From {".pdf"})
WinRT.Interop.InitializeWithWindow.Initialize(savePicker, windowHandle)
stFile = Await savePicker.PickSaveFileAsync()
Else
Dim local As StorageFolder = ApplicationData.Current.LocalFolder
stFile = Await local.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting)
End If
If stFile IsNot Nothing Then
Using zipStream As IRandomAccessStream = Await stFile.OpenAsync(FileAccessMode.ReadWrite)
'Writes compressed data from memory to file.
Using outstream As Stream = zipStream.AsStreamForWrite()
outstream.SetLength(0)
'Saves the stream as file.
Dim buffer() As Byte = stream.ToArray()
outstream.Write(buffer, 0, buffer.Length)
outstream.Flush()
End Using
End Using
'Create message dialog box.
Dim msgDialog As New MessageDialog("Do you want to view the document?", "File has been created successfully")
Dim yesCmd As New UICommand("Yes")
msgDialog.Commands.Add(yesCmd)
Dim noCmd As New UICommand("No")
msgDialog.Commands.Add(noCmd)
WinRT.Interop.InitializeWithWindow.Initialize(msgDialog, windowHandle)
'Showing a dialog box.
Dim cmd As IUICommand = Await msgDialog.ShowAsync()
If cmd.Label = yesCmd.Label Then
'Launch the saved file.
Await Windows.System.Launcher.LaunchFileAsync(stFile)
End If
End If
End Sub
End Class
End Namespace
$vbLabelText $csharpLabel
Pour Android et macOS, vous devez créer des fichiers séparés avec des implémentations SaveAndView comparables. Vous pouvez obtenir un exemple fonctionnel à partir de ce dépôt GitHub MAUI PDF Viewer.
Étape 4 : Code pour les fonctionnalités PDF
Il est maintenant temps d'écrire le code pour les fonctionnalités PDF. Commençons par la fonctionnalité URL vers PDF.
Fonctionnalité URL vers PDF
Créez une fonction UrlToPdf pour la fonctionnalité URL vers PDF. À l'intérieur de la fonction, instanciez l'objet ChromePdfRenderer et utilisez la fonction RenderUrlAsPdf pour convertir l'URL en documents PDF. La fonction RenderUrlAsPdf récupère les données de l'URL depuis le serveur web et les traite pour les convertir en un document PDF. Dans les paramètres, passez le texte dans le contrôle d'entrée de l'URL, créez un objet de la classe SaveService et utilisez la fonction SaveAndView. Dans les paramètres de la fonction SaveAndView, passez le flux du fichier PDF généré.
La fonction SaveAndView aide à enregistrer des fichiers à n'importe quel chemin personnalisé et offre la possibilité de visualiser des fichiers PDF. Enfin, affichez une boîte d'alerte contenant des informations sur la création du fichier PDF. Si un utilisateur tente de créer un fichier PDF avec un contrôle d'entrée vide, une boîte d'alerte s'affiche avec un message d'erreur et un avertissement.
private void UrlToPdf(object sender, EventArgs e)
{
if (URL.Text != null)
{
var renderer = new IronPdf.ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf(URL.Text.Trim());
SaveService saveService = new SaveService();
saveService.SaveAndView("URLtoPDF.pdf", "application/pdf", pdf.Stream);
DisplayAlert("Success", "PDF from URL Created!", "OK");
}
else
{
DisplayAlert("Error", "Field can't be empty! \nPlease enter URL!", "OK");
}
}
private void UrlToPdf(object sender, EventArgs e)
{
if (URL.Text != null)
{
var renderer = new IronPdf.ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf(URL.Text.Trim());
SaveService saveService = new SaveService();
saveService.SaveAndView("URLtoPDF.pdf", "application/pdf", pdf.Stream);
DisplayAlert("Success", "PDF from URL Created!", "OK");
}
else
{
DisplayAlert("Error", "Field can't be empty! \nPlease enter URL!", "OK");
}
}
Imports Microsoft.VisualBasic
Private Sub UrlToPdf(ByVal sender As Object, ByVal e As EventArgs)
If URL.Text IsNot Nothing Then
Dim renderer = New IronPdf.ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf(URL.Text.Trim())
Dim saveService As New SaveService()
saveService.SaveAndView("URLtoPDF.pdf", "application/pdf", pdf.Stream)
DisplayAlert("Success", "PDF from URL Created!", "OK")
Else
DisplayAlert("Error", "Field can't be empty! " & vbLf & "Please enter URL!", "OK")
End If
End Sub
$vbLabelText $csharpLabel
Fonctionnalité HTML vers PDF
Pour la fonctionnalité de conversion d'HTML en PDF, créez la fonction HtmlToPdf et utilisez la fonction RenderHtmlAsPdf. Utilisez le texte du contrôle de l'éditeur et passez-le dans les paramètres de la fonction RenderHtmlAsPdf. Similaire à la fonction ci-dessus, utilisez la fonction SaveAndView pour activer la fonctionnalité permettant de visualiser le fichier PDF après l'avoir enregistré.
private void HtmlToPdf(object sender, EventArgs e)
{
if (HTML.Text != null)
{
var renderer = new IronPdf.ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(HTML.Text);
SaveService saveService = new SaveService();
saveService.SaveAndView("IronPDF HTML string.pdf", "application/pdf", pdf.Stream);
DisplayAlert("Success", "PDF from HTML Created!", "OK");
}
else
{
DisplayAlert("Error", "Field can't be empty! \nPlease enter valid HTML!", "OK");
}
}
private void HtmlToPdf(object sender, EventArgs e)
{
if (HTML.Text != null)
{
var renderer = new IronPdf.ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(HTML.Text);
SaveService saveService = new SaveService();
saveService.SaveAndView("IronPDF HTML string.pdf", "application/pdf", pdf.Stream);
DisplayAlert("Success", "PDF from HTML Created!", "OK");
}
else
{
DisplayAlert("Error", "Field can't be empty! \nPlease enter valid HTML!", "OK");
}
}
Imports Microsoft.VisualBasic
Private Sub HtmlToPdf(ByVal sender As Object, ByVal e As EventArgs)
If HTML.Text IsNot Nothing Then
Dim renderer = New IronPdf.ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(HTML.Text)
Dim saveService As New SaveService()
saveService.SaveAndView("IronPDF HTML string.pdf", "application/pdf", pdf.Stream)
DisplayAlert("Success", "PDF from HTML Created!", "OK")
Else
DisplayAlert("Error", "Field can't be empty! " & vbLf & "Please enter valid HTML!", "OK")
End If
End Sub
$vbLabelText $csharpLabel
Fonctionnalité de conversion des fichiers HTML en PDF
Créez la fonction FileToPdf pour convertir des fichiers HTML en fichiers PDF, utilisez la fonction RenderHtmlFileAsPdf et passez le chemin du fichier HTML en tant que paramètre. Il convertit tout le contenu HTML en PDF et enregistre le fichier de sortie.
private void FileToPdf(object sender, EventArgs e)
{
var renderer = new IronPdf.ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf(@"C:\Users\Administrator\Desktop\index.html");
SaveService saveService = new SaveService();
saveService.SaveAndView("HTML File to PDF.pdf", "application/pdf", pdf.Stream);
DisplayAlert("Success", "PDF from File Created!", "OK");
}
private void FileToPdf(object sender, EventArgs e)
{
var renderer = new IronPdf.ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf(@"C:\Users\Administrator\Desktop\index.html");
SaveService saveService = new SaveService();
saveService.SaveAndView("HTML File to PDF.pdf", "application/pdf", pdf.Stream);
DisplayAlert("Success", "PDF from File Created!", "OK");
}
Private Sub FileToPdf(ByVal sender As Object, ByVal e As EventArgs)
Dim renderer = New IronPdf.ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlFileAsPdf("C:\Users\Administrator\Desktop\index.html")
Dim saveService As New SaveService()
saveService.SaveAndView("HTML File to PDF.pdf", "application/pdf", pdf.Stream)
DisplayAlert("Success", "PDF from File Created!", "OK")
End Sub
$vbLabelText $csharpLabel
Sortie
Après l'exécution du projet, le résultat sera le suivant.
Sortie
Inscrivez l'URL du site web de Microsoft dans cette section et cliquez sur le bouton.
URL en PDF
Après avoir créé le fichier PDF, il affiche une boîte de dialogue pour enregistrer le fichier sur la destination personnalisée.
Enregistrer le fichier
Après avoir enregistré le fichier, cette fenêtre contextuelle s'affiche et offre la possibilité de sélectionner le visualiseur PDF pour afficher le fichier PDF.
Fenêtre contextuelle du visualiseur PDF
IronPDF convertit l'URL en PDF de manière remarquable. Il préserve toutes les couleurs et les images dans leur forme et leur format d'origine.
Fenêtre contextuelle du visualiseur PDF
La même procédure doit être suivie pour toutes les autres fonctionnalités. Consultez cet article de blog IronPDF in Blazor pour en savoir plus sur le fonctionnement d'IronPDF dans Blazor.
Ce tutoriel a utilisé IronPDF dans l'application .NET MAUI pour créer un fichier PDF et une visionneuse PDF. Le MAUI .NET est un outil formidable pour créer des applications multiplateformes avec une base de code unique. IronPDF permet de créer et de personnaliser facilement des fichiers PDF dans n'importe quelle application .NET. IronPDF est entièrement compatible avec la plate-forme MAUI .NET.
IronPDF est gratuit pour le développement. Vous pouvez obtenir une clé d'essai gratuite pour tester IronPDF en production. Pour plus d'informations sur IronPDF et ses fonctionnalités, veuillez visiter le site officiel d'IronPDF.
Jordi maîtrise parfaitement Python, C# et C++. Lorsqu'il ne met pas à profit ses compétences chez Iron Software, il se consacre à la programmation de jeux. Partageant des responsabilités en matière de tests de produits, de développement de produits et de recherche, Jordi apporte une valeur ajoutée considérable à l'amélioration continue des produits. Cette expérience variée le stimule et l'engage, et il dit que c'est l'un des aspects qu'il préfère dans son travail chez Iron Software. Jordi a grandi à Miami, en Floride, et a étudié l'informatique et les statistiques à l'université de Floride.
< PRÉCÉDENT Convertir un fichier PPT (PowerPoint) en PDF en C# (exemple de tutoriel)
SUIVANT > PDFium en C# Alternatives à l'utilisation d'IronPDF
Des millions d'ingénieurs dans le monde entier lui font confiance
Réservez une démo en direct gratuite
Réservez une démonstration personnelle de 30 minutes.
Pas de contrat, pas de détails de carte, pas d'engagements.
Voici ce à quoi vous pouvez vous attendre :
Une démonstration en direct de notre produit et de ses principales fonctionnalités
Obtenez des recommandations de fonctionnalités spécifiques au projet
Toutes vos questions trouvent réponse pour vous assurer de disposer de toutes les informations dont vous avez besoin. (Aucun engagement de votre part.)
CHOISIR L'HEURE
VOS INFORMATIONS
Réservez votre démo en direct gratuite
Fiable par plus de 2 millions d'ingénieurs dans le monde entier