PDF4me .NET SDK: C# PDF Bibliothek und API Kunde
Pdf4me.Client ist ein .NET Clientbibliothek für die PDF4me API Dadurch werden 106 Dokumentaktionen als typisierte asynchrone Methoden bereitgestellt. Installieren Sie es von NuGet, erstelle einen Pdf4meClient mit Ihrem API Schlüssel, und konvertieren, optimieren, zusammenführen, aufteilen, OCR oder Auszüge aus Dokumenten in C# ohne die Auslieferung einer Rendering-Engine.
Verpackungsinformationen
| Feld | Wert |
|---|---|
| Paketname | Pdf4me.Client |
| Aktuelle Version | 2.0.0 (zuletzt aktualisiert am 13.10.2026) |
| Lizenz | MIT |
| .NET Unterstützung | .NET 8, 9 und 10, plus .NET Standard 2.0 für .NET Framework 4.6.2 und höher |
| Gesamtzahl der Downloads | 246,4K über alle Versionen hinweg |
| Verpackungsgröße | 1,34 MB |
| Aktionen | 106 in 18 Abschnitten |
| Laufzeitabhängigkeiten | Microsoft.Kiota.Bundle (>= 2.1.2) und Microsoft.Extensions.Logging.Abstractions (>= 8.0.3) |
| Basis URL | https://api.pdf4me.com |
| Quelle | github.com/pdf4me/pdf4me-clientapi-dotnet |
| NuGet | nuget.org/packages/Pdf4me.Client |
Voraussetzungen
- .NET 8 oder neuer, oder .NET Framework 4.6.2 oder neuer bis .NET Standard 2.0.
- A PDF4me Konto und API Schlüssel.
Installieren
- dotnet CLI
- Package Manager
- PackageReference
dotnet add package Pdf4me.Client
NuGet\Install-Package Pdf4me.Client -Version 2.0.0
<PackageReference Include="Pdf4me.Client" Version="2.0.0" />
Authentifizieren
Stellen Sie Ihre API Schlüsselelement in der Umwelt:
- Bash / Zsh
- PowerShell
- Windows CMD
export PDF4ME_API_KEY="your-api-key"
$env:PDF4ME_API_KEY = "your-api-key"
set PDF4ME_API_KEY=your-api-key
Unter Windows set dauert nur für die aktuelle CMD Sitzung. Verwenden. setx PDF4ME_API_KEY "your-api-key" Wenn der Wert einen Neustart übersteht, öffnen Sie ein neues Terminal, damit der Prozess ihn übernimmt.
Der Client verwendet den Schlüssel in seinem Konstruktor. Nichts, was er protokolliert, enthält den Schlüssel. API Eine Taste oder der Inhalt eines Dokuments sowie eine leere Taste oder eine Taste, die nur aus Leerzeichen besteht, lösen einen Fehler aus. ArgumentException bevor irgendeine Anfrage gesendet wird.
Schnellstart
Dieses Programm lädt hoch input.pdf zur Optimierung und speichert das Ergebnis als optimized.pdf:
using Pdf4me.Client;
var apiKey = Environment.GetEnvironmentVariable("PDF4ME_API_KEY")
?? throw new InvalidOperationException("Set PDF4ME_API_KEY first.");
using var client = new Pdf4meClient(apiKey);
var result = await client.OptimizeAsync(
File.ReadAllBytes("input.pdf"), docName: "input.pdf", profile: OptimizeProfile.Max);
File.WriteAllBytes("optimized.pdf", result);
Erstellen Sie einen Client und verwenden Sie ihn für jeden Anruf wieder. Dadurch wird eine gemeinsame Verbindung genutzt, sodass für jeden Anruf ein eigener Client aushandeln kann. TLS Jedes Mal. Entsorgen Sie es, wenn Sie es nicht mehr benötigen.
Was ist das PDF4me .NET SDK?
Es ist ein einzelnes NuGet Paket, Pdf4me.Client, das umhüllt PDF4me API v2 hinter einer Klasse. Jede Aktion ist eine asynchrone Methode. Pdf4meClient benannt nach seinem Endpunkt, also /api/v2/ConvertOcrPdf Ist ConvertOcrPdfAsyncDie ersten Parameter geben an, worauf die Aktion basiert, alle anderen sind optional, daher muss sie über ihren Namen übergeben werden:
var searchable = await client.ConvertOcrPdfAsync(
scan, language: "English", qualityType: QualityType.Draft);
var numbered = await client.AddPageNumberAsync(
pdf, pageNumberFormat: "Page # of {1}", alignX: AddPageNumberAlignX.Center);
Der Generated Der Baum innerhalb des Pakets wird erzeugt von Microsoft Kiota von PDF4me OpenAPI Beschreibung, weshalb die Options- und Ergebnismodelle mit der Beschreibung übereinstimmen. REST API und mit dem Python Und JavaScript Clients: die gleichen Aktionen, mit den gleichen Namen und Standardeinstellungen.
Worin unterscheidet sich eine C#-PDF-Bibliothek von einem API-Client?
Die meisten Ergebnisse für "c# pdf Bei sogenannten „Bibliotheken“ handelt es sich um selbstgehostete Rendering-Bibliotheken: Sie fügen das Paket hinzu, es erledigt die Arbeit in Ihrem Prozess, und Sie besitzen die Rendering-Engine. Pdf4me.Client ist die andere Form. Es sendet das Dokument an PDF4me und gibt die fertigen Bytes zurück. Der Austausch findet in beide Richtungen statt, daher ist es wichtig, dies klar zu kommunizieren:
| Lokale Bibliothek vs. gehostete Bibliothek API | Selbstgehostete Bibliothek | Pdf4me.Client |
|---|---|---|
| Wo Arbeit stattfindet | In Ihrem Prozess | Auf dem PDF4me Service |
| Netzwerk erforderlich | NEIN | Ja, jeder Anruf |
| Kostenstruktur | Paketlizenz, manchmal pro Entwickler oder pro Bereitstellung | MIT Kunde, API Guthaben für einen kostenlosen oder kostenpflichtigen Tarif |
| Funktioniert offline oder im Air-Gap-Modus | Ja | NEIN |
| Dokumente verlassen Ihre Infrastruktur | NEIN | Ja |
| OCR, AI Extraktion ZUGFeRD | Üblicherweise ein separates Produkt, sofern verfügbar | In denselben 106 Maßnahmen enthalten |
| Sie behalten bei | Die Engine, ihre Schriftarten und ihre CVES | Ein API Schlüssel |
Wählen Sie eine lokale Bibliothek, wenn die Dokumente Ihr Netzwerk nicht verlassen dürfen, wenn Sie offline arbeiten müssen oder wenn die Kosten pro Dokument bei Ihrem Volumen günstiger sind als ein Abonnement. Wählen Sie diesen Client, wenn Sie andernfalls mehrere Produkte integrieren müssten, um die Konvertierung abzudecken. OCR, Barcodes, elektronische Rechnungsstellung und AI Extraktion, und Sie möchten lieber gar keine Rendering-Engine ausliefern oder patchen.
Beachten Sie, dass die beiden Fragen, die die Autovervollständigung am häufigsten zu dieser Kategorie stellt, hier unterschiedlich beantwortet werden. Der Client selbst ist MIT lizenziert und Open SourceDie Kontrollkästchen „kostenlos“ und „Open Source“ sind also für den verlinkten Code aktiviert. Die zugrundeliegende Verarbeitung erfolgt über einen gehosteten Dienst, der über den kostenlosen Tarif hinaus kostenpflichtig ist.
Dokumente weitergeben und Ergebnisse lesen
Unterlagen Bereich DocumentSource: entweder die Bytes der Datei oder eine Zeichenkette API holt sich selbst, was ein pdf4meblobid://<id> Blob-Referenz oder ein https URLBeide Konvertierungen erfolgen implizit, daher können sie direkt übergeben werden. Ein String wird niemals als lokaler Dateipfad gelesen; lesen Sie daher die Datei und übergeben Sie deren Bytes.
byte[] fromBytes = await client.OptimizeAsync(File.ReadAllBytes("report.pdf"));
byte[] fromUrl = await client.OptimizeAsync("https://example.com/report.pdf");
byte[] fromBlob = await client.OptimizeAsync("pdf4meblobid://<id>");
Ergebnisse Es gibt zwei Möglichkeiten, wie ein Dokument zurückgegeben wird. Aktionen, die ein Dokument erzeugen, geben dieses zurück. byte[], Also File.WriteAllBytes nimmt es direkt. Aktionen, die mit Daten antworten, geben stattdessen ein typisiertes Modell zurück:
DocMetadata metadata = await client.GetPdfMetadataAsync(pdf);
Console.WriteLine($"{metadata.PageCount} pages, PDF {metadata.PdfVersion}");
ReadBarcodesRes scan = await client.ReadBarcodesAsync(pdf);
foreach (var barcode in scan.Barcodes ?? [])
Console.WriteLine($"page {barcode.Page}: {barcode.Value}");
Der AI Der Dokumentenparser bestimmt seine eigene Antwortform, sodass alles, was er zurückgibt, im Modell ankommt. AdditionalData:
var parsed = await client.AiDocumentParserAsync(File.ReadAllBytes("invoice.pdf"), "invoice parser");
foreach (var (field, value) in parsed.AdditionalData)
Console.WriteLine($"{field}: {value}");
Mehrere Dokumente Die Zusammenführung erfolgt in der angegebenen Reihenfolge, und einige Aktionen benötigen überhaupt kein Dokument, da die Eingabe Text oder ein A-Wert ist. URL:
byte[] merged = await client.MergeAsync([File.ReadAllBytes("a.pdf"), File.ReadAllBytes("b.pdf")]);
byte[] qrCode = await client.CreateBarcodeAsync("https://pdf4me.com", barcodeType: CreateBarcodeBarcodeType.QRCode);
byte[] webPage = await client.ConvertUrlToPdfAsync("https://example.com");
Optionen, die Objekte sind, wie zum Beispiel ConvertToPdfAction Und ImageActionund alle Ergebnismodelle leben in Pdf4me.Client.Generated.Models. Enums, die eine Aktion ausführt, haben kurze Namen in Pdf4me.Client (QualityType, AlignX, SplitAction), während die wenigen, deren generierter Name bereits kurz ist (DocType, ImageTypeExtract) werden direkt aus dem generierten Namensraum verwendet:
using Pdf4me.Client;
using Pdf4me.Client.Generated.Models;
var pages = await client.CreateImagesAsync(
pdf, new ImageAction { ImageExtension = ImageExtension.Png }, pageNrs: "1");
Jede Handlung erfordert auch drei optionale Argumente: extra, ein Wörterbuch mit zusätzlichen Anfragefeldern für Optionen API Die Beschreibung enthält noch keine Liste, sie werden daher zusammen mit den Aktionsdaten gesendet; maxWait, wodurch die Wartezeit für den in der Warteschlange befindlichen Auftrag dieses Aufrufs begrenzt wird; und cancellationToken, wodurch die Anfrage und jegliche Abfrage abgebrochen werden.
Clientkonfiguration
using var client = new Pdf4meClient(apiKey, new Pdf4meClientOptions
{
BaseUrl = Pdf4meClient.DefaultBaseUrl, // https://api.pdf4me.com
Timeout = TimeSpan.FromSeconds(100), // each HTTP request
MaxWait = TimeSpan.FromMinutes(5), // waiting for one queued job
Logger = loggerFactory.CreateLogger<Pdf4meClient>(),
});
In ASP.NET Core oder jede andere Anwendung, die Dependency Injection verwendet, registriert einen Client für die gesamte Anwendung und lässt den Logger aus der eigenen Logging-Konfiguration der Anwendung stammen:
builder.Services.AddSingleton(services => new Pdf4meClient(
builder.Configuration["Pdf4me:ApiKey"]!,
new Pdf4meClientOptions { Logger = services.GetRequiredService<ILogger<Pdf4meClient>>() }));
Geben Sie dem Kunden einen ILogger aus Microsoft.Extensions.Logging um jede Anfrage, Antwort, jeden in der Warteschlange befindlichen Job und jede Abfrage anzuzeigen Debug Ebene.
Wie geht man mit langen Jobs und OCR in C# um?
Jede Aktion wird als asynchroner Job übermittelt. Ein Aufruf liefert das fertige Ergebnis zurück, unabhängig davon, ob der Server sofort geantwortet oder die Arbeit in eine Warteschlange gestellt und in den vom Server vorgeschlagenen Intervallen abgefragt hat. Dies ist aus zwei Gründen wichtig: await kann minutenlang blockieren, und das, was die Wartezeit beendet, ist MaxWait, nicht TimeoutDie
Timeoutgilt für jede HTTP AnfrageDieMaxWaitgilt für der gesamte in der Warteschlange befindliche Auftrag, UndmaxWait:Eine Aktion überschreibt dies für diesen Aufruf.- Der OCR Aktionen
ConvertOcrPdfAsyncUndImageExtractTextAsyncWarten Sie mindestens 10 Minuten (DefaultOcrMaxWait), oder länger, wennMaxWaitist höher.
using var cancel = new CancellationTokenSource(TimeSpan.FromMinutes(20));
byte[] searchable = await client.ConvertOcrPdfAsync(
File.ReadAllBytes("scan.pdf"), language: "English",
maxWait: TimeSpan.FromMinutes(20), cancellationToken: cancel.Token);
Fehler
Eine abgelehnte oder fehlgeschlagene Anfrage löst einen Fehler aus. Pdf4meException, aus Pdf4me.Client.Generated.Models:
| Eigentum | Hält |
|---|---|
Message | Der API's Nachricht, ansonsten wird der Antworttext auf 500 Zeichen gekürzt, ansonsten HTTP Status |
ResponseStatusCode | Der HTTP Statuscode |
TraceId | Der APITrace-ID. Geben Sie diese bei der Meldung eines Problems an. |
ResponseBody | Der gesamte Antworttext, wie er gesendet wurde |
ResponseHeaders | Die Antwort-Header |
Ein Auftrag, der noch läuft, wenn die Wartezeit abläuft, wirft TimeoutExceptionUngültige Argumente, wie beispielsweise ein leeres Dokument, führen zu einer Ausnahme. ArgumentException bevor irgendeine Anfrage gesendet wird.
try
{
byte[] result = await client.OptimizeAsync(pdf);
}
catch (Pdf4meException e)
{
Console.Error.WriteLine($"PDF4me returned {e.ResponseStatusCode}: {e.Message} (trace {e.TraceId})");
}
catch (TimeoutException e)
{
Console.Error.WriteLine(e.Message);
}
Die 18 Abschnitte und alle 106 Aktionen
Die Aktionen sind nach den Abschnitten des PDF4me REST API ReferenzDie Methoden jedes Abschnitts befinden sich in einer eigenen Datei im Quellcode. Einige befinden sich in einem Abschnitt, den man aufgrund seines Namens vielleicht nicht vermuten würde: OCR befindet sich in der Suchfunktion. PDF/A Die Erstellung erfolgt in Convert, MergeV3Async ist in PDF statt Zusammenführen und Aufteilen.
| Abschnitt | Aktionen | Methoden zu Pdf4meClient |
|---|---|---|
| AI Dokumentenextraktion | 14 | AiDocumentParserAsync, ProcessBankChequeAsync, ProcessBankStatementAsync, ProcessContractAsync, ProcessCreditCardAsync, ProcessHealthCardAsync, ProcessInvoiceAsync, ProcessMarriageCertificateAsync, ProcessMortgageDocumentAsync, ProcessOrderAsync, ProcessPayStubAsync, ProcessReceiptAsync, ProcessShippingLabelAsync, ProcessTaxDocumentAsync |
| Barcode | 7 | AddBarcodeAsync, CreateBarcodeAsync, CreateSwissQrBillAsync, ReadBarcodesAsync, ReadSwissQrBillAsync, CreateEpcQrCodeAsync, ReadBarcodesFromImageAsync |
| Konvertieren | 13 | ConvertHtmlToPdfAsync, ConvertJsonToExcelAsync, ConvertMdToPdfAsync, ConvertPdfToExcelAsync, ConvertPdfToPowerpointAsync, ConvertPdfToWordAsync, ConvertToPdfAsync, ConvertUrlToPdfAsync, ConvertVisioAsync, ConvertWordToPdfFormAsync, CreatePdfAAsync, FlattenPdfAsync, LinearizePdfAsync |
| Bearbeiten | 7 | AddAttachmentToPdfAsync, AddHtmlHeaderFooterAsync, ImageStampAsync, AddMarginAsync, AddPageNumberAsync, StampAsync, SignPdfAsync |
| Excel | 1 | FindAndReplaceTextInExcelAsync |
| Extrakt | 8 | ClassifyDocumentAsync, ExtractAttachmentFromPdfAsync, ExtractPdfFormDataAsync, ExtractResourcesAsync, ExtractTableFromPdfAsync, ExtractTextByExpressionAsync, ExtractTextFromWordAsync, ParseDocumentAsync |
| Suche finden | 2 | FindAndReplaceAsync, ConvertOcrPdfAsync |
| Formulare | 2 | AddFormFieldAsync, FillPdfFormAsync |
| Erzeugen | 6 | EnableTrackingChangesInWordAsync, GenerateDocumentSingleAsync, GenerateDocumentMultipleAsync, GetTrackingChangesInWordAsync, ReplaceTextWithImageInWordAsync, GenerateDocumentSingleV2Async |
| Bild | 13 | AddImageWatermarkToImageAsync, AddTextWatermarkToImageAsync, CompressImageAsync, ConvertImageFormatAsync, CreateImagesAsync, CropImageAsync, FlipImageAsync, GetImageMetadataAsync, ImageExtractTextAsync, RemoveExifTagsFromImageAsync, ResizeImageAsync, RotateImageAsync, RotateImageByExifDataAsync |
| Zusammenführen & Aufteilen | 5 | MergeAsync, MergeOverlayAsync, SplitPdfAsync, SplitPdfByBarcodeAsync, SplitByTextAsync |
| Optimieren | 1 | OptimizeAsync |
| Organisieren | 5 | DeleteBlankPagesAsync, DeletePagesAsync, ExtractPagesAsync, RotateAsync, RotatePageAsync |
| 16 | MergeV3Async, GetPdfMetadataAsync, RepairPdfAsync, CreateHyperlinkAnnotationAsync, DeleteHyperlinkAnnotationAsync, DigitalSignPdfAsync, ExtractHyperlinkAnnotationAsync, GetDocumentByTextAsync, GetTextAndCoordinatesAsync, GetTextByPositionAsync, HighlightTextAsync, PrepareForPrintAsync, ReplaceTextWithImageAsync, ResizePdfAsync, SetPdfMetadataAsync, SignDocumentAsync | |
| PDF4me | 1 | UpdateHyperlinkAnnotationAsync |
| Sicherheit | 2 | ProtectAsync, UnlockAsync |
| Wort | 2 | DisableTrackingChangesInWordAsync, FindAndReplaceTextInWordAsync |
| ZUGFeRD | 1 | CreateZugferdInvoiceAsync |
Die Parameter und die Antwortform jeder Aktion finden Sie unter PDF4me REST API ReferenzOder bewegen Sie den Mauszeiger über die Methode in Ihrem Editor: Jede Methode enthält eine Dokumentationszusammenfassung, die mit ihrer Dokumentationsseite übereinstimmt.
Migration von Version 1.x
Version 2.0 ist eine Überarbeitung der PDF4me API Version 2 und nichts aus Version 1.x funktioniert mehr. Die Überschrift ändert sich:
- Es spricht mit API v2. Version 1.x bezeichnete die v1-Endpunkte wie beispielsweise
/Optimize/OptimizeByProfile; 2.0 Anrufe/api/v2/...Die - Die Einzelkunden und die regionalen Kunden gibt es nicht mehr.
Pdf4me.Instance.Init(token)UndPdf4me.Instance.OptimizeClienteins werdennew Pdf4meClient(apiKey)wobei jede Aktion als Methode dabei dient. - Der Namensraum ist
Pdf4me.Client, nichtPdf4meClientDie - Newtonsoft.Json ist keine Abhängigkeit mehrUnd die anfällige Version 12.0.3, die mit 1.x eingeführt wurde, gehört ebenfalls dazu.
- Fehler sind eine Art von Fehlern.
Pdf4meApiExceptionUndPdf4meBackendExceptionwerdenPdf4meExceptionDie - .NET Die Framework-Versionen 4.5.2 und 4.6.1 werden nicht mehr unterstützt. Das Minimum ist 4.6.2, durch .NET Standard 2.0.
| 1.x | 2.0 |
|---|---|
Pdf4me.Instance.Init(token) | using var client = new Pdf4meClient(apiKey); |
OptimizeClient.OptimizeByProfileAsync(file, profile) | client.OptimizeAsync(file, profile: ...) |
MergeClient.Merge2PdfsAsync(file1, file2) | client.MergeAsync([file1, file2]) |
SplitClient.SplitByPageNrAsync(file, pageNr) | client.SplitPdfAsync(file, splitActionNumber: pageNr) |
ExtractClient.ExtractPagesAsync(file, pageNrs) | client.ExtractPagesAsync(file, pageNumbers: pageNrs) |
ConvertClient.ConvertFileToPdfAsync(file, fileName) | client.ConvertToPdfAsync(file, docName: fileName) |
PdfAClient.CreatePdfAAsync(file, compliance) | client.CreatePdfAAsync(file, compliance: ...) |
PdfAClient.RotateDocumentAsync(file, rotate) | client.RotateAsync(file, rotationType: ...) |
PdfAClient.ProtectDocumentAsync(file, password, perms) | client.ProtectAsync(file, password: ..., pdfPermission: ...) |
PdfAClient.UnlockDocumentAsync(file, password) | client.UnlockAsync(file, password: ...) |
PdfAClient.RepairDocumentAsync(file) | client.RepairPdfAsync(file) |
ImageClient.CreateThumbnailAsync(file, width, pageNr, fmt) | client.CreateImagesAsync(file, new ImageAction { ... }, pageNrs: ...) |
Dein API Der Schlüssel bleibt gleich. Ersetzen using Pdf4meClient; mit using Pdf4me.Client;, hinzufügen using Pdf4me.Client.Generated.Models; Wo immer Sie Options- oder Ergebnismodelle oder Catch-Modelle verwenden Pdf4meExceptionArbeiten Sie dann die obige Tabelle durch.
Fehlerbehebung
TimeoutException auf einem großen Dokument. Der Job überdauerte die Wartezeit, was bedeutet, dass MaxWait und ist standardmäßig auf 5 Minuten eingestellt, nicht TimeoutSprechen Sie es im Gespräch an mit maxWait: TimeSpan.FromMinutes(20)oder für jeden Anruf auf Kundenseite.
Ein OCR Das Gespräch scheint seit zehn Minuten zu hängen. Das ist der dokumentierte Stand. ConvertOcrPdfAsync Und ImageExtractTextAsync Warten Sie mindestens DefaultOcrMaxWaitDas dauert 10 Minuten, also geben Sie ihnen ihre eigene Zeit. cancellationToken wenn der Anrufer früher aufgeben muss.
Ein 401 in Pdf4meException.ResponseStatusCodeDie Der Schlüssel ist vorhanden, wurde aber abgelehnt. Generieren Sie ihn neu. PDF4me Armaturenbrett und bestätigen Sie, dass die Variable für den Prozess sichtbar ist. Unter Windows set wird nicht über Sitzungen hinweg gespeichert, daher verwenden Sie setx und öffnen Sie ein neues Terminal.
ArgumentException bevor irgendetwas im Netzwerk ankommt. Eine lokale Prüfung ist fehlgeschlagen, meistens handelt es sich um ein leeres Dokument, was bedeutet, dass die gelesene Datei null Bytes zurückgab. Überprüfen Sie den Pfad und stellen Sie sicher, dass die Datei nicht von einem anderen Prozess gesperrt ist.
Sie haben einen Dateipfad angegeben, aber mit der Datei ist nichts passiert. Ein String-Argument wird als Blob-Referenz oder als ein https URLNiemals ein lokaler Pfad. Lesen Sie die Datei und übergeben Sie deren Bytes.
CreateThumbnailAsync wurde nicht gefunden. Methodennamen aus Version 1.x existieren in Version 2.0 nicht mehr. Miniaturansichten sind jetzt CreateImagesAsync mit einem ImageActionSiehe die Migrationstabelle.
Ein Kompilierungsfehler bei einem Modell- oder Enum-Typ. Option-Objekte und Ergebnismodelle befinden sich in Pdf4me.Client.Generated.Models, während die meisten Aufzählungen, die eine Aktion ausführt, in Pdf4me.Client. Importieren Sie beide.
Häufig gestellte Fragen
Ist das PDF4me .NET SDK kostenlos?
Der Pdf4me.Client Das Paket ist kostenlos und MIT Es ist lizenziert, daher fallen keine Installations- oder Weiterverbreitungskosten an. Das Paket ist ein Client für die PDF4me APIEs handelt sich um einen gehosteten Dienst mit einem kostenlosen Basistarif und darüber hinausgehenden kostenpflichtigen Tarifen, sodass die Dokumentenverarbeitung API Gutschriften auf Ihrem Konto. Der von Ihnen verwendete Code ist kostenlos; die Verarbeitungsgebühr wird nach Verbrauch berechnet.
Ist der PDF4me .NET-Client Open Source?
Ja. Der Kunde ist unter dem Namen veröffentlicht. MIT Lizenz und deren Quelle befinden sich unter github.com/pdf4me/pdf4me-clientapi-dotnetEine Einschränkung, falls Sie einen Beitrag leisten möchten: src/Pdf4me.Client/Generated/ wird hergestellt von Kiota von OpenAPI Die Beschreibung wird bei jeder Neugenerierung vollständig ersetzt. Erstellen Sie daher bitte ein Ticket für jegliche Fehler in diesem Verzeichnisbaum, anstatt diese zu beheben. Der Client und die zugehörigen Abschnittsdateien sind manuell erstellt und eignen sich daher für einen Pull Request.
Welche .NET-Versionen werden von Pdf4me.Client unterstützt?
Version 2.0.0 Ziele .NET 8, .NET 9 und .NET 10, plus .NET Standard 2.0, was bedeutet, dass es auch läuft auf .NET Framework 4.6.2 und höher. .NET Die Frameworks 4.5.2 und 4.6.1 wurden von Version 1.x unterstützt, werden aber von Version 2.0 nicht mehr unterstützt.
Wie konvertiere ich HTML in C# in PDF?
Anruf ConvertHtmlToPdfAsync mit dem HTML Bytes der Datei oder ConvertUrlToPdfAsync mit einem URL Zeichenkette und schreibe die zurückgegebene Zeichenkette. byte[] auf Festplatte:
byte[] fromHtml = await client.ConvertHtmlToPdfAsync(File.ReadAllBytes("page.html"));
byte[] fromUrl = await client.ConvertUrlToPdfAsync("https://example.com");
File.WriteAllBytes("page.pdf", fromUrl);
Das Rendering erfolgt auf dem Server, sodass keine Browser-Engine installiert, containerisiert oder gepatcht werden muss, was üblicherweise die Kosten für die Verwendung einer lokalen Bibliothek verursacht.
Wie kann ich eine PDF-Datei in C# lesen?
Das hängt davon ab, was mit „lesen“ gemeint ist. GetPdfMetadataAsync gibt ein zurück DocMetadata mit der Seitenzahl und PDF Version. ExtractTextByExpressionAsync, GetTextByPositionAsync Und GetTextAndCoordinatesAsync Text herausziehen, der letzte mit den Positionen. ExtractTableFromPdfAsync verarbeitet tabellarische Inhalte, und ConvertOcrPdfAsync erstellt einen Scan PDF Zuerst durchsuchbar. Diese Aktionen geben typisierte Modelle zurück, anstatt eines byte[]Die
Kann ich in C# ohne Bibliothek ein PDF erstellen?
Sie können schreiben PDF Die manuelle Byte-Formatierung ist für eine einzelne Seite Klartext durchaus machbar. Schnell wird es jedoch unpraktisch, da Schriftarten, Kodierungen, Komprimierung und die Querverweistabelle korrekt sein müssen und Leser unterschiedlich tolerant gegenüber Fehlern sind. In der Praxis hat man die Wahl zwischen einer eigenen, mitgelieferten und aktualisierten Rendering-Bibliothek und einer... API Ein Client wie dieser, bei dem das Rendering serverseitig erfolgt. PDF Die Spezifikation wird veröffentlicht als ISO 32000-2 Wenn Sie sich das Ausmaß vorstellen möchten.