Test in einer Live-Umgebung
Test in der Produktion ohne Wasserzeichen.
Funktioniert überall, wo Sie es brauchen.
In der heutigen schnelllebigen Entwicklungswelt ist die Handhabung von Zeitintervallen entscheidend für zahlreiche Anwendungen, von Projektmanagementsystemen bis hin zu Zeitverfolgungstools. DieTimeSpanDie Struktur in C# bietet eine robuste Möglichkeit, Zeitintervalle darzustellen, was es Entwicklern erleichtert, Berechnungen durchzuführen und Zeitdaten effizient zu formatieren. Kopplung dies mit IronPDF, eine leistungsstarke PDF-Generierungsbibliothek für .NET, ermöglicht die Erstellung dynamischer, optisch ansprechender Berichte basierend auf Zeitdaten.
Dieser Artikel wird die Feinheiten der Formatierung von TimeSpan in C# untersuchen und veranschaulichen, wie es nahtlos mit IronPDF integriert werden kann, um aufschlussreiche Berichte zu erstellen. Egal, ob Sie die Arbeitszeiten von Mitarbeitern nachverfolgen oder Projektdauern messen, dieser Leitfaden bietet praktische Beispiele zur Verbesserung Ihrer Berichtsfähigkeiten.
Die TimeSpan-Struktur in C# repräsentiert ein Zeitintervall und kann verwendet werden, um Zeitdauern oder den Unterschied zwischen zwei Datum- und Zeitwerten zu messen. Es ist eine vielseitige Struktur, die es Entwicklern ermöglicht, verschiedene zeitbezogene Berechnungen durchzuführen, wie zum Beispiel:
Erstellen von Timern zur Leistungsbewertung.
Die Bedeutung von TimeSpan liegt in seiner Fähigkeit, die Verwaltung von Zeitintervallen über Anwendungen hinweg zu vereinfachen und zu standardisieren, was es erleichtert, verschiedene zeitbezogene Aufgaben zu handhaben.
Das Erstellen eines TimeSpan-Objekts ist unkompliziert, da mehrere Methoden zur Verfügung stehen, wie zum Beispiel:
TimeSpan.FromSeconds(doppelte Sekunden): Erstellt eine TimeSpan, die die angegebene Anzahl von Sekunden repräsentiert.
Hier ist ein Beispiel, das zeigt, wie man TimeSpan-Instanzen erstellt und sie in Berechnungen verwendet:
// Creating TimeSpan instances
TimeSpan taskDuration = TimeSpan.FromHours(2.5); // 2 hours and 30 minutes
TimeSpan breakDuration = TimeSpan.FromMinutes(15); // 15 minutes
// Calculating total time spent
TimeSpan totalTime = taskDuration + breakDuration;
Console.WriteLine($"Total time spent: {totalTime}"); // Outputs: 02:45:00
// Creating TimeSpan instances
TimeSpan taskDuration = TimeSpan.FromHours(2.5); // 2 hours and 30 minutes
TimeSpan breakDuration = TimeSpan.FromMinutes(15); // 15 minutes
// Calculating total time spent
TimeSpan totalTime = taskDuration + breakDuration;
Console.WriteLine($"Total time spent: {totalTime}"); // Outputs: 02:45:00
' Creating TimeSpan instances
Dim taskDuration As TimeSpan = TimeSpan.FromHours(2.5) ' 2 hours and 30 minutes
Dim breakDuration As TimeSpan = TimeSpan.FromMinutes(15) ' 15 minutes
' Calculating total time spent
Dim totalTime As TimeSpan = taskDuration.Add(breakDuration)
Console.WriteLine($"Total time spent: {totalTime}") ' Outputs: 02:45:00
Dies zeigt die folgende Ausgabe an:
Wenn es um die Anzeige von TimeSpan-Werten geht, bietet C# mehrere Formatierungsoptionen. Spezifiziererausgaben werden verwendet, um zu steuern, wie TimeSpan-Werte angezeigt werden, wenn sie in Zeichenfolgen umgewandelt werden. Diese Spezifikatoren definieren das Ausgabeformat von TimeSpan-Objekten und helfen, deren Darstellung im finalen PDF-Bericht anzupassen. Die am häufigsten verwendeten Formatbezeichner umfassen:
Benutzerdefinierte Formate: Sie können benutzerdefinierte Formate definieren, um spezielle Anforderungen zu erfüllen, wie z. B. nur Stunden und Minuten oder Tage mit Stunden anzuzeigen.
Hier sind Beispiele für die Formatierung von TimeSpan für die Ausgabe in Berichten oder Protokollen:
TimeSpan duration = new TimeSpan(1, 2, 30, 45); // 1 day, 2 hours, 30 minutes, 45 seconds
// Default"c" format strings produce the output: 1.02:30:45
Console.WriteLine(duration.ToString("c"));
// Custom format "hh:mm:ss" outputs: 26:30:45
Console.WriteLine(duration.ToString(@"hh\:mm\:ss"));
// Custom format with days, outputs: 1d 02h 30m
Console.WriteLine(duration.ToString(@"d'd 'hh'h 'mm'm '"));
TimeSpan duration = new TimeSpan(1, 2, 30, 45); // 1 day, 2 hours, 30 minutes, 45 seconds
// Default"c" format strings produce the output: 1.02:30:45
Console.WriteLine(duration.ToString("c"));
// Custom format "hh:mm:ss" outputs: 26:30:45
Console.WriteLine(duration.ToString(@"hh\:mm\:ss"));
// Custom format with days, outputs: 1d 02h 30m
Console.WriteLine(duration.ToString(@"d'd 'hh'h 'mm'm '"));
Dim duration As New TimeSpan(1, 2, 30, 45) ' 1 day, 2 hours, 30 minutes, 45 seconds
' Default"c" format strings produce the output: 1.02:30:45
Console.WriteLine(duration.ToString("c"))
' Custom format "hh:mm:ss" outputs: 26:30:45
Console.WriteLine(duration.ToString("hh\:mm\:ss"))
' Custom format with days, outputs: 1d 02h 30m
Console.WriteLine(duration.ToString("d'd 'hh'h 'mm'm '"))
Dieses Beispiel zeigt die folgende Ausgabe:
Um mit der Verwendung vonIronPDF, müssen Sie es zuerst installieren. Wenn es bereits installiert ist, können Sie zum nächsten Abschnitt übergehen, andernfalls decken die folgenden Schritte ab, wie die IronPDF-Bibliothek installiert wird.
AnIronPDF installierenVerwenden Sie die NuGet-Paket-Manager-Konsole, öffnen Sie Visual Studio und navigieren Sie zur Paket-Manager-Konsole. Führen Sie dann den folgenden Befehl aus:
Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
Öffnen Sie Visual Studio, gehen Sie zu "Tools -> NuGet-Paket-Manager -> NuGet-Pakete für die Lösung verwalten" und suchen Sie nach IronPDF. Von hier aus müssen Sie nur Ihr Projekt auswählen und auf „Installieren“ klicken, dann wird IronPDF zu Ihrem Projekt hinzugefügt.
Sobald Sie IronPDF installiert haben, müssen Sie nur noch die korrekte Using-Anweisung am Anfang Ihres Codes hinzufügen, um IronPDF verwenden zu können:
using IronPdf;
using IronPdf;
Imports IronPdf
Jetzt sind Sie bereit, IronPDF und TimeSpan für PDF-Generierungsaufgaben zu verwenden.
Sobald IronPDF eingerichtet ist, können Sie TimeSpan-Daten verwenden, um informative PDF-Berichte zu erstellen. Betrachten Sie zum Beispiel ein Szenario, in dem Sie Arbeitsprotokolle für Mitarbeiter erstellen müssen. Sie können TimeSpan-Werte verwenden, um Aufgabenzeiten und Pausen effektiv anzuzeigen.
So verwenden Sie TimeSpan-Daten in einem PDF-Bericht, einschließlich der Erstellung eines einfachen Arbeitsprotokolls:
using IronPdf;
public static void Main(string[] args)
{
TimeSpan duration = new TimeSpan(9, 30, 25);
var employees = new List<(string name, TimeSpan timeSpan)> {
("Jane Doe", duration),
("John Doe", duration)
};
GenerateWorkLogReport(employees);
}
public static void GenerateWorkLogReport(List<(string Employee, TimeSpan Duration)> workLogs)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
var htmlContent = "<h1>Work Log Report</h1><table border='1'><tr><th>Employee</th><th>Duration</th></tr>";
foreach (var log in workLogs)
{
htmlContent += $"<tr><td>{log.Employee}</td><td>{log.Duration.ToString(@"hh\:mm\:ss")}</td></tr>";
}
htmlContent += "</table>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("WorkLogReport.pdf");
}
using IronPdf;
public static void Main(string[] args)
{
TimeSpan duration = new TimeSpan(9, 30, 25);
var employees = new List<(string name, TimeSpan timeSpan)> {
("Jane Doe", duration),
("John Doe", duration)
};
GenerateWorkLogReport(employees);
}
public static void GenerateWorkLogReport(List<(string Employee, TimeSpan Duration)> workLogs)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
var htmlContent = "<h1>Work Log Report</h1><table border='1'><tr><th>Employee</th><th>Duration</th></tr>";
foreach (var log in workLogs)
{
htmlContent += $"<tr><td>{log.Employee}</td><td>{log.Duration.ToString(@"hh\:mm\:ss")}</td></tr>";
}
htmlContent += "</table>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("WorkLogReport.pdf");
}
Imports IronPdf
Public Shared Sub Main(ByVal args() As String)
Dim duration As New TimeSpan(9, 30, 25)
Dim employees = New List(Of (name As String, timeSpan As TimeSpan)) From {("Jane Doe", duration), ("John Doe", duration)}
GenerateWorkLogReport(employees)
End Sub
Public Shared Sub GenerateWorkLogReport(ByVal workLogs As List(Of (Employee As String, Duration As TimeSpan)))
Dim renderer As New ChromePdfRenderer()
Dim htmlContent = "<h1>Work Log Report</h1><table border='1'><tr><th>Employee</th><th>Duration</th></tr>"
For Each log In workLogs
htmlContent &= $"<tr><td>{log.Employee}</td><td>{log.Duration.ToString("hh\:mm\:ss")}</td></tr>"
Next log
htmlContent &= "</table>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("WorkLogReport.pdf")
End Sub
In diesem Beispiel haben wir eine einfache Tabelle erstellt, um die Arbeitsprotokolle der Mitarbeiter anzuzeigen. Die GenerateWorkLogReport-Methode erstellt eine HTML-Tabelle mit formatierten TimeSpan-Werten, die anschließend in ein PDF-Dokument umgewandelt wird. Wir verwenden IronPDFsChromePdfRendererKlasse zur Verarbeitung des Renderns von HTML-Inhalten in ein PDF-Format. PdfDocumentwird verwendet, um das PDF-Objekt zu erstellen, das verwendet wird, um das neu erstellte PDF zu verarbeiten und es zu speichern.
Die Anpassung der TimeSpan-Ausgabe kann die Lesbarkeit Ihrer Berichte erheblich verbessern. Zum Beispiel, wenn Sie nur Stunden und Minuten anzeigen müssen, können Sie Ihr TimeSpan entsprechend formatieren. In diesem Beispiel verwenden wir die gleichen Mitarbeiterdaten, die wir im letzten Beispiel erstellt haben, und formatieren die TimeSpan so, dass nur die Stunden und Minuten angezeigt werden, die sie gearbeitet haben. In diesem Szenario sind die Sekunden für Aufzeichnungen nicht erforderlich und nehmen einfach unnötigen Platz ein, daher werden wir sie ausblenden:
using IronPdf;
class Program
{
public static void Main(string[] args)
{
TimeSpan duration = new TimeSpan(9, 30, 25);
var employees = new List<(string name, TimeSpan timeSpan)> {
("Jane Doe", duration),
("John Doe", duration)
};
GenerateWorkLogReport(employees);
}
public static void GenerateWorkLogReport(List<(string Employee, TimeSpan Duration)> workLogs)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
var htmlContent = "<h1>Work Log Report</h1><table border='1'><tr><th>Employee</th><th>Duration</th></tr>";
foreach (var log in workLogs)
{
// custom format string to format the TimeSpan value for display
string formattedDuration = log.Duration.ToString(@"hh\:mm");
htmlContent += $"<tr><td>{log.Employee}</td><td>{formattedDuration}</td></tr>";
}
htmlContent += "</table>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("WorkLogReport.pdf");
}
}
using IronPdf;
class Program
{
public static void Main(string[] args)
{
TimeSpan duration = new TimeSpan(9, 30, 25);
var employees = new List<(string name, TimeSpan timeSpan)> {
("Jane Doe", duration),
("John Doe", duration)
};
GenerateWorkLogReport(employees);
}
public static void GenerateWorkLogReport(List<(string Employee, TimeSpan Duration)> workLogs)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
var htmlContent = "<h1>Work Log Report</h1><table border='1'><tr><th>Employee</th><th>Duration</th></tr>";
foreach (var log in workLogs)
{
// custom format string to format the TimeSpan value for display
string formattedDuration = log.Duration.ToString(@"hh\:mm");
htmlContent += $"<tr><td>{log.Employee}</td><td>{formattedDuration}</td></tr>";
}
htmlContent += "</table>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("WorkLogReport.pdf");
}
}
Imports IronPdf
Friend Class Program
Public Shared Sub Main(ByVal args() As String)
Dim duration As New TimeSpan(9, 30, 25)
Dim employees = New List(Of (name As String, timeSpan As TimeSpan)) From {("Jane Doe", duration), ("John Doe", duration)}
GenerateWorkLogReport(employees)
End Sub
Public Shared Sub GenerateWorkLogReport(ByVal workLogs As List(Of (Employee As String, Duration As TimeSpan)))
Dim renderer As New ChromePdfRenderer()
Dim htmlContent = "<h1>Work Log Report</h1><table border='1'><tr><th>Employee</th><th>Duration</th></tr>"
For Each log In workLogs
' custom format string to format the TimeSpan value for display
Dim formattedDuration As String = log.Duration.ToString("hh\:mm")
htmlContent &= $"<tr><td>{log.Employee}</td><td>{formattedDuration}</td></tr>"
Next log
htmlContent &= "</table>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("WorkLogReport.pdf")
End Sub
End Class
In diesem Beispiel wird die ToString(@"hh\:mm\:ss") formatiert die TimeSpan als 09:3(Gesamte Stunden und Minuten)mithilfe benutzerdefinierter Formatierungszeichenfolgen, sollte jedoch beachtet werden, dass TimeSpan auch die Verwendung von Standardformatzeichenfolgen unterstützt. Auf diese Weise können Sie sicherstellen, dass TimeSpan so angezeigt wird, wie Sie es wünschen, um die Lesbarkeit des Dokuments zu erhalten. Dies kann auch umgekehrt erfolgen, indem ein String in eine TimeSpan geparst wird. Das Parsen konvertiert Eingabestrings, die einem spezifischen Format folgen.(wie "hh:mm" oder "d.hh:mm")in ein tatsächliches TimeSpan-Objekt, mit dem C# programmgesteuert arbeiten kann.
Beim Umgang mit größeren TimeSpan-Werten ist es wichtig, sie für die Lesbarkeit zu formatieren. Zum Beispiel können Sie lange Zeitdauern in ein verständlicheres Format umwandeln, wie "3 Tage, 5 Stunden":
class Program
{
public static void Main(string[] args)
{
// Sample data: List of employee names and their work durations (TimeSpan)
var workLogs = new List<(string Employee, TimeSpan Duration)>
{
("Alice", new TimeSpan(5, 30, 0)), // 5 hours, 30 minutes
("Bob", new TimeSpan(3, 15, 0)), // 3 hours, 15 minutes
("Charlie", new TimeSpan(7, 45, 0)) // 7 hours, 45 minutes
};
// Create the HTML content for the PDF report
string htmlContent = @"
<h1>Work Log Report</h1>
<table border='1' cellpadding='5' cellspacing='0'>
<tr>
<th>Employee</th>
<th>Work Duration (hh:mm:ss)</th>
</tr>";
// Loop through the work logs and add rows to the table
foreach (var log in workLogs)
{
string formattedDuration = FormatLargeTimeSpan(log.Duration); // Custom method to format large TimeSpan values
htmlContent += $"<tr><td>{log.Employee}</td><td>{formattedDuration}</td></tr>";
}
// Close the HTML table
htmlContent += "</table>";
// Create a new HtmlToPdf renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render the HTML content as a PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Save the PDF to a file
pdf.SaveAs("WorkLogReport.pdf");
}
// Custom method to handle the formatting operation
static string FormatLargeTimeSpan(TimeSpan timeSpan)
{
// Check if there are days in the TimeSpan and format accordingly
if (timeSpan.TotalDays >= 1)
{
return string.Format("{0} days, {1} hours, {2} minutes",
(int)timeSpan.TotalDays,
timeSpan.Hours,
timeSpan.Minutes);
}
else
{
// If the duration is less than a day, show only hours and minutes
return string.Format("{0} hours, {1} minutes", timeSpan.Hours, timeSpan.Minutes);
}
}
}
class Program
{
public static void Main(string[] args)
{
// Sample data: List of employee names and their work durations (TimeSpan)
var workLogs = new List<(string Employee, TimeSpan Duration)>
{
("Alice", new TimeSpan(5, 30, 0)), // 5 hours, 30 minutes
("Bob", new TimeSpan(3, 15, 0)), // 3 hours, 15 minutes
("Charlie", new TimeSpan(7, 45, 0)) // 7 hours, 45 minutes
};
// Create the HTML content for the PDF report
string htmlContent = @"
<h1>Work Log Report</h1>
<table border='1' cellpadding='5' cellspacing='0'>
<tr>
<th>Employee</th>
<th>Work Duration (hh:mm:ss)</th>
</tr>";
// Loop through the work logs and add rows to the table
foreach (var log in workLogs)
{
string formattedDuration = FormatLargeTimeSpan(log.Duration); // Custom method to format large TimeSpan values
htmlContent += $"<tr><td>{log.Employee}</td><td>{formattedDuration}</td></tr>";
}
// Close the HTML table
htmlContent += "</table>";
// Create a new HtmlToPdf renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render the HTML content as a PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Save the PDF to a file
pdf.SaveAs("WorkLogReport.pdf");
}
// Custom method to handle the formatting operation
static string FormatLargeTimeSpan(TimeSpan timeSpan)
{
// Check if there are days in the TimeSpan and format accordingly
if (timeSpan.TotalDays >= 1)
{
return string.Format("{0} days, {1} hours, {2} minutes",
(int)timeSpan.TotalDays,
timeSpan.Hours,
timeSpan.Minutes);
}
else
{
// If the duration is less than a day, show only hours and minutes
return string.Format("{0} hours, {1} minutes", timeSpan.Hours, timeSpan.Minutes);
}
}
}
Imports System
Friend Class Program
Public Shared Sub Main(ByVal args() As String)
' Sample data: List of employee names and their work durations (TimeSpan)
Dim workLogs = New List(Of (Employee As String, Duration As TimeSpan)) From {("Alice", New TimeSpan(5, 30, 0)), ("Bob", New TimeSpan(3, 15, 0)), ("Charlie", New TimeSpan(7, 45, 0))}
' Create the HTML content for the PDF report
Dim htmlContent As String = "
<h1>Work Log Report</h1>
<table border='1' cellpadding='5' cellspacing='0'>
<tr>
<th>Employee</th>
<th>Work Duration (hh:mm:ss)</th>
</tr>"
' Loop through the work logs and add rows to the table
For Each log In workLogs
Dim formattedDuration As String = FormatLargeTimeSpan(log.Duration) ' Custom method to format large TimeSpan values
htmlContent &= $"<tr><td>{log.Employee}</td><td>{formattedDuration}</td></tr>"
Next log
' Close the HTML table
htmlContent &= "</table>"
' Create a new HtmlToPdf renderer
Dim renderer As New ChromePdfRenderer()
' Render the HTML content as a PDF
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
' Save the PDF to a file
pdf.SaveAs("WorkLogReport.pdf")
End Sub
' Custom method to handle the formatting operation
Private Shared Function FormatLargeTimeSpan(ByVal timeSpan As TimeSpan) As String
' Check if there are days in the TimeSpan and format accordingly
If timeSpan.TotalDays >= 1 Then
Return String.Format("{0} days, {1} hours, {2} minutes", CInt(Math.Truncate(timeSpan.TotalDays)), timeSpan.Hours, timeSpan.Minutes)
Else
' If the duration is less than a day, show only hours and minutes
Return String.Format("{0} hours, {1} minutes", timeSpan.Hours, timeSpan.Minutes)
End If
End Function
End Class
In diesem Beispiel wandelt die benutzerdefinierte Methode FormatLargeTimeSpan große TimeSpan-Werte in leicht lesbare Formate um, wie zum Beispiel "6 Tage, 5 Stunden, 30 Minuten." Sie überprüft, ob der TimeSpan-Wert Tage beinhaltet und formatiert die Ausgabe entsprechend, wobei Methoden verwendet werden, die zusammengesetzte Formatierung unterstützen.
IronPDF zeichnet sich durch seine leistungsstarken Funktionen zur Erstellung dynamischer PDFs auf Basis von String-, Zeit- und HTML-Daten aus. Mit IronPDF werden Ihre PDF-bezogenen Aufgaben zum Kinderspiel. Von der einfachen PDF-Erstellung bis zur sicheren PDF-Verschlüsselung bietet IronPDF alles, was Sie benötigen. Einige der wichtigsten Vorteile umfassen:
IronPDF integriert sich nahtlos in .NET-Anwendungen und ermöglicht es Entwicklern, die TimeSpan-Struktur effektiv zu nutzen. Mit IronPDF können Sie professionelle Berichte erstellen, die formatierte Zeitdaten enthalten, und das mit minimalem Aufwand, wodurch Ihr Berichterstattungsprozess effizient und unkompliziert wird.
In diesem Artikel haben wir untersucht, wie TimeSpan-Werte in C# formatiert und verarbeitet werden und nahtlos integriert werden können inIronPDFum dynamische zeitbasierte Berichte zu erstellen. Die C# TimeSpan-Formatstruktur ist ein wesentliches Werkzeug zur Darstellung von Zeitintervallen, wie etwa Projektlaufzeiten, Arbeitsprotokollen und Abschlusszeiten von Aufgaben. Egal, ob Sie es mit kurzen Zeitspannen oder großen Intervallen, die sich über mehrere Tage, Stunden und Minuten erstrecken, zu tun haben, C# bietet flexible Formatierungsoptionen, um diese Daten in einem für Menschen lesbaren Format darzustellen. Wenn wir zu fortgeschritteneren Beispielen übergehen, könnten diese das Einhalten von Formatierungskonventionen für verschiedene Kulturen, die Verwendung von Zeiteingaben, das Parsen von Zeichenfolgen in eine TimeSpan und so weiter umfassen.
IronPDF überzeugt durch die präzise Umwandlung von HTML in PDF und ist damit das ideale Werkzeug zur Erstellung von Berichten aus datengetriebenen Anwendungen. Die Integration mit C# erleichtert die Einbindung komplexer Strukturen wie TimeSpan in hochwertige PDFs.
Nun, da Sie verstehen, wie Sie TimeSpan-Werte formatieren und in PDF-Berichte mit IronPDF integrieren, ist es an der Zeit, den nächsten Schritt zu machen. Laden Sie einkostenlos testenvon IronPDF und entdecken Sie das volle Potenzial zur Erstellung dynamischer, datengetriebener Berichte für Ihre Projekte. Mit IronPDF können Sie Ihre zeitbasierten Daten mit minimalem Aufwand in ausgefeilte, professionelle Dokumente verwandeln.
10 .NET API-Produkte für Ihre Bürodokumente