Довідник API для C# / .NET
Пакет NuGet PdfOxide обгортає ядро на Rust через P/Invoke, згенерований LibraryImport (усі 881 оголошення). Готовий до публікації NativeAOT і безпечний для тримінгу (trim-safe). Цільові фреймворки: net8.0, net10.0.
dotnet add package PdfOxide
using PdfOxide.Core;
Для інших мов див. Python, Node.js, Golang або Rust.
Простори імен
using PdfOxide.Core; // PdfDocument, Pdf, DocumentEditor, DocumentBuilder, ...
using PdfOxide.Geometry; // Color, Point, Rect
using PdfOxide.Exceptions; // PdfException and typed subclasses
Усі типи з нативним бекендом реалізують IDisposable — використовуйте блоки using або оголошення using. Координати задаються в пунктах PDF від нижнього лівого кута, якщо не зазначено інше; колірні канали, передані як float, лежать у діапазоні 0.0–1.0.
PdfDocument
Дескриптор лише для читання / видобування. PdfDocument піддається перебору та індексуванню, повертаючи лінивих дескрипторів Page.
Open
static PdfDocument Open(string path)
static PdfDocument Open(Stream stream)
static PdfDocument Open(byte[] data)
static PdfDocument Open(ReadOnlySpan<byte> data)
static PdfDocument OpenWithPassword(string path, string password)
static PdfDocument OpenFromDocxBytes(byte[] data)
static PdfDocument OpenFromPptxBytes(byte[] data)
static PdfDocument OpenFromXlsxBytes(byte[] data)
Open(...)— відкриття зі шляху, потоку, масиву байтів або span.OpenWithPassword(path, password)— відкриття зашифрованого PDF одним кроком.OpenFromDocxBytes/OpenFromPptxBytes/OpenFromXlsxBytes— конвертація байтів Office і відкриття результату як PDF (потребує фічіoffice).
Властивості
(byte Major, byte Minor) Version { get; } // PDF version, e.g. (1, 7)
int PageCount { get; } // number of pages
bool HasStructureTree { get; } // Tagged PDF with a structure tree
bool IsEncrypted { get; } // document is encrypted
bool HasXfa { get; } // contains XFA forms
int SignatureCount { get; } // number of digital signatures
IReadOnlyList<Signature> Signatures { get; } // signature handles
IReadOnlyList<Page> Pages { get; } // lazy per-page handles
Page this[int pageIndex] { get; } // page at index
Автентифікація
bool Authenticate(string password)
Автентифікація зашифрованого документа після відкриття за допомогою користувацького пароля або пароля власника. Повертає true в разі успіху.
Видобування тексту
string ExtractText(int pageIndex)
string ExtractAllText()
Task<string> ExtractTextAsync(int pageIndex, CancellationToken cancellationToken = default)
string ExtractTextInRect(int pageIndex, float x, float y, float width, float height)
(string Text, float X, float Y, float W, float H)[] ExtractWords(int pageIndex)
(string Text, float X, float Y, float W, float H)[] ExtractWordsInRect(int pageIndex, float x, float y, float width, float height)
(string Text, float X, float Y, float W, float H)[] ExtractTextLines(int pageIndex)
(char Char, float X, float Y, float W, float H)[] ExtractChars(int pageIndex)
(float X, float Y, float W, float H, float StrokeWidth)[] ExtractPaths(int pageIndex)
Table[] ExtractTables(int pageIndex)
ExtractText/ExtractAllText— звичайний текст з однієї сторінки або всього документа.ExtractTextInRect— текст усередині прямокутної області.ExtractWords/ExtractWordsInRect— слова з обмежувальними рамками (за бажанням обрізані до області).ExtractTextLines— рядки з обмежувальними рамками.ExtractChars— позиції окремих гліфів.ExtractPaths— сегменти векторних контурів із товщиною обведення.ExtractTables— виявлені таблиці (див.Table).
Класифікація та автовидобування
string ExtractStructured(int page)
string ClassifyPage(int pageIndex)
string ClassifyDocument()
string ExtractTextAuto(int pageIndex)
string ExtractPageAuto(int pageIndex, string? optionsJson = null)
ExtractStructured— структурований JSON зі вмістом сторінки.ClassifyPage/ClassifyDocument— класифікація сторінки або всього документа (наприклад, сканований проти цифрового).ExtractTextAuto— автоматичний вибір найкращого шляху видобування тексту для сторінки (цифрового або OCR).ExtractPageAuto— автовидобування з необов’язковим JSON-блоком параметрів.
Конвертація
string ToMarkdown(int pageIndex)
string ToMarkdownAll()
string ToHtml(int pageIndex)
string ToHtmlAll()
string ToPlainText(int pageIndex)
string ToPlainTextAll()
byte[] ToDocxBytes()
byte[] ToPptxBytes()
byte[] ToXlsxBytes()
ToMarkdown/ToHtml/ToPlainText(+*All) — конвертація сторінки або всього документа.ToDocxBytes/ToPptxBytes/ToXlsxBytes— експорт у формати Office (потребує фічіoffice).
Очищення вмісту
int RemoveHeaders(float threshold = 0.8f)
int RemoveFooters(float threshold = 0.8f)
int RemoveArtifacts(float threshold = 0.8f)
Виявлення та видалення повторюваних колонтитулів, нижніх колонтитулів або артефактів сторінок. Повертає кількість видалених елементів. threshold — це коефіцієнт міжсторінкового повторення.
Пошук
(int Page, string Text, float X, float Y, float W, float H)[] SearchAll(string text, bool caseSensitive = false)
(int Page, string Text, float X, float Y, float W, float H)[] SearchPage(int pageIndex, string text, bool caseSensitive = false)
Пошук по всьому документу або по одній сторінці; повертає збіги з індексом сторінки та обмежувальною рамкою.
Структура та метадані
string GetPageLabels()
string GetXmpMetadata()
string GetOutline()
string PlanSplitByBookmarks(int level, string? namePattern = null)
string[] GetFonts(int pageIndex)
GetPageLabels— діапазони міток сторінок (JSON).GetXmpMetadata— метадані XMP (JSON / XML-пакет).GetOutline— дерево закладок / зміст (JSON).PlanSplitByBookmarks— обчислення плану розбиття на рівні закладок.GetFonts— назви шрифтів, що використовуються на сторінці.
Зображення
ExtractedImage[] ExtractImages(int pageIndex)
Видобування вбудованих зображень із метаданими та сирими байтами (див. ExtractedImage).
Форми
FormField[] GetFormFields()
Перебір полів AcroForm (див. FormField).
Рендеринг
byte[] RenderPage(int pageIndex, int format = 0)
byte[] RenderPage(int pageIndex, RenderOptions options)
byte[] RenderPageZoom(int pageIndex, float zoom, int format = 0)
byte[] RenderPageFit(int pageIndex, int fitWidth, int fitHeight, int format = 0)
byte[] RenderThumbnail(int pageIndex, int format = 0)
RgbaPixmap RenderToRgba(int pageIndex, int dpi = 150)
void SaveRenderedImage(int pageIndex, string filePath, int format = 0)
RenderPage— рендеринг із типовим DPI (format:0= PNG,1= JPEG) або з повнимиRenderOptions.RenderPageZoom— рендеринг із коефіцієнтом масштабування.RenderPageFit— рендеринг із масштабуванням до піксельної рамки.RenderThumbnail— рендеринг невеликої мініатюри.RenderToRgba— рендеринг у сиру піксельну карту RGBA (див.RgbaPixmap).SaveRenderedImage— рендеринг із прямим записом у файл.
Підписи
unsafe DocumentSecurityStore? GetDss()
bool HasDocumentTimestamp()
GetDss— читання Document Security Store (DSS), якщо він присутній.HasDocumentTimestamp— чи присутня позначка часу на рівні документа.
Перевірку окремих підписів див. у Signature.
Статична конфігурація
static void SetLogLevel(int level)
static int GetLogLevel()
static string PrefetchModels(params string[] languages)
static string ModelManifest()
static bool PrefetchAvailable()
static string GetActiveCryptoProvider()
static bool IsFipsCryptoAvailable()
static void UseFipsCryptoProvider()
static void SetCryptoPolicy(string spec)
static string CryptoPolicy()
static string[] CryptoInventory()
static string CryptoCbom()
SetLogLevel/GetLogLevel— керування деталізацією нативного логування.PrefetchModels/ModelManifest/PrefetchAvailable— керування завантаженням моделей OCR.GetActiveCryptoProvider/IsFipsCryptoAvailable/UseFipsCryptoProvider— вибір криптопровайдера (FIPS).SetCryptoPolicy/CryptoPolicy— отримання/встановлення активної криптополітики.CryptoInventory/CryptoCbom— перелік використання криптографії / формування CBOM.
Dispose
void Dispose()
Page
Лінивий дескриптор окремої сторінки з doc[i] або з ітерації. Усі члени делегують роботу батьківському документу.
int Index { get; }
string ExtractText();
Task<string> ExtractTextAsync(CancellationToken ct = default);
string ToMarkdown();
Task<string> ToMarkdownAsync(CancellationToken ct = default);
string ToHtml();
Task<string> ToHtmlAsync(CancellationToken ct = default);
string ToPlainText();
Task<string> ToPlainTextAsync(CancellationToken ct = default);
(string Text, float X, float Y, float W, float H)[] ExtractWords();
(string Text, float X, float Y, float W, float H)[] ExtractLines();
(char Char, float X, float Y, float W, float H)[] ExtractChars();
(float X, float Y, float W, float H, float StrokeWidth)[] ExtractPaths();
Table[] ExtractTables();
ExtractedImage[] ExtractImages();
string[] GetFonts();
(int Page, string Text, float X, float Y, float W, float H)[] Search(string text, bool caseSensitive = false);
byte[] Render(int format = 0);
byte[] RenderThumbnail(int format = 0);
Pdf — створення
Створення PDF із вихідного формату з подальшим збереженням.
static Pdf FromMarkdown(string markdown)
static Pdf FromHtml(string html)
static Pdf FromHtmlCss(string html, string css, byte[] fontBytes)
static unsafe Pdf FromHtmlCssWithFonts(string html, string css, (string Name, byte[] Bytes)[] fonts)
static Pdf FromText(string text)
static Pdf FromImage(string path)
static Pdf FromImageBytes(byte[] data)
int PageCount { get; }
void Save(string path)
byte[] SaveToBytes()
void SaveToStream(Stream stream)
Task SaveAsync(string path, CancellationToken cancellationToken = default)
Task SaveToStreamAsync(Stream stream, CancellationToken cancellationToken = default)
void Dispose()
FromMarkdown/FromHtml/FromText— створення з текстових форматів.FromHtmlCss/FromHtmlCssWithFonts— конвеєр HTML + CSS із вбудованими шрифтами.FromImage/FromImageBytes— односторінковий PDF із зображення.Save/SaveToBytes/SaveToStream(+ async) — збереження результату.
DocumentEditor
Змінюваний редактор для наявних PDF: метадані, сторінки, форми, редагування (redaction), шифрування.
Відкриття та збереження
static DocumentEditor Open(string path)
static DocumentEditor OpenFromBytes(byte[] data)
void Save(string path)
Task SaveAsync(string path, CancellationToken cancellationToken = default)
byte[] SaveToBytes()
byte[] SaveToBytesWithOptions(bool compress, bool garbageCollect, bool linearize)
void SaveEncrypted(string path, string userPassword, string ownerPassword)
byte[] SaveEncryptedToBytes(string userPassword, string ownerPassword)
unsafe byte[] ExtractPages(int[] pageIndices)
void Dispose()
Властивості
bool IsModified { get; }
string SourcePath { get; }
(byte Major, byte Minor) Version { get; }
int PageCount { get; }
string? Title { get; set; }
string? Author { get; set; }
string? Subject { get; set; }
string? Keywords { get; set; }
string? Producer { get; set; }
string? CreationDate { get; set; }
string[] FlattenWarnings { get; }
Операції зі сторінками
void MergeFrom(string sourcePath)
int MergeFromBytes(byte[] data)
void DeletePage(int pageIndex)
void MovePage(int fromIndex, int toIndex)
int GetPageRotation(int pageIndex)
void SetPageRotation(int pageIndex, int degrees)
void RotateAllPages(int degrees)
void RotatePageBy(int pageIndex, int degrees)
void CropMargins(float left, float right, float top, float bottom)
(double X, double Y, double Width, double Height) GetPageMediaBox(int pageIndex)
void SetPageMediaBox(int pageIndex, double x, double y, double width, double height)
(double X, double Y, double Width, double Height) GetPageCropBox(int pageIndex)
void SetPageCropBox(int pageIndex, double x, double y, double width, double height)
MergeFrom/MergeFromBytes— додавання сторінок з іншого PDF (MergeFromBytesповертає кількість об’єднаних сторінок).DeletePage/MovePage— видалення або зміна порядку сторінок.GetPageRotation/SetPageRotation/RotateAllPages/RotatePageBy— керування обертанням (абсолютне проти відносного).CropMargins— обрізання всіх полів сторінки.Get/SetPageMediaBoxтаGet/SetPageCropBox— геометричні рамки сторінки.
Стирання / зафарбовування
void EraseRegion(int pageIndex, float x, float y, float width, float height)
void EraseRegions(int pageIndex, double[][] rects)
void ClearEraseRegions(int pageIndex)
Анотації та форми
void SetFormFieldValue(string name, string value)
void FlattenForms()
void FlattenFormsOnPage(int pageIndex)
void FlattenAnnotations(int pageIndex)
void FlattenAllAnnotations()
bool IsPageMarkedForFlatten(int pageIndex)
void UnmarkPageForFlatten(int pageIndex)
Редагування (redaction)
void AddRedaction(int pageIndex, double x1, double y1, double x2, double y2, byte r, byte g, byte b)
int RedactionCount(int pageIndex)
void ApplyPageRedactions(int pageIndex)
void ApplyAllRedactions()
int ApplyRedactions(bool scrubMetadata = true, bool scrubText = true)
bool IsPageMarkedForRedaction(int pageIndex)
void UnmarkPageForRedaction(int pageIndex)
int SanitizeDocument()
AddRedaction— постановка в чергу прямокутника редагування із кольором заливки.ApplyPageRedactions/ApplyAllRedactions/ApplyRedactions— впалювання очікуваних редагувань (ApplyRedactionsза бажанням вичищає метадані / прихований текст).SanitizeDocument— видалення прихованих / непосиланих даних; повертає кількість вичищеного.
Інше
void EmbedFile(string name, byte[] data)
void ConvertToPdfA(PdfALevel level = PdfALevel.A2b)
EmbedFile— приєднання файлу до PDF.ConvertToPdfA— конвертація до рівня відповідності PDF/A.
Точні сигнатури
AddRedaction/ApplyRedactionsпід капотом використовують нативні аргументи у snake-case; показана тут поверхня C# — це публічний біндинг.
DocumentBuilder
Плавний (fluent) будівельник нових документів. DocumentBuilder.Create() → метадані → сторінка(и) → Build() / Save().
static DocumentBuilder Create()
DocumentBuilder Title(string title)
DocumentBuilder Author(string author)
DocumentBuilder Subject(string subject)
DocumentBuilder Keywords(string keywords)
DocumentBuilder Creator(string creator)
DocumentBuilder OnOpen(string script) // document-open JavaScript
DocumentBuilder TaggedPdfUa1() // emit a Tagged PDF/UA-1
DocumentBuilder Language(string lang)
DocumentBuilder RoleMap(string custom, string standard)
DocumentBuilder RegisterEmbeddedFont(string name, EmbeddedFont font)
PageBuilder A4Page()
PageBuilder LetterPage()
PageBuilder Page(float width, float height)
byte[] Build()
void Save(string path)
void SaveEncrypted(string path, string userPassword, string ownerPassword)
byte[] ToBytesEncrypted(string userPassword, string ownerPassword)
void Dispose()
PageBuilder
Плавна поверхня окремої сторінки, що повертається методами A4Page() / LetterPage() / Page(w, h). Кожен метод повертає будівельник для ланцюжкового виклику; Done() фіксує сторінку назад у батьківському об’єкті.
Текст і компонування
PageBuilder Font(string name, float size)
PageBuilder At(float x, float y)
PageBuilder Text(string text)
PageBuilder Heading(byte level, string text)
PageBuilder Paragraph(string text)
PageBuilder Space(float points)
PageBuilder HorizontalRule()
PageBuilder Newline()
PageBuilder Columns(uint columnCount, float gapPt, string text)
PageBuilder Footnote(string refMark, string noteText)
PageBuilder TextInRect(float x, float y, float w, float h, string text, Alignment align = Alignment.Left)
PageBuilder NewPageSameSize()
float Measure(string text)
float RemainingSpace()
Вбудовані фрагменти (inline runs)
PageBuilder Inline(string text)
PageBuilder InlineBold(string text)
PageBuilder InlineItalic(string text)
PageBuilder InlineColor(float r, float g, float b, string text)
Посилання та JavaScript
PageBuilder LinkUrl(string url)
PageBuilder LinkPage(int pageIndex)
PageBuilder LinkNamed(string destination)
PageBuilder LinkJavascript(string script)
PageBuilder OnOpen(string script)
PageBuilder OnClose(string script)
PageBuilder FieldKeystroke(string script)
PageBuilder FieldFormat(string script)
PageBuilder FieldValidate(string script)
PageBuilder FieldCalculate(string script)
Анотації
PageBuilder Highlight(float r, float g, float b)
PageBuilder Underline(float r, float g, float b)
PageBuilder Strikeout(float r, float g, float b)
PageBuilder Squiggly(float r, float g, float b)
PageBuilder StickyNote(string text)
PageBuilder StickyNoteAt(float x, float y, string text)
PageBuilder Watermark(string text)
PageBuilder WatermarkConfidential()
PageBuilder WatermarkDraft()
PageBuilder Stamp(string typeName)
PageBuilder FreeText(float x, float y, float w, float h, string text)
Віджети форм
PageBuilder TextField(string name, float x, float y, float w, float h, string? defaultValue = null)
PageBuilder Checkbox(string name, float x, float y, float w, float h, bool @checked = false)
unsafe PageBuilder ComboBox(string name, float x, float y, float w, float h, string[] options, string? selected = null)
unsafe PageBuilder RadioGroup(string name, (string Value, float X, float Y, float W, float H)[] buttons, string? selected = null)
PageBuilder PushButton(string name, float x, float y, float w, float h, string caption)
PageBuilder SignatureField(string name, float x, float y, float w, float h)
Графіка
PageBuilder Rect(float x, float y, float w, float h)
PageBuilder FilledRect(float x, float y, float w, float h, float r, float g, float b)
PageBuilder Line(float x1, float y1, float x2, float y2)
PageBuilder StrokeRect(float x, float y, float w, float h, float width = 1f, float r = 0f, float g = 0f, float b = 0f)
PageBuilder StrokeLine(float x1, float y1, float x2, float y2, float width = 1f, float r = 0f, float g = 0f, float b = 0f)
unsafe PageBuilder StrokeRectDashed(float x, float y, float w, float h, float[] dash, float phase = 0f, float width = 1f, float r = 0f, float g = 0f, float b = 0f)
unsafe PageBuilder StrokeLineDashed(float x1, float y1, float x2, float y2, float[] dash, float phase = 0f, float width = 1f, float r = 0f, float g = 0f, float b = 0f)
Зображення та штрихкоди
unsafe PageBuilder Image(byte[] imageBytes, float x, float y, float w, float h)
unsafe PageBuilder ImageWithAlt(byte[] imageBytes, float x, float y, float w, float h, string altText)
unsafe PageBuilder ImageArtifact(byte[] imageBytes, float x, float y, float w, float h)
PageBuilder Barcode1d(int barcodeType, string data, float x, float y, float w, float h)
PageBuilder BarcodeQr(string data, float x, float y, float size)
Таблиці
unsafe PageBuilder Table(TableSpec spec)
StreamingTable StreamingTable(IReadOnlyList<Column> columns, bool repeatHeader = true,
TableMode? mode = null, int maxRowspan = 1, int batchSize = 256)
DocumentBuilder Done()
void Dispose()
Table— рендеринг повністю матеріалізованої таблиці зTableSpec.StreamingTable— відкриття потокової таблиці для великих даних або даних рядок за рядком (див.StreamingTable).Done— фіксація сторінки та повернення батьківськогоDocumentBuilder.
EmbeddedFont
static EmbeddedFont FromFile(string path)
static EmbeddedFont FromBytes(byte[] data, string? name = null)
void Dispose()
Завантаження шрифту TTF/OTF для вбудовування через DocumentBuilder.RegisterEmbeddedFont.
StreamingTable
Будівельник таблиць рядок за рядком для великих наборів даних, що повертається методом PageBuilder.StreamingTable(...).
unsafe StreamingTable AddRow(params string[] cells)
unsafe StreamingTable AddRowSpan(params (string? Text, int Rowspan)[] cells)
void Flush()
PageBuilder Build()
void Dispose()
AddRow— додавання рядка комірок.AddRowSpan— додавання рядка з об’єднанням комірок по рядках для кожної комірки (потребуєmaxRowspan >= 2).Flush— скидання буферизованих рядків у нативний шар.Build— завершення та повернення батьківськогоPageBuilder.
OcrEngine
OCR над сканованими PDF (потребує фічі ocr). Моделі завантажуються зі шляхів детекції / розпізнавання / словника.
static OcrEngine Load(string detectionModelPath, string recognitionModelPath, string dictionaryPath)
static bool PageNeedsOcr(PdfDocument document, int pageIndex)
string ExtractText(PdfDocument document, int pageIndex)
void Dispose()
Load— завантаження рушія з файлів моделей.PageNeedsOcr— евристична перевірка, чи бракує сторінці цифрового текстового шару.ExtractText— запуск OCR над сторінкою.
Див. також PdfDocument.PrefetchModels, ModelManifest і PrefetchAvailable.
Цифрові підписи
Signature
Дескриптор окремого підпису з PdfDocument.Signatures.
string? SignerName { get; }
string? Reason { get; }
string? Location { get; }
Certificate GetCertificate()
bool Verify()
bool VerifyDetached(ReadOnlySpan<byte> pdfData)
void Dispose()
Verify— перевірка криптографічної цілісності підпису.VerifyDetached— додаткова перевіркаmessageDigestвідносно наданих байтів PDF.GetCertificate— сертифікат підписувача.
Certificate
static Certificate LoadFromPem(string certPem, string keyPem)
static Certificate Load(byte[] data, string? password = null)
unsafe byte[] SignPdfBytes(byte[] pdfData, string? reason = null, string? location = null)
unsafe byte[] SignPdfBytesPades(byte[] pdfData, PadesSignOptions options)
void Dispose()
LoadFromPem/Load— завантаження сертифіката для підпису (пара PEM або байти PKCS#12 з необов’язковим паролем).SignPdfBytes— підпис базовим підписом CMS.SignPdfBytesPades— підпис за профілем PAdES (див.PadesSignOptions).
Timestamp
static Timestamp Parse(byte[] data)
string Serial { get; }
string PolicyOid { get; }
string TsaName { get; }
bool Verify()
void Dispose()
TsaClient
static TsaClient Create(TsaClientOptions options)
Timestamp RequestTimestamp(byte[] data)
Timestamp RequestTimestampHash(byte[] hash, TimestampHashAlgorithm hashAlgorithm)
void Dispose()
TsaClientOptions (init-only): Url (обов’язковий), Username, Password, TimeoutSeconds (= 30), HashAlgorithm (= Sha256), UseNonce (= true), CertReq (= true). За фічею tsa-client.
Barcode
static Barcode GenerateQrCode(string data, int errorCorrection = 1, int sizePx = 300)
static Barcode Generate(string data, BarcodeFormat format = BarcodeFormat.Code128, int sizePx = 300)
byte[] ToPng(int sizePx = 300)
string ToSvg()
void Dispose()
BarcodeFormat: Code128, Code39, Ean13, Ean8, UpcA, Itf.
PdfValidator
Статичні перевірки відповідності. Кожна повертає PdfValidationResult.
static PdfValidationResult ValidatePdfA(PdfDocument document, PdfALevel level = PdfALevel.A2b)
static PdfValidationResult ValidatePdfX(PdfDocument document, PdfXLevel level = PdfXLevel.X4)
static PdfValidationResult ValidatePdfUA(PdfDocument document, PdfUaLevel level = PdfUaLevel.Ua1)
Типи даних
RgbaPixmap
public sealed record RgbaPixmap(ReadOnlyMemory<byte> Data, int Width, int Height);
Table
public sealed class Table
{
public int RowCount { get; }
public int ColCount { get; }
public bool HasHeader { get; }
}
ExtractedImage
public sealed class ExtractedImage
{
public int Width { get; }
public int Height { get; }
public string Format { get; }
public string Colorspace { get; }
public int BitsPerComponent { get; }
public byte[] Data { get; }
}
FormField
public sealed class FormField
{
public string Name { get; }
public string FieldType { get; }
public string Value { get; }
}
TableSpec
public sealed class TableSpec
{
public List<Column> Columns { get; set; }
public IList<IList<string>> Rows { get; set; }
public bool HasHeader { get; set; }
}
public sealed class Column
{
public string Header { get; set; }
public float Width { get; set; }
public Alignment Align { get; set; }
public Column(string header, float width, Alignment align = Alignment.Left);
}
public abstract class TableMode
{
public sealed class Fixed : TableMode { }
public sealed class Sample : TableMode
{
public int SampleRows { get; init; } // = 20
public float MinColWidthPt { get; init; } // = 0
public float MaxColWidthPt { get; init; } // = 9999
}
}
public enum Alignment { Left = 0, Center = 1, Right = 2 }
RenderOptions
public sealed class RenderOptions
{
public int Dpi { get; set; } // = 150
public RenderImageFormat Format { get; set; } // = Png
public bool TransparentBackground { get; set; }
public bool RenderAnnotations { get; set; } // = true
public int JpegQuality { get; set; } // = 85
}
public enum RenderImageFormat { Png = 0, Jpeg = 1 }
Типи PAdES / DSS
public enum PadesLevel { BB = 0, BT = 1, BLt = 2, BLta = 3 }
public sealed class PadesSignOptions
{
public PadesLevel Level { get; set; } // = BB
public string? TsaUrl { get; set; }
public string? Reason { get; set; }
public string? Location { get; set; }
public RevocationMaterial? Revocation { get; set; }
}
public sealed class RevocationMaterial
{
public IList<byte[]> Certificates { get; }
public IList<byte[]> Crls { get; }
public IList<byte[]> OcspResponses { get; }
}
public sealed class DocumentSecurityStore
{
public IReadOnlyList<byte[]> Certificates { get; }
public IReadOnlyList<byte[]> Crls { get; }
public IReadOnlyList<byte[]> OcspResponses { get; }
public int VriCount { get; }
}
public enum TimestampHashAlgorithm { Unknown = 0, Sha1 = 1, Sha256 = 2, Sha384 = 3, Sha512 = 4 }
Типи валідації
public sealed class PdfValidationResult
{
public bool IsCompliant { get; }
public IReadOnlyList<string> Errors { get; }
public IReadOnlyList<string> Warnings { get; }
}
public enum PdfALevel { A1b = 0, A1a = 1, A2b = 2, A2a = 3, A2u = 4, A3b = 5, A3a = 6, A3u = 7 }
public enum PdfXLevel { X1a = 0, X3 = 1, X4 = 2 }
public enum PdfUaLevel { Ua1 = 1, Ua2 = 2 }
Geometry (PdfOxide.Geometry)
public struct Color : IEquatable<Color>
{
public Color(byte red, byte green, byte blue);
public Color(byte red, byte green, byte blue, byte alpha);
public byte Red { get; }
public byte Green { get; }
public byte Blue { get; }
public byte Alpha { get; }
public static Color FromArgb(uint argb);
public uint ToArgb();
public string ToHex();
public static Color Black { get; }
public static Color White { get; }
public static Color Yellow { get; }
public static Color Cyan { get; }
public static Color Magenta { get; }
}
public struct Point : IEquatable<Point>
{
public Point(float x, float y);
public float X { get; }
public float Y { get; }
public float Magnitude { get; }
public float Distance(Point other);
// operators: + - * / == !=
}
public struct Rect : IEquatable<Rect>
{
public Rect(float x, float y, float width, float height);
public float X { get; }
public float Y { get; }
public float Width { get; }
public float Height { get; }
public bool Contains(Point point);
public bool Intersects(Rect other);
}
Винятки
Усі нативні збої спричиняють PdfException (у PdfOxide.Exceptions):
public class PdfException : Exception
{
public string Code { get; }
public static string GetErrorMessage(int errorCode);
public PdfException WithContext(string operation, params (string key, object? value)[] context);
}
Типізовані підкласи охоплюють конкретні категорії — наприклад: ParseException, InvalidStructure, CorruptedData, UnsupportedVersion, EncryptionException, InvalidPassword, DecryptionFailed, UnsupportedAlgorithm, DocumentClosed, OperationNotAllowed, UnsupportedFeatureException, FeatureNotImplemented, FormatNotSupported, ValidationException, InvalidParameter, MissingRequired, RenderingException, RenderFailed, UnsupportedRenderFormat, SearchException, InvalidPattern, SignatureException, RedactionException, AccessibilityException, OptimizationException, ComplianceException, ComplianceFailed, OcrException, RecognitionFailed, LanguageNotSupported, ImageProcessingFailed, InternalError та XfaException.
try
{
using var doc = PdfDocument.Open("file.pdf");
var text = doc.ExtractText(0);
}
catch (InvalidPassword)
{
// wrong / missing password
}
catch (UnsupportedFeatureException)
{
// feature not compiled into this build (e.g. ocr, office)
}
catch (PdfException e)
{
Console.Error.WriteLine($"{e.Code}: {e.Message}");
}
Стандартні винятки .NET, як і раніше, спричиняються для введення-виведення (FileNotFoundException тощо) і валідації аргументів (ArgumentOutOfRangeException, ArgumentNullException).
Потокобезпека
- Методи
PdfDocumentлише для читання є потокобезпечними — діліться одним документом між потоками. DocumentEditorі будівельники не є потокобезпечними для запису. Серіалізуйте записи в один потік або захищайте їх блокуванням.
Див. посібник з паралелізму.
Асинхронний шаблон
Методи, обмежені введенням-виведенням, надають *Async-варіанти, що приймають CancellationToken (ExtractTextAsync, SaveAsync, SaveToStreamAsync та сімейство Page.*Async). Див. посібник з async.
NativeAOT
Публікуйте з -p:PublishAot=true. Без додаткової конфігурації — увесь P/Invoke генерується з джерел, без рефлексії, без динамічного коду.
Повний приклад
using PdfOxide.Core;
// --- Creation ---
using (var builder = DocumentBuilder.Create()
.Title("Report").Author("PDF Oxide"))
{
builder.LetterPage()
.Heading(1, "Quarterly Report")
.Paragraph("Generated by PDF Oxide.")
.LinkUrl("https://oxide.fyi")
.Done();
builder.Save("report.pdf");
}
// --- Extraction ---
using var doc = PdfDocument.Open("report.pdf");
Console.WriteLine($"Pages: {doc.PageCount}");
foreach (var page in doc)
Console.WriteLine($"Page {page.Index}: {page.ExtractText().Length} chars");
// Search with LINQ
var hits = doc.SearchAll("Report", caseSensitive: false)
.GroupBy(r => r.Page);
// --- Editing ---
using (var editor = DocumentEditor.Open("report.pdf"))
{
editor.Title = "Updated Title";
editor.RotateAllPages(90);
editor.SetFormFieldValue("name", "Jane Doe");
editor.Save("report-updated.pdf");
}
// --- Rendering ---
byte[] png = doc.RenderPage(0, new RenderOptions { Dpi = 200, Format = RenderImageFormat.Png });
File.WriteAllBytes("page0.png", png);
Other Language Bindings
PDF Oxide надає нативні прив’язки для всіх основних екосистем: Rust, Python, Node.js, WASM, Golang, Java, PHP, Ruby, C++, Swift, Kotlin, Dart, R, Julia, Zig, Scala, Clojure, Objective-C та Elixir.
Наступні кроки
- Типи та переліки — усі спільні типи та переліки
- Довідник API сторінки — узгоджена ітерація по сторінках для всіх прив’язок
- Початок роботи з C# — посібник