C# / .NET API 레퍼런스
PdfOxide NuGet 패키지는 LibraryImport로 생성된 P/Invoke(전체 881개 선언)를 통해 Rust 코어를 래핑합니다. 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— 한 페이지 또는 문서 전체를 분류합니다(예: 스캔본 vs. 디지털).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— 회전 제어(절대값 vs. 상대값).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
새 문서를 위한 플루언트 빌더입니다. 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()
인라인 런
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()
DocumentBuilder.RegisterEmbeddedFont를 통해 임베딩할 TTF/OTF 폰트를 로드합니다.
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— 셀별 rowspan이 적용된 행을 추가합니다(maxRowspan >= 2필요).Flush— 버퍼링된 행을 네이티브 계층으로 플러시합니다.Build— 마무리하고 상위PageBuilder를 반환합니다.
OcrEngine
스캔된 PDF에 대한 OCR입니다(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— 추가로 제공된 PDF 바이트에 대해messageDigest를 검증합니다.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 전용): 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 }
지오메트리 (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}");
}
I/O(FileNotFoundException 등)와 인자 검증(ArgumentOutOfRangeException, ArgumentNullException)에는 표준 .NET 예외가 그대로 발생합니다.
스레드 안전성
PdfDocument의 읽기 전용 메서드는 스레드 안전합니다 — 단일 문서를 여러 스레드에서 공유하세요.DocumentEditor와 빌더는 쓰기에 대해 스레드 안전하지 않습니다. 쓰기를 하나의 스레드로 직렬화하거나 락으로 보호하세요.
동시성 가이드를 참고하세요.
비동기 패턴
I/O 바운드 메서드는 CancellationToken을 받는 *Async 변형(ExtractTextAsync, SaveAsync, SaveToStreamAsync, Page.*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
다음 단계
- 타입 & 열거형 — 모든 공유 타입과 열거형
- Page API 레퍼런스 — 바인딩 간 일관된 페이지 단위 순회
- C# 시작하기 — 튜토리얼