PDF Manipulation
Working Examples
PdfEngineOperations | WatermarkAndRotate | EncryptPdf | PdfMerge | PdfConvert
Standalone operations on existing PDF files using Gotenberg's PDF engine routes.
Standalone PDF Operations
Use PdfEngineBuilders factory methods to create typed builders for each operation.
Flatten
Merge form fields into static content:
using var result = await sharpClient.ExecutePdfEngineAsync(
PdfEngineBuilders.Flatten()
.WithPdfs(a => a.AddItem("form.pdf", pdfBytes)));
Rotate
Rotate pages by 90, 180, or 270 degrees:
// Rotate all pages
using var result = await sharpClient.ExecutePdfEngineAsync(
PdfEngineBuilders.Rotate(90)
.WithPdfs(a => a.AddItem("doc.pdf", pdfBytes)));
// Rotate specific pages
using var result = await sharpClient.ExecutePdfEngineAsync(
PdfEngineBuilders.Rotate(180, "1-3")
.WithPdfs(a => a.AddItem("doc.pdf", pdfBytes)));
Split
Split PDFs into chunks or extract page ranges:
// Split every 2 pages (returns ZIP)
using var result = await sharpClient.ExecutePdfEngineAsync(
PdfEngineBuilders.Split(SplitMode.Intervals, "2")
.WithPdfs(a => a.AddItem("doc.pdf", pdfBytes)));
// Extract pages and unify into one PDF
using var result = await sharpClient.ExecutePdfEngineAsync(
PdfEngineBuilders.Split(SplitMode.Pages, "1-3,5", unify: true)
.WithPdfs(a => a.AddItem("doc.pdf", pdfBytes)));
Encrypt
Password-protect PDFs:
using var result = await sharpClient.ExecutePdfEngineAsync(
PdfEngineBuilders.Encrypt(userPassword, ownerPassword)
.WithPdfs(a => a.AddItem("doc.pdf", pdfBytes)));
Write Metadata
using var result = await sharpClient.ExecutePdfEngineAsync(
PdfEngineBuilders.WriteMetadata(new Dictionary<string, object>
{
{ "Author", "John Doe" },
{ "Title", "My Document" }
}).WithPdfs(a => a.AddItem("doc.pdf", pdfBytes)));
Read Metadata
Returns JSON keyed by filename:
var json = await sharpClient.ReadPdfMetadataAsync(
PdfEngineBuilders.ReadMetadata()
.WithPdfs(a => a.AddItem("doc.pdf", pdfBytes)));
// json: { "doc.pdf": { "Author": "...", "Title": "...", ... } }
Cross-Cutting Options
These options are available on all request types (HTML, URL, Office, PDF conversion) via BuildRequestBase.
Watermark
Add a background overlay:
var builder = new HtmlRequestBuilder()
.AddDocument(doc => doc.SetBody(html))
.SetWatermarkOptions(w => w
.SetTextWatermark("CONFIDENTIAL") // text watermark on all pages
// Or target specific pages:
// .SetTextWatermark("DRAFT", "1-3")
);
Stamp
Add a foreground overlay (same API as watermark):
Rotation
Rotate pages inline during conversion:
builder.SetRotationOptions(r => r
.SetAngle(90) // 90, 180, or 270
.SetPages("2-3")); // optional: specific pages
Split
Split output during conversion:
PDF Format Conversion
Convert existing PDFs to PDF/A or apply transformations:
var builder = new PdfConversionBuilder()
.WithPdfs(b => b.AddItem("document.pdf", File.ReadAllBytes(pdfPath)))
.SetPdfOutputOptions(o => o
.SetPdfFormat(PdfFormat.A2b)
.SetPdfUa()
.SetFlatten());
var result = await sharpClient.ConvertPdfDocumentsAsync(builder);
PDF Encryption (Inline)
Encrypt PDFs generated from any conversion route:
var builder = new HtmlRequestBuilder()
.AddDocument(doc => doc.SetBody(html))
.SetPdfOutputOptions(o => o
.SetEncryption(userPassword: "reader", ownerPassword: "admin"));