Pdf4me.Client
2.0.0
dotnet add package Pdf4me.Client --version 2.0.0
NuGet\Install-Package Pdf4me.Client -Version 2.0.0
<PackageReference Include="Pdf4me.Client" Version="2.0.0" />
<PackageVersion Include="Pdf4me.Client" Version="2.0.0" />
<PackageReference Include="Pdf4me.Client" />
paket add Pdf4me.Client --version 2.0.0
#r "nuget: Pdf4me.Client, 2.0.0"
#:package Pdf4me.Client@2.0.0
#addin nuget:?package=Pdf4me.Client&version=2.0.0
#tool nuget:?package=Pdf4me.Client&version=2.0.0
Pdf4me.Client
.NET client for the PDF4me API. Convert, optimize, merge, split, stamp, OCR and extract content from documents with async methods and typed results.
Targets .NET 8, 9 and 10, and .NET Standard 2.0 for .NET Framework 4.6.2 and later. Requires a PDF4me API key.
Upgrading from 1.x? Version 2.0 is a rewrite on the PDF4me API v2 and nothing from 1.x keeps working. See Migrating from 1.x.
Installation
dotnet add package Pdf4me.Client
Quick start
Set your API key in the environment:
export PDF4ME_API_KEY="your-api-key"
This program uploads input.pdf for optimization and saves the result as
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);
Create one client and reuse it for every call: it keeps a pooled connection, so a client per call would set up TLS every time. Dispose it when you are done.
Using actions
Every action is an async method on Pdf4meClient, named after its endpoint:
/api/v2/ConvertOcrPdf is ConvertOcrPdfAsync. The first parameters are what
the action works on; everything else is optional, so pass it by name:
var searchable = await client.ConvertOcrPdfAsync(
scan, language: "English", qualityType: QualityType.Draft);
var numbered = await client.AddPageNumberAsync(
pdf, pageNumberFormat: "Page # of {1}", alignX: AddPageNumberAlignX.Center);
Documents are a DocumentSource: the file's bytes, or a string the API
fetches itself - a pdf4meblobid://<id> for an uploaded blob, or an https
URL. Both convert implicitly, so pass either straight in. A string is never
read as a local path; read the file and pass its bytes.
Results. Actions that produce a document return its byte[]. Actions that
answer with data return a typed model, such as DocMetadata from
GetPdfMetadataAsync or ReadBarcodesRes from ReadBarcodesAsync.
Options that are objects - ConvertToPdfAction, ImageAction, the
result models - are generated from the API description and live in
Pdf4me.Client.Generated.Models. Enums an action takes have short names in
Pdf4me.Client (QualityType, AlignX, SplitAction, ...); the few enums
whose generated name is already short (DocType, ImageTypeExtract, ...) are
used straight from Pdf4me.Client.Generated.Models.
using Pdf4me.Client;
using Pdf4me.Client.Generated.Models;
var pages = await client.CreateImagesAsync(
pdf, new ImageAction { ImageExtension = ImageExtension.Png }, pageNrs: "1");
Every action also takes:
extra- additional request fields, for options the API description does not list yet. They are sent as they are, next to the action's own.maxWait- how long to wait for this call's queued job; see below.cancellationToken- cancels the request and any polling.
Examples
Each snippet assumes using Pdf4me.Client;, using Pdf4me.Client.Generated.Models;
and a client created as in the quick start.
A document in, a document out - most actions:
byte[] pdf = File.ReadAllBytes("input.pdf");
byte[] compressed = await client.OptimizeAsync(pdf, profile: OptimizeProfile.Web);
byte[] protectedPdf = await client.ProtectAsync(pdf, password: "secret", pdfPermission: ProtectPdfPermission.All);
byte[] wordFile = await client.ConvertPdfToWordAsync(pdf, docName: "input.pdf");
A blob or URL instead of bytes - the API fetches it itself:
byte[] fromUrl = await client.OptimizeAsync("https://example.com/report.pdf");
byte[] fromBlob = await client.OptimizeAsync("pdf4meblobid://<id>");
Several documents - merged in the order given:
byte[] merged = await client.MergeAsync([File.ReadAllBytes("a.pdf"), File.ReadAllBytes("b.pdf")]);
No document - the input is text or a URL:
byte[] qrCode = await client.CreateBarcodeAsync("https://pdf4me.com", barcodeType: CreateBarcodeBarcodeType.QRCode);
byte[] webPage = await client.ConvertUrlToPdfAsync("https://example.com");
Data instead of a file - the result is a typed model:
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}");
Some answers have no fixed shape - the AI document parser decides its own - so
everything they return is in the model's AdditionalData:
var parsed = await client.AiDocumentParserAsync(File.ReadAllBytes("invoice.pdf"), "invoice parser");
foreach (var (field, value) in parsed.AdditionalData)
Console.WriteLine($"{field}: {value}");
Long jobs and cancelling - wait longer for one call, and stop it from your side:
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);
An option the API description does not list yet - send it through extra:
byte[] result = await client.OptimizeAsync(pdf, extra: new Dictionary<string, object> { ["someNewOption"] = true });
Client configuration and errors
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>(),
});
Every action is submitted as an asynchronous job: a call returns the finished
result whether the server answered at once or queued the work, polling it in
between as the server suggests. MaxWait limits that wait; pass maxWait: to
an action to change it for that call. The OCR actions (ConvertOcrPdfAsync,
ImageExtractTextAsync) wait at least 10 minutes (DefaultOcrMaxWait), or
longer if MaxWait is higher.
Errors. A refused or failed request throws Pdf4meException (in
Pdf4me.Client.Generated.Models) with:
| Property | Holds |
|---|---|
Message |
The API's message; else the response body, cut to 500 characters; else the HTTP status |
ResponseStatusCode |
The HTTP status code |
TraceId |
The API's trace id; quote it when reporting a problem |
ResponseBody |
The whole response body as sent |
ResponseHeaders |
The response headers |
A job still running when the wait runs out throws TimeoutException. Invalid
arguments, such as an empty document, throw ArgumentException before any
request is sent.
try
{
byte[] result = await client.OptimizeAsync(pdf);
}
catch (Pdf4meException e)
{
// The API refused or failed the request: say what it said.
Console.Error.WriteLine($"PDF4me returned {e.ResponseStatusCode}: {e.Message} (trace {e.TraceId})");
}
catch (TimeoutException e)
{
// The job was still running when maxWait ran out.
Console.Error.WriteLine(e.Message);
}
Logging. Give the client an ILogger (from
Microsoft.Extensions.Logging) to see every request, response, queued job and
poll at Debug. Nothing logged carries the API key or a document's content.
In a console app, with the Microsoft.Extensions.Logging.Console package:
using Microsoft.Extensions.Logging;
using var loggerFactory = LoggerFactory.Create(logging => logging
.AddSimpleConsole(console => console.SingleLine = true)
.SetMinimumLevel(LogLevel.Debug));
using var client = new Pdf4meClient(apiKey, new Pdf4meClientOptions
{
Logger = loggerFactory.CreateLogger<Pdf4meClient>(),
});
In ASP.NET Core, or any app using dependency injection, register one client for the whole app; the logger comes from the app's own logging setup:
builder.Services.AddSingleton(services => new Pdf4meClient(
builder.Configuration["Pdf4me:ApiKey"]!,
new Pdf4meClientOptions { Logger = services.GetRequiredService<ILogger<Pdf4meClient>>() }));
Available sections
The client provides 106 actions, grouped by the sections of the API documentation; each section's actions live in their own file.
| File | Docs section | Actions |
|---|---|---|
AiDocumentExtraction.cs |
AI Document Extraction | 14 |
Barcode.cs |
Barcode | 7 |
Convert.cs |
Convert | 13 |
Edit.cs |
Edit | 7 |
Excel.cs |
Excel | 1 |
Extract.cs |
Extract | 8 |
FindSearch.cs |
Find Search | 2 |
Forms.cs |
Forms | 2 |
Generate.cs |
Generate | 6 |
Image.cs |
Image | 13 |
MergeSplit.cs |
Merge & Split | 5 |
Optimize.cs |
Optimize | 1 |
Organize.cs |
Organize | 5 |
Pdf.cs |
16 | |
Pdf4me.cs |
PDF4me | 1 |
Security.cs |
Security | 2 |
Word.cs |
Word | 2 |
Zugferd.cs |
ZUGFeRD | 1 |
The same actions, with the same names and defaults, are in the Python and JavaScript clients.
All actions
Every action, by section. The method links to its documentation page where the docs have one; hover over a method in your editor for its parameters.
AI Document Extraction (14)
| Method | What it does |
|---|---|
AiDocumentParserAsync |
Parse a document with the PDF4me AI parser and return the extracted content as JSON. |
ProcessBankChequeAsync |
Extract structured data from a bank cheque. |
ProcessBankStatementAsync |
Extract structured data (account, balances, transactions) from a bank statement. |
ProcessContractAsync |
Extract structured data (parties, dates, terms) from a contract document. |
ProcessCreditCardAsync |
Extract structured data from a credit card image or statement. |
ProcessHealthCardAsync |
Extract structured data from a health insurance card. |
ProcessInvoiceAsync |
Extract structured invoice data (parties, line items, totals, tax) from an invoice document. |
ProcessMarriageCertificateAsync |
Extract structured data from a marriage certificate. |
ProcessMortgageDocumentAsync |
Extract structured data from a mortgage document. |
ProcessOrderAsync |
Extract structured purchase-order data from an order document. |
ProcessPayStubAsync |
Extract structured payroll data (employer, employee, earnings, deductions) from a pay stub. |
ProcessReceiptAsync |
Extract structured receipt data (merchant, line items, totals) from a receipt document. |
ProcessShippingLabelAsync |
Extract structured shipping-label data (carrier, tracking number, sender and recipient) from a label. |
ProcessTaxDocumentAsync |
Extract structured data from a tax document, optionally for a specific tax form model. |
Barcode (7)
| Method | What it does |
|---|---|
AddBarcodeAsync |
Add a barcode or QR code to your PDF document. |
CreateBarcodeAsync |
Create Barcode or QR code image from text. |
CreateSwissQrBillAsync |
Create a Swiss QR-bill payment part and add it to a PDF document, or return it as a standalone file. |
ReadBarcodesAsync |
Reads and extracts barcode or QR code data from PDF. |
ReadSwissQrBillAsync |
Read the Swiss QR-bill payment data contained in a PDF document. |
CreateEpcQrCodeAsync |
Create an EPC (SEPA credit transfer) QR code image from the given payment details. |
ReadBarcodesFromImageAsync |
Read the barcode or QR code contained in an image file. |
Convert (13)
| Method | What it does |
|---|---|
ConvertHtmlToPdfAsync |
Convert HTML pages to PDF. |
ConvertJsonToExcelAsync |
Convert Json To Excel. |
ConvertMdToPdfAsync |
Convert MD files to PDF. |
ConvertPdfToExcelAsync |
Convert PDFs with tabular data into Excel spreadsheets. |
ConvertPdfToPowerpointAsync |
Convert PDF into Powerpoint Presentation slides. |
ConvertPdfToWordAsync |
Convert PDF documents to high quality editable Word files. |
ConvertToPdfAsync |
Convert any type of office documents or images into PDFs. |
ConvertUrlToPdfAsync |
Convert your URL file to PDF. |
ConvertVisioAsync |
Convert Visio to any format. |
ConvertWordToPdfFormAsync |
Convert a Word file to PDF with form controls intact. |
CreatePdfAAsync |
Create PDFA compliant document. |
FlattenPdfAsync |
Use Flatten to remove all form controls from the PDF file. |
LinearizePdfAsync |
Linearize PDF. |
Edit (7)
| Method | What it does |
|---|---|
AddAttachmentToPdfAsync |
Attach files as attachment to the PDF file. |
AddHtmlHeaderFooterAsync |
Add HTML content as header or footer or both to PDF file. |
ImageStampAsync |
Add Image Watermark or Stamp to the PDF document. |
AddMarginAsync |
Add Margins to the PDF document. |
AddPageNumberAsync |
Add Page Numbers to PDF Pages. |
StampAsync |
Add a background Text Watermark to PDF document. |
SignPdfAsync |
Place a Sign to the PDF document. |
Excel (1)
| Method | What it does |
|---|---|
FindAndReplaceTextInExcelAsync |
Find and replace text in an Excel workbook, optionally restyling the replacement text. |
Extract (8)
| Method | What it does |
|---|---|
ClassifyDocumentAsync |
Classify or Identify documents based on the file content. |
ExtractAttachmentFromPdfAsync |
Extract attachments from the PDF file. |
ExtractPdfFormDataAsync |
Extract form data from the PDF. |
ExtractResourcesAsync |
Extract text and images from the PDF document. |
ExtractTableFromPdfAsync |
Extract Table as Json from PDF. |
ExtractTextByExpressionAsync |
Extracts text from PDF using regular expression. |
ExtractTextFromWordAsync |
Extract text from a Word file. |
ParseDocumentAsync |
Parse or read content from PDF based on preconfigured templates. |
Find Search (2)
| Method | What it does |
|---|---|
FindAndReplaceAsync |
Find and replace text in PDF. |
ConvertOcrPdfAsync |
Recognize text and create searchable PDF using OCR. |
Forms (2)
| Method | What it does |
|---|---|
AddFormFieldAsync |
Add a form field to a PDF document. |
FillPdfFormAsync |
Fill a PDF form using JSON Data and return a single PDF. |
Generate (6)
| Method | What it does |
|---|---|
EnableTrackingChangesInWordAsync |
Enable track changes in Word file. |
GenerateDocumentSingleAsync |
Generate Documents from DOCX, PDF or HTML template. |
GenerateDocumentMultipleAsync |
Generate Document from Docx/PDF/Html. |
GetTrackingChangesInWordAsync |
Get Tracked Changes In Word. |
ReplaceTextWithImageInWordAsync |
Replace matching text in a Word document with an image. |
GenerateDocumentSingleV2Async |
Generate a single document from a DOCX, PDF or HTML template and a JSON, XML or CSV data set. |
Image (13)
| Method | What it does |
|---|---|
AddImageWatermarkToImageAsync |
Draw a second image onto an image as a watermark, with control over position, rotation and opacity. |
AddTextWatermarkToImageAsync |
Draw a text watermark onto an image, with control over font, colour, position, rotation and opacity. |
CompressImageAsync |
Compresses an image based on image type and compression level. |
ConvertImageFormatAsync |
Changes file format of an image file. |
CreateImagesAsync |
Convert PDF pages into Images. |
CropImageAsync |
Crop an image through border or rectangle. |
FlipImageAsync |
Flip an image horizontally or vertically or both. |
GetImageMetadataAsync |
Read the technical metadata of an image file: format, dimensions, resolution, EXIF and XMP presence. |
ImageExtractTextAsync |
Run OCR on an image and return the recognised text. |
RemoveExifTagsFromImageAsync |
Removes EXIF tags from images. |
ResizeImageAsync |
Resize an image based on percentage or specific size. |
RotateImageAsync |
Rotate an image by a given angle, with an optional background colour and proportionate resizing. |
RotateImageByExifDataAsync |
Rotate an image so that it is displayed upright, using the orientation recorded in its EXIF data. |
Merge & Split (5)
| Method | What it does |
|---|---|
MergeAsync |
Merge multiple PDF documents into a single PDF document. |
MergeOverlayAsync |
Merge two PDF documents one over another as Overlay. |
SplitPdfAsync |
Split PDF by page number or recurring pages. |
SplitPdfByBarcodeAsync |
Split PDF documents using barcode contained in them. |
SplitByTextAsync |
Split PDF by recognizing specific text in them. |
Optimize (1)
| Method | What it does |
|---|---|
OptimizeAsync |
Optimize or Compress a PDF document. |
Organize (5)
| Method | What it does |
|---|---|
DeleteBlankPagesAsync |
Delete blank pages from the PDF document. |
DeletePagesAsync |
Delete unwanted pages from the PDF document. |
ExtractPagesAsync |
Extract required pages from a PDF document. |
RotateAsync |
Rotate all the pages of a PDF document. |
RotatePageAsync |
Rotate a specific page of a PDF document. |
PDF (16)
| Method | What it does |
|---|---|
MergeV3Async |
Merge multiple PDF documents into a single PDF document. |
GetPdfMetadataAsync |
Get PDF Metadata. |
RepairPdfAsync |
Recover broken PDFs partially or fully. |
CreateHyperlinkAnnotationAsync |
Turn matching text in a PDF document into a hyperlink annotation pointing at the given URL. |
DeleteHyperlinkAnnotationAsync |
Remove the hyperlink annotations from the selected pages of a PDF document. |
DigitalSignPdfAsync |
Add digital sign to the PDF document. |
ExtractHyperlinkAnnotationAsync |
List the hyperlink annotations contained in a PDF document, with the page they appear on. |
GetDocumentByTextAsync |
Split a PDF into documents by locating a given text, and return the matching documents. |
GetTextAndCoordinatesAsync |
Extract the text of a PDF document together with the position of each text fragment. textInfo carries the result as a JSON-encoded string. |
GetTextByPositionAsync |
Extract the text contained in a rectangular region (x1/y1 to x2/y2) of the PDF pages. |
HighlightTextAsync |
Highlight one or more pieces of text in a PDF document, each with its own highlight colour. |
PrepareForPrintAsync |
Impose the pages of a PDF document onto a print-ready sheet layout (n-up), using a print profile, paper size and a rows/columns grid. |
ReplaceTextWithImageAsync |
Replace text in the PDF file with an image. |
ResizePdfAsync |
Change the page size of a PDF document, optionally adding padding around the existing content. |
SetPdfMetadataAsync |
Set PDF metadata. |
SignDocumentAsync |
Send a document into the PDF4me e-signature flow, notifying the signer by e-mail. |
PDF4me (1)
| Method | What it does |
|---|---|
UpdateHyperlinkAnnotationAsync |
Update the display text and/or target URL of existing hyperlink annotations in a PDF document. |
Security (2)
| Method | What it does |
|---|---|
ProtectAsync |
Protect PDF document with custom password. |
UnlockAsync |
Removes password protection from a PDF file. |
Word (2)
| Method | What it does |
|---|---|
DisableTrackingChangesInWordAsync |
Disable track changes in Word file. |
FindAndReplaceTextInWordAsync |
Find and replace text in a Word document, optionally restyling the replacement text. |
ZUGFeRD (1)
| Method | What it does |
|---|---|
CreateZugferdInvoiceAsync |
Create a ZUGFeRD / Factur-X electronic invoice from structured invoice data or from an XML, JSON or CSV source, optionally embedding it into a PDF/A document. |
Migrating from 1.x
Version 2.0 replaces the whole library. Upgrading is not a drop-in change:
- It talks to API v2. 1.x called the v1 endpoints (
/Optimize/OptimizeByProfileand so on); 2.0 calls/api/v2/..., with the options the v2 documentation describes. - The singleton and the per-area clients are gone.
Pdf4me.Instance.Init(token)andPdf4me.Instance.OptimizeClientbecome onenew Pdf4meClient(apiKey)with every action as a method on it. - The namespace is
Pdf4me.Client, notPdf4meClient. - Newtonsoft.Json is no longer a dependency. The vulnerable 12.0.3 that 1.x pulled in goes with it.
- Errors are one type.
Pdf4meApiExceptionandPdf4meBackendExceptionbecomePdf4meException. - .NET Framework 4.5.2 and 4.6.1 are no longer supported. The minimum is 4.6.2, through .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: ...) |
Step by step:
- Update the package:
dotnet add package Pdf4me.Client --version 2.0.0. Your API key stays the same. - Replace
using Pdf4meClient;withusing Pdf4me.Client;, and addusing Pdf4me.Client.Generated.Models;where you use option or result models or catchPdf4meException. - Replace
Pdf4me.Instance.Init(token)with onePdf4meClientcreated at start-up and reused; dispose it on shutdown. - Change each call to the client method from the table, passing options by name.
- Change
catch (Pdf4meApiException)andcatch (Pdf4meBackendException)tocatch (Pdf4meException); the status code isResponseStatusCode.
Before, with 1.x:
using Pdf4meClient;
Pdf4me.Instance.Init(token);
try
{
byte[] optimized = await Pdf4me.Instance.OptimizeClient
.OptimizeByProfileAsync(File.ReadAllBytes("input.pdf"), PdfOptimizationProfile.Max);
byte[] merged = await Pdf4me.Instance.MergeClient
.Merge2PdfsAsync(File.ReadAllBytes("a.pdf"), File.ReadAllBytes("b.pdf"));
}
catch (Pdf4meBackendException e)
{
Console.Error.WriteLine(e.Message);
}
After, with 2.0:
using Pdf4me.Client;
using Pdf4me.Client.Generated.Models;
using var client = new Pdf4meClient(token);
try
{
byte[] optimized = await client.OptimizeAsync(File.ReadAllBytes("input.pdf"), profile: OptimizeProfile.Max);
byte[] merged = await client.MergeAsync([File.ReadAllBytes("a.pdf"), File.ReadAllBytes("b.pdf")]);
}
catch (Pdf4meException e)
{
Console.Error.WriteLine($"{e.ResponseStatusCode}: {e.Message}");
}
The table covers the common calls; the sections table above says where to find everything else, and each method's documentation summary matches its docs page.
Contributing
Issues and pull requests are welcome on GitHub.
src/Pdf4me.Client/Generated/ is generated by
Kiota from the PDF4me OpenAPI
description and is replaced whole on every regeneration, so please open an
issue for anything wrong in that tree rather than patching it. The client and
the section files around it are hand-written and are the right place for a
pull request.
dotnet build # the library for every target, and the tests
dotnet test # against a stub server: no API key, no network
dotnet pack -c Release src/Pdf4me.Client # the NuGet package, into src/Pdf4me.Client/bin/Release
The tests call every action once against a stub server and check what it sends, so a new action is covered as soon as it exists. They also check that each short-named enum still matches the generated enum it mirrors, which a regeneration can change.
Support
- API documentation: https://docs.pdf4me.com/pdf4me-api/
- Issues: https://github.com/pdf4me/pdf4me-clientapi-dotnet/issues
- Email: support-dev@pdf4me.com
Quote the TraceId from a Pdf4meException when reporting an API failure.
License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- Microsoft.Kiota.Bundle (>= 2.1.2)
-
net10.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- Microsoft.Kiota.Bundle (>= 2.1.2)
-
net8.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- Microsoft.Kiota.Bundle (>= 2.1.2)
-
net9.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- Microsoft.Kiota.Bundle (>= 2.1.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.0.0 | 68 | 10/13/2026 |
| 1.1.1 | 1,065 | 10/10/2024 |
| 1.1.0 | 1,012 | 5/14/2024 |
| 1.0.20 | 287 | 5/13/2024 |
| 1.0.19 | 285 | 5/13/2024 |
| 1.0.18 | 278 | 5/7/2024 |
| 1.0.17 | 238 | 5/2/2024 |
| 1.0.16 | 240 | 5/2/2024 |
| 1.0.15 | 281 | 4/19/2024 |
| 1.0.14 | 718 | 10/19/2023 |
| 1.0.13 | 604 | 10/19/2023 |
| 1.0.12 | 992 | 7/11/2023 |
| 1.0.11 | 1,292 | 11/12/2021 |
| 1.0.10 | 1,896 | 11/10/2021 |
| 1.0.9 | 1,059 | 11/9/2021 |
| 1.0.8 | 1,080 | 10/25/2021 |
| 1.0.7 | 1,143 | 9/10/2021 |
| 1.0.6 | 1,454 | 5/12/2020 |
| 1.0.5 | 1,683 | 3/20/2020 |
| 1.0.4 | 1,381 | 3/3/2020 |