Довідник API для Dart
PDF Oxide постачає ідіоматичні прив’язки для Dart/Flutter, побудовані на dart:ffi поверх нативного C ABI. Пакет завантажує наперед скомпільовану libpdf_oxide.{so,dylib,dll} під час виконання й відкриває повну поверхню API — видобування, редагування, створення, рендеринг, форми, OCR, штрихкоди, цифрові підписи та валідацію відповідності.
dart pub add pdf_oxide
import 'package:pdf_oxide/pdf_oxide.dart';
Нативні дескриптори звільняються автоматично через NativeFinalizer, але кожен клас, що володіє дескриптором, також надає ідемпотентний close(), який варто викликати після завершення (або скористайтеся addTearDown/try/finally). Коди помилок C ABI кидаються як PdfOxideError. Усі індекси сторінок відлічуються від нуля.
Для інших мов див. Довідник API для Python, Довідник API для Node.js, Довідник API для WASM, Довідник API для Rust та Типи й переліки.
PdfDocument
Основний клас для відкриття, видобування, рендерингу, валідації та інспектування PDF.
Конструктори / фабрики
static PdfDocument open(String path)
static PdfDocument openFromBytes(Uint8List data)
static PdfDocument openWithPassword(String path, String password)
static PdfDocument openFromDocxBytes(Uint8List data)
static PdfDocument openFromPptxBytes(Uint8List data)
static PdfDocument openFromXlsxBytes(Uint8List data)
open— відкрити PDF за шляхом у файловій системі.openFromBytes— відкрити PDF із байтів у пам’яті.openWithPassword— відкрити захищений паролем PDF.openFromDocxBytes/openFromPptxBytes/openFromXlsxBytes— відкрити документ безпосередньо з байтів DOCX/PPTX/XLSX.
Інформація про документ
int get pageCount
PdfVersion get version
bool isEncrypted()
bool hasStructureTree()
bool authenticate(String password)
pageCount— кількість сторінок.version— версія PDF якPdfVersion(major, minor).isEncrypted— чи зашифрований документ.hasStructureTree— чи це тегований PDF із деревом структури.authenticate— автентифікувати зашифрований PDF; повертаєtrueза успіху таfalseза неправильного пароля.
Текст і конвертація
String extractText(int page)
String toPlainText(int page)
String toMarkdown(int page)
String toHtml(int page)
String extractStructuredJson(int page)
String toMarkdownAll()
String toHtmlAll()
String toPlainTextAll()
extractText— звичайний видобутий текст для однієї сторінки.toPlainText/toMarkdown/toHtml— конвертувати одну сторінку у звичайний текст, Markdown або HTML.extractStructuredJson— структурований вміст сторінки (спани, розкладка), серіалізований у JSON.toMarkdownAll/toHtmlAll/toPlainTextAll— конвертувати весь документ.
Видобування елементів
List<Char> extractChars(int page)
List<Word> extractWords(int page)
List<TextLine> extractTextLines(int page)
List<Table> extractTables(int page)
List<Font> embeddedFonts(int page)
String embeddedFontsJson(int page)
List<double> embeddedFontSizes(int page)
List<Image> embeddedImages(int page)
List<Annotation> pageAnnotations(int page)
List<AnnotationDetails> pageAnnotationDetails(int page)
String annotationsToJson(int page)
List<Path> extractPaths(int page)
extractChars/extractWords/extractTextLines— геометрія на рівні гліфів, слів і рядків.extractTables— виявлені таблиці з лінивим читанням комірок (Table.cell).embeddedFonts/embeddedFontsJson/embeddedFontSizes— метадані вбудованих шрифтів сторінки.embeddedImages— вбудовані зображення з сирими байтами.pageAnnotations— анотації на сторінці.pageAnnotationDetails— розширені атрибути анотацій (прапорці, дати, колір, URI посилань, назви іконок, опорні точки).annotationsToJson— анотації, серіалізовані у JSON.extractPaths— елементи векторних контурів (графіки).
Видобування в межах прямокутника
String extractTextInRect(int page, double x, double y, double w, double h)
List<Word> extractWordsInRect(int page, double x, double y, double w, double h)
List<TextLine> extractLinesInRect(int page, double x, double y, double w, double h)
List<Table> extractTablesInRect(int page, double x, double y, double w, double h)
List<Image> extractImagesInRect(int page, double x, double y, double w, double h)
Видобути текст, слова, рядки, таблиці чи зображення, обмежені прямокутником (у точках користувацького простору PDF) на сторінці.
Автоматичне видобування та класифікація
String extractTextAuto(int page)
String extractPageAuto(int page, [String optionsJson = ''])
String extractAllText()
String classifyPage(int page)
String classifyDocument()
extractTextAuto— нативне видобування плюс OCR зображень за потреби для сторінки.extractPageAuto— автоматичне видобування однієї сторінки з необов’язковими опціями у JSON.extractAllText— текст усіх сторінок в одному рядку.classifyPage/classifyDocument— класифікація сторінки/документа у JSON (сканований, цифровий, гібридний тощо).
Пошук
List<SearchResult> search(int page, String term, bool caseSensitive)
List<SearchResult> searchAll(String term, bool caseSensitive)
String searchResultsToJson(int page, String term, bool caseSensitive)
Пошук на одній сторінці, по всьому документу або серіалізація знахідок на сторінці у JSON.
Рендеринг
RenderedImage renderPage(int pageIndex, [int format = 0])
RenderedImage renderPageZoom(int pageIndex, double zoom, [int format = 0])
RenderedImage renderPageThumbnail(int pageIndex, int size, [int format = 0])
RenderedImage renderPageWithOptions(int pageIndex, {int dpi = 150, int format = 0, double backgroundR = 1.0, double backgroundG = 1.0, double backgroundB = 1.0, double backgroundA = 1.0, bool transparentBackground = false, bool renderAnnotations = true, int jpegQuality = 90})
RenderedImage renderPageWithOptionsEx(int pageIndex, {int dpi = 150, int format = 0, double backgroundR = 1.0, double backgroundG = 1.0, double backgroundB = 1.0, double backgroundA = 1.0, bool transparentBackground = false, bool renderAnnotations = true, int jpegQuality = 90, List<String> excludedLayers = const []})
RenderedImage renderPageRegion(int pageIndex, double cropX, double cropY, double cropWidth, double cropHeight, [int format = 0])
RenderedImage renderPageFit(int pageIndex, int width, int height, [int format = 0])
RenderedImage renderPageRaw(int pageIndex, [int dpi = 150])
int estimateRenderTime(int pageIndex)
renderPage— відрендерити сторінку уRenderedImage(format0=PNG, 1=JPEG).renderPageZoom— відрендерити з коефіцієнтом масштабування.renderPageThumbnail— відрендерити мініатюру, що вписується вsizeпікселів.renderPageWithOptions— повна поверхня RenderOptions (dpi, тло, анотації, якість JPEG).renderPageWithOptionsEx— додає приховування іменованих шарів OCG черезexcludedLayers.renderPageRegion— відрендерити прямокутну ділянку.renderPageFit— відрендерити так, щоб вписати уwidth×heightзі збереженням співвідношення сторін.renderPageRaw— відрендерити у сирий буфер premultiplied RGBA8888 з роздільністюdpi.estimateRenderTime— оцінити час рендерингу (мс) для сторінки.
Геометрія сторінки та елементи
double pageWidth(int pageIndex)
double pageHeight(int pageIndex)
int pageRotation(int pageIndex)
ElementList pageElements(int pageIndex)
Page page(int index)
pageWidth/pageHeight— розміри сторінки в точках PDF.pageRotation— поворот сторінки у градусах.pageElements— елементи розкладки сторінки якElementList.page— полегшене поданняPageдля ланцюгового видобування по сторінках.
OCR
bool pageNeedsOcr(int pageIndex)
String ocrExtractText(int pageIndex, [OcrEngine? engine])
pageNeedsOcr— чи сторінка сканована/гібридна й потребує OCR.ocrExtractText— видобути текст через OCR;engineможе бути null лише для нативного видобування.
Валідація відповідності та конвертація
PdfAResults validatePdfA(int level)
UaResults validatePdfUa(int level)
PdfXResults validatePdfX(int level)
bool convertToPdfA(int level)
validatePdfA/validatePdfUa/validatePdfX— перевірити на відповідність PDF/A, доступності PDF/UA або PDF/X.convertToPdfA— конвертувати цей документ на місці у PDF/A на заданому рівні.
Експорт в Office
Uint8List toDocx()
Uint8List toPptx()
Uint8List toXlsx()
Uint8List sourceBytes()
toDocx/toPptx/toXlsx— експортувати документ у байти DOCX/PPTX/XLSX.sourceBytes— оригінальні сирі байти, з яких було завантажено документ.
Видалення колонтитулів і артефактів
int eraseHeader(int page)
int eraseFooter(int page)
int eraseArtifacts(int page)
int removeHeaders([double threshold = 0.5])
int removeFooters([double threshold = 0.5])
int removeArtifacts([double threshold = 0.5])
eraseHeader/eraseFooter/eraseArtifacts— стерти верхній колонтитул, нижній колонтитул або позначені артефакти на сторінці; повертає кількість стертих елементів.removeHeaders/removeFooters/removeArtifacts— видалити повторюваний «службовий» вміст по всьому документу за порогом виявлення.
Форми
List<FormField> getFormFields()
Uint8List exportFormDataToBytes([int formatType = 0])
void importFormData(String dataPath)
bool importFormFromFile(String filename)
getFormFields— інтерактивні поля AcroForm.exportFormDataToBytes— експортувати дані форми (formatType0=FDF, 1=XFDF, 2=JSON).importFormData— імпортувати дані форми зі шляху до файлу FDF/XFDF/JSON.importFormFromFile— імпортувати значення полів із файлу; повертає, чи щось було імпортовано.
Структура та метадані документа
String getOutline()
String getPageLabels()
String getXmpMetadata()
bool hasXfa()
String planSplitByBookmarks([String optionsJson = ''])
getOutline— структура документа (закладки) у вигляді JSON.getPageLabels— діапазони міток сторінок у вигляді JSON.getXmpMetadata— метадані XMP (XML), якщо присутні.hasXfa— чи містить документ форму XFA.planSplitByBookmarks— створити план поділу за закладками у вигляді JSON.
Цифрові підписи
int sign(Certificate certificate, {String reason = '', String location = ''})
int getSignatureCount()
SignatureInfo getSignature(int index)
int verifyAllSignatures()
bool hasTimestamp()
Dss getDss()
sign— цифрово підписати документ за допомогоюCertificate.getSignatureCount— кількість наявних підписів.getSignature—SignatureInfoза індексом.verifyAllSignatures— перевірити всі підписи (агрегований статус).hasTimestamp— чи несе якийсь підпис позначку часу.getDss— сховище безпеки документа (Dss).
Життєвий цикл
void close()
Звільнити нативний дескриптор негайно (ідемпотентно).
Page
Полегшене подання однієї сторінки (з нумерацією від нуля), яке повертає PdfDocument.page(index). Тримає сильне посилання на свій документ і делегує його методам для окремих сторінок.
| Член | Тип | Опис |
|---|---|---|
index |
int |
Індекс сторінки з нуля |
String text()
String markdown()
String html()
String plainText()
Видобутий текст, Markdown, HTML або звичайний текст для цієї сторінки.
PDF, створений (або завантажений) для простого процесу побудови/збереження.
Фабрики
static Pdf fromMarkdown(String md)
static Pdf fromHtml(String html)
static Pdf fromText(String text)
static Pdf fromImage(String path)
static Pdf fromImageBytes(Uint8List data)
static Pdf fromHtmlCss(String html, String css, [Uint8List? fontBytes])
static Pdf fromHtmlCssWithFonts(String html, String css, List<String> families, List<Uint8List> fonts)
fromMarkdown/fromHtml/fromText— створити PDF із Markdown, HTML або звичайного тексту.fromImage/fromImageBytes— обгорнути файл зображення або байти зображення в односторінковий PDF.fromHtmlCss— побудувати з HTML + CSS з одним необов’язковим вбудованим шрифтом.fromHtmlCssWithFonts— побудувати з HTML + CSS із паралельним каскадом шрифтівfamilies/fonts.
Методи
int get pageCount
void save(String path)
Uint8List toBytes()
void close()
pageCount— кількість сторінок через точку входуpdf_get_page_count.save— зберегти у файл.toBytes— вміст PDF у вигляді байтів.close— звільнити нативний дескриптор (ідемпотентно).
DocumentEditor
Відкритий PDF для редагування на місці: операції зі сторінками, метадані, форми, редагування (редакція), сплощення, злиття та зашифровані збереження.
Конструктори
static DocumentEditor open(String path)
static DocumentEditor openFromBytes(Uint8List data)
Інформація та метадані документа
int get pageCount
PdfVersion get version
bool isModified()
String getSourcePath()
String getProducer()
void setProducer(String value)
String getCreationDate()
void setCreationDate(String dateStr)
isModified— чи є незбережені зміни.getSourcePath— шлях, з якого було відкрито редактор.getProducer/setProducer— поле метаданих Producer.getCreationDate/setCreationDate— поле метаданих CreationDate.
Операції зі сторінками
void deletePage(int pageIndex)
void movePage(int from, int to)
void rotatePageBy(int page, int degrees)
void rotateAllPages(int degrees)
void setPageRotation(int page, int degrees)
int getPageRotation(int page)
void cropMargins(double left, double right, double top, double bottom)
Bbox getPageCropBox(int page)
void setPageCropBox(int page, Bbox box)
Bbox getPageMediaBox(int page)
void setPageMediaBox(int page, Bbox box)
deletePage/movePage— видалити або переупорядкувати сторінки.rotatePageBy— додатковий поворот;rotateAllPages— відносний поворот усіх сторінок;setPageRotation— абсолютний;getPageRotation— поточний.cropMargins— обрізати поля на кожній сторінці.getPageCropBox/setPageCropBox/getPageMediaBox/setPageMediaBox— читати/записувати CropBox/MediaBox.
Редакція та стирання
void applyAllRedactions()
void applyPageRedactions(int page)
void eraseRegion(int page, double x, double y, double w, double h)
void eraseRegions(int page, List<List<double>> rects)
void clearEraseRegions(int page)
bool isPageMarkedForRedaction(int page)
void unmarkPageForRedaction(int page)
void redactionAdd(int page, double x1, double y1, double x2, double y2, {double r = 0.0, double g = 0.0, double b = 0.0})
int redactionCount(int page)
int redactionApply({bool scrubMetadata = false, double r = 0.0, double g = 0.0, double b = 0.0})
int redactionScrubMetadata()
applyAllRedactions/applyPageRedactions— застосувати поставлені в чергу редакції.eraseRegion/eraseRegions/clearEraseRegions— стерти один, багато або очистити очікувані прямокутники стирання.isPageMarkedForRedaction/unmarkPageForRedaction— запитати/зняти позначку редакції зі сторінки.redactionAdd— поставити в чергу прямокутник редакції з кольором заливки накладки.redactionCount— кількість поставлених у чергу ділянок редакції для сторінки.redactionApply— деструктивно застосувати всі редакції; повертає кількість видалених гліфів.redactionScrubMetadata— видалити метадані / JavaScript / вбудовані файли; повертає кількість видалених конструкцій.
Сплощення
void flattenForms()
void flattenFormsOnPage(int pageIndex)
void flattenAnnotations(int page)
void flattenAllAnnotations()
int flattenWarningsCount()
String flattenWarning(int index)
bool isPageMarkedForFlatten(int page)
void unmarkPageForFlatten(int page)
flattenForms/flattenFormsOnPage— сплощити всі поля форми або поля на одній сторінці.flattenAnnotations/flattenAllAnnotations— сплощити анотації на сторінці або по всьому документу.flattenWarningsCount/flattenWarning— попередження від останнього збереження зі сплощенням.isPageMarkedForFlatten/unmarkPageForFlatten— запитати/зняти позначку сплощення зі сторінки.
Форми
void setFormFieldValue(String name, String value)
void importFdfBytes(Uint8List data)
void importXfdfBytes(Uint8List data)
setFormFieldValue— задати значення поля за назвою.importFdfBytes/importXfdfBytes— імпортувати значення AcroForm із байтів FDF/XFDF.
Злиття / конвертація / вбудовування / видобування
void mergeFrom(String sourcePath)
void mergeFromBytes(Uint8List data)
void convertToPdfA(int level)
void embedFile(String name, Uint8List data)
Uint8List extractPagesToBytes(List<int> pages)
mergeFrom/mergeFromBytes— додати сторінки з PDF на диску або в пам’яті.convertToPdfA— конвертувати на місці у PDF/A (рівень 0=A1b … 7=A3u).embedFile— приєднати іменований файл.extractPagesToBytes— видобути підмножину сторінок у новий PDF у пам’яті.
Штрихкоди
void addBarcodeToPage(int pageIndex, BarcodeImage barcode, double x, double y, double width, double height)
Нанести згенерований BarcodeImage на сторінку в заданому прямокутнику.
Збереження
void save(String path)
Uint8List saveToBytes()
Uint8List saveToBytesWithOptions(bool compress, bool garbageCollect, bool linearize)
void saveEncrypted(String path, String userPassword, String ownerPassword)
Uint8List saveEncryptedToBytes(String userPassword, String ownerPassword)
void close()
save/saveToBytes— зберегти у файл або буфер байтів.saveToBytesWithOptions— зберегти з явними опціями стиснення / збирання сміття / лінеаризації.saveEncrypted/saveEncryptedToBytes— зашифроване AES-256 збереження у файл або байти.close— звільнити нативний дескриптор (ідемпотентно).
DocumentBuilder
Плавний (fluent) будівник для складання абсолютно нового документа PDF.
Створення
static DocumentBuilder create()
Метадані (fluent)
DocumentBuilder setTitle(String value)
DocumentBuilder setAuthor(String value)
DocumentBuilder setSubject(String value)
DocumentBuilder setKeywords(String value)
DocumentBuilder setCreator(String value)
DocumentBuilder onOpen(String script)
DocumentBuilder language(String lang)
DocumentBuilder taggedPdfUa1()
DocumentBuilder roleMap(String custom, String standard)
DocumentBuilder registerEmbeddedFont(String name, EmbeddedFont font)
setTitle/setAuthor/setSubject/setKeywords/setCreator— метадані документа.onOpen— JavaScript, що виконується під час відкриття документа.language— мова документа.taggedPdfUa1— увімкнути тегований режим PDF/UA-1.roleMap— зіставити власний тип структури зі стандартним типом PDF.registerEmbeddedFont— зареєструвати шрифт під назвою (за успіху споживаєEmbeddedFont).
Сторінки
PageBuilder a4Page()
PageBuilder letterPage()
PageBuilder page(double width, double height)
Відкрити сторінку формату A4, US Letter або довільного розміру як PageBuilder.
Побудова / збереження
Uint8List build()
void save(String path)
void saveEncrypted(String path, String userPassword, String ownerPassword)
Uint8List toBytesEncrypted(String userPassword, String ownerPassword)
void close()
build— побудувати PDF і повернути його байти.save— побудувати та зберегти за шляхом.saveEncrypted/toBytesEncrypted— зашифрована AES-256 побудова у файл або байти.close— звільнити нативний дескриптор (ідемпотентно).
PageBuilder
Плавний (fluent) будівник для однієї сторінки, який повертає DocumentBuilder.page / letterPage / a4Page. Кожна операція повертає this для ланцюжкового виклику. Викличте done(), щоб зафіксувати сторінку, або close(), щоб відхилити її.
Текст і розкладка
PageBuilder font(String name, double size)
PageBuilder at(double x, double y)
PageBuilder text(String value)
PageBuilder heading(int level, String value)
PageBuilder paragraph(String value)
PageBuilder space(double points)
PageBuilder horizontalRule()
PageBuilder columns(int columnCount, double gapPt, String value)
PageBuilder inline(String value)
PageBuilder inlineBold(String value)
PageBuilder inlineItalic(String value)
PageBuilder inlineColor(double r, double g, double b, String value)
PageBuilder newline()
PageBuilder footnote(String refMark, String noteText)
PageBuilder textInRect(double x, double y, double w, double h, String value, int align)
PageBuilder newPageSameSize()
font/at— задати активний шрифт/розмір і позицію курсора.text/heading/paragraph— вивести текст, заголовок певного рівня або абзац із перенесенням.space/horizontalRule/newline— вертикальний відступ, лінію, розрив рядка.columns— багатоколонковий текст із проміжком.inline/inlineBold/inlineItalic/inlineColor— вкраплені фрагменти тексту.footnote— позначку посилання плюс текст примітки.textInRect— текст, розкладений усередині прямокутника, з кодом вирівнювання (0=ліворуч, 1=по центру, 2=праворуч).newPageSameSize— почати нову сторінку того самого розміру.
Посилання
PageBuilder linkUrl(String url)
PageBuilder linkPage(int page)
PageBuilder linkNamed(String destination)
PageBuilder linkJavascript(String script)
Приєднати до останнього вмісту посилання за URL, внутрішнє посилання на сторінку, посилання на іменоване місце призначення або JavaScript-посилання.
Дії та скрипти полів
PageBuilder onOpen(String script)
PageBuilder onClose(String script)
PageBuilder fieldKeystroke(String script)
PageBuilder fieldFormat(String script)
PageBuilder fieldValidate(String script)
PageBuilder fieldCalculate(String script)
Дії при відкритті/закритті сторінки та скрипти keystroke/format/validate/calculate для полів AcroForm.
Розмітка тексту
PageBuilder highlight(double r, double g, double b)
PageBuilder underline(double r, double g, double b)
PageBuilder strikeout(double r, double g, double b)
PageBuilder squiggly(double r, double g, double b)
Анотації розмітки поверх останнього тексту в кольорі RGB.
Анотації / водяний знак / штамп
PageBuilder stickyNote(String value)
PageBuilder stickyNoteAt(double x, double y, String value)
PageBuilder watermark(String value)
PageBuilder watermarkConfidential()
PageBuilder watermarkDraft()
PageBuilder stamp(String typeName)
PageBuilder freetext(double x, double y, double w, double h, String value)
stickyNote/stickyNoteAt— нотатка-стікер у позиції курсора або в явній позиції.watermark/watermarkConfidential/watermarkDraft— власні або наперед задані водяні знаки.stamp— іменований гумовий штамп.freetext— анотація вільного тексту в прямокутнику.
Зображення та штрихкоди
PageBuilder image(Uint8List bytes, double x, double y, double w, double h)
PageBuilder imageArtifact(Uint8List bytes, double x, double y, double w, double h)
PageBuilder imageWithAlt(Uint8List bytes, double x, double y, double w, double h, String altText)
PageBuilder barcode1d(int barcodeType, String data, double x, double y, double w, double h)
PageBuilder barcodeQr(String data, double x, double y, double size)
image— розмістити зображення;imageArtifact— розмістити зображення-артефакт (поза вмістом);imageWithAlt— розмістити зображення з альтернативним текстом для доступності.barcode1d/barcodeQr— намалювати одновимірний штрихкод або QR-код безпосередньо на сторінці.
Векторна графіка
PageBuilder rect(double x, double y, double w, double h)
PageBuilder filledRect(double x, double y, double w, double h, double r, double g, double b)
PageBuilder line(double x1, double y1, double x2, double y2)
PageBuilder strokeRect(double x, double y, double w, double h, double width, double r, double g, double b)
PageBuilder strokeLine(double x1, double y1, double x2, double y2, double width, double r, double g, double b)
PageBuilder strokeRectDashed(double x, double y, double w, double h, double width, double r, double g, double b, List<double> dashArray, [double phase = 0])
PageBuilder strokeLineDashed(double x1, double y1, double x2, double y2, double width, double r, double g, double b, List<double> dashArray, [double phase = 0])
Заповнені та обведені прямокутники й лінії, зокрема штрихові обведення з масивом штрихів і фазою.
Поля форм
PageBuilder textField(String name, double x, double y, double w, double h, [String? defaultValue])
PageBuilder checkbox(String name, double x, double y, double w, double h, bool checked)
PageBuilder comboBox(String name, double x, double y, double w, double h, List<String> options, int count, [String? selected])
PageBuilder radioGroup(String name, List<String> values, List<double> xs, List<double> ys, List<double> ws, List<double> hs, int count, [String? selected])
PageBuilder pushButton(String name, double x, double y, double w, double h, String caption)
PageBuilder signatureField(String name, double x, double y, double w, double h)
Додати віджети AcroForm: текстові поля, прапорці, комбіновані списки, групи перемикачів, кнопки та поля підпису.
Таблиці
PageBuilder table(int nCols, List<double> widths, List<int> aligns, int nRows, List<String> cellStrings, bool hasHeader)
PageBuilder streamingTableBegin(List<String> headers, List<double> widths, List<int> aligns, bool repeatHeader)
PageBuilder streamingTableBeginV2(List<String> headers, List<double> widths, List<int> aligns, bool repeatHeader, {int mode = 0, int sampleRows = 0, double minColWidthPt = 0, double maxColWidthPt = 0, int maxRowspan = 1})
PageBuilder streamingTablePushRow(List<String> cells)
PageBuilder streamingTablePushRowV2(List<String> cells, List<int> rowspans)
PageBuilder streamingTableFlush()
PageBuilder streamingTableFinish()
PageBuilder streamingTableSetBatchSize(int batchSize)
int streamingTableBatchCount()
int streamingTablePendingRowCount()
table— буферизувати статичну таблицю в порядку рядків.streamingTableBegin/streamingTableBeginV2— розпочати потокову таблицю (v2 додає режим ширини колонок, зразкові рядки, мінімальну/максимальну ширину колонок і об’єднання рядків).streamingTablePushRow/streamingTablePushRowV2— додати рядок (v2 з об’єднанням рядків для кожної комірки).streamingTableFlush/streamingTableFinish— скинути очікувані рядки / закрити таблицю.streamingTableSetBatchSize— кількість рядків, що буферизуються перед кожним скиданням.streamingTableBatchCount/streamingTablePendingRowCount— скинуті пакети / очікувані рядки.
Життєвий цикл
void done()
void close()
done— зафіксувати буферизовані операції у батьківському будівнику (споживає дескриптор).close— відхилити сторінку та звільнити дескриптор (ідемпотентно).
EmbeddedFont
Завантажений шрифт TTF/OTF для вбудовування через DocumentBuilder.registerEmbeddedFont.
static EmbeddedFont fromFile(String path)
static EmbeddedFont fromBytes(Uint8List data, [String? name])
void close()
fromFile— завантажити шрифт зі шляху до файлу.fromBytes— завантажити з байтів;nameза замовчуванням дорівнює назві шрифту в PostScript.close— звільнити нативний дескриптор (ідемпотентно).
RenderedImage
Растеризоване зображення сторінки, яке повертає PdfDocument.renderPage та споріднені методи.
int get width
int get height
Uint8List get data
void save(String path)
void close()
width/height— розміри зображення в пікселях.data— закодовані байти зображення (наприклад, PNG), скопійовані у Dart.save— записати закодоване зображення за шляхом.close— звільнити нативний дескриптор (ідемпотентно).
ElementList
Елементи розкладки сторінки, які створює PdfDocument.pageElements.
int get count
Element operator [](int index)
List<Element> toList()
String toJson()
void close()
count— кількість елементів.operator []— прочитати елемент за індексом.toList— усі елементи у вигляді списку.toJson— увесь список, серіалізований у JSON.close— звільнити нативний дескриптор (ідемпотентно).
BarcodeImage
Згенерований одновимірний штрихкод або QR-код. Нанесіть на сторінку через DocumentEditor.addBarcodeToPage.
static BarcodeImage qr(String data, {int errorCorrection = 0, int sizePx = 256})
static BarcodeImage barcode(String data, int format, {int sizePx = 256})
String get data
int get format
double get confidence
Uint8List imagePng({int sizePx = 256})
String svg({int sizePx = 256})
void close()
qr— згенерувати QR-код із рівнем корекції помилок і розміром у пікселях.barcode— згенерувати одновимірний штрихкод у заданому коді формату.data/format/confidence— закодоване корисне навантаження, код формату та впевненість декодування.imagePng/svg— закодувати у байти PNG або рядок SVG.close— звільнити нативний дескриптор (ідемпотентно).
OcrEngine
Рушій OCR на основі файлів моделей виявлення/розпізнавання, який передається у PdfDocument.ocrExtractText.
static OcrEngine create(String detModelPath, String recModelPath, String dictPath)
void close()
create— створити рушій зі шляхів до моделі виявлення, моделі розпізнавання та файлу словника.close— звільнити нативний дескриптор (ідемпотентно).
Renderer
Багаторазовий рендерер сторінок, налаштований із фіксованими DPI/форматом/якістю.
static Renderer create({int dpi = 150, int format = 0, int quality = 90, bool antiAlias = true})
void close()
create— створити рендерер (format0=PNG, 1=JPEG;quality1…100).close— звільнити нативний дескриптор (ідемпотентно).
Certificate
Облікові дані для підписування / сертифікат X.509, який використовують точки входу підписування.
static Certificate loadFromBytes(Uint8List bytes, String password)
static Certificate loadFromPem(String certPem, String keyPem)
Pointer<Void> get handle
String get subject
String get issuer
String get serial
CertificateValidity get validity
bool isValid()
void close()
loadFromBytes— завантажити з буфера PKCS#12 (.p12/.pfx) із паролем.loadFromPem— завантажити з рядків PEM сертифіката + приватного ключа.handle— сирий нативний дескриптор (для просунутого використання / interop).subject/issuer/serial— розрізнювані імена та серійний номер.validity— вікно notBefore/notAfter якCertificateValidity.isValid— чи дійсний сертифікат наразі.close— звільнити нативний дескриптор (ідемпотентно).
Timestamp
Токен позначки часу RFC 3161.
static Timestamp parse(Uint8List bytes)
Uint8List get token
Uint8List get messageImprint
int get time
String get serial
String get tsaName
String get policyOid
int get hashAlgorithm
bool verify()
void close()
parse— розібрати TimeStampToken у кодуванні DER (або голий TSTInfo).token/messageImprint— повний токен і байти хешованого відбитка повідомлення.time— час позначки (секунди Unix-епохи).serial/tsaName/policyOid/hashAlgorithm— серійний номер токена, назва TSA, OID політики та код алгоритму хешування.verify— криптографічно перевірити токен.close— звільнити нативний дескриптор (ідемпотентно).
TsaClient
Клієнт TSA (центру позначок часу) RFC 3161.
static TsaClient create(String url, {String username = '', String password = '', int timeout = 30, int hashAlgo = 0, bool useNonce = true, bool certReq = true})
Timestamp requestTimestamp(Uint8List data)
Timestamp requestTimestampHash(Uint8List hash, int hashAlgo)
void close()
create— створити клієнт для URL центру TSA з необов’язковою базовою автентифікацією та опціями запиту.requestTimestamp— запросити позначку часу для сирих даних (клієнт сам їх хешує).requestTimestampHash— запросити позначку часу для попередньо обчисленого хешу.close— звільнити нативний дескриптор (ідемпотентно).
SignatureInfo
Інформація про цифровий підпис, вбудований у PDF, з PdfDocument.getSignature.
SignatureInfo.fromHandle(Pointer<Void> handle)
Pointer<Void> get handle
String get signerName
String get signingReason
String get signingLocation
int get signingTime
Certificate get certificate
int get padesLevel
bool hasTimestamp()
Timestamp get timestamp
bool addTimestamp(Timestamp ts)
int verify()
int verifyDetached(Uint8List pdf)
void close()
fromHandle— прийняти сирий нативний дескриптор (для просунутого використання / interop).signerName/signingReason/signingLocation/signingTime— метадані підписувача.certificate—Certificateпідписувача.padesLevel— код базового рівня PAdES або-1, якщо це не PAdES.hasTimestamp/timestamp— чи існує вбудована позначка часу і самаTimestamp.addTimestamp— приєднати позначку часу до цього підпису.verify— криптоперевірка атрибутів підписувача (1 дійсний / 0 недійсний / -1 невідомо).verifyDetached— наскрізна перевірка проти повних байтів PDF (1 дійсний / 0 недійсний / -1 невідомо).close— звільнити нативний дескриптор (ідемпотентно).
Dss
Документне /DSS (сховище безпеки документа), з PdfDocument.getDss.
Dss.fromHandle(Pointer<Void> handle)
int get certCount
int get crlCount
int get ocspCount
int get vriCount
Uint8List getCert(int index)
Uint8List getCrl(int index)
Uint8List getOcsp(int index)
void close()
fromHandle— прийняти сирий дескриптор DSS (для просунутого використання / interop).certCount/crlCount/ocspCount/vriCount— кількість сертифікатів, CRL, відповідей OCSP та записів VRI.getCert/getCrl/getOcsp— байти DER сертифіката / CRL / відповіді OCSP за індексом.close— звільнити нативний дескриптор (ідемпотентно).
PdfAResults
Результати валідації PDF/A з PdfDocument.validatePdfA.
bool isCompliant()
List<String> errors()
List<String> warnings()
void close()
isCompliant— чи відповідає документ PDF/A.errors/warnings— повідомлення про помилки та попередження валідації.close— звільнити нативний дескриптор (ідемпотентно).
UaResults
Результати валідації доступності PDF/UA з PdfDocument.validatePdfUa.
bool isAccessible()
List<String> errors()
List<String> warnings()
UaStats uaStats()
void close()
isAccessible— чи доступний документ за PDF/UA.errors/warnings— повідомлення про помилки та попередження доступності.uaStats— статистика елементів, зібрана під час валідації.close— звільнити нативний дескриптор (ідемпотентно).
PdfXResults
Результати валідації PDF/X з PdfDocument.validatePdfX.
bool isCompliant()
List<String> errors()
void close()
isCompliant— чи відповідає документ PDF/X.errors— повідомлення про помилки валідації.close— звільнити нативний дескриптор (ідемпотентно).
Функції верхнього рівня
Ці функції рівня бібліотеки живуть у просторі імен pdf_oxide.
Злиття та позначка часу
Uint8List pdfMerge(List<String> paths)
Uint8List addTimestamp(Uint8List pdf, int sigIndex, String tsaUrl)
pdfMerge— об’єднати PDF за заданими шляхами (по порядку) в один PDF; повертає його байти.addTimestamp— застосувати позначку часу RFC 3161 до підпису, звертаючись до TSA; повертає байти PDF із позначкою часу.
Підписування
Uint8List signBytes(Uint8List pdf, Certificate cert, {String reason = '', String location = ''})
Uint8List signBytesPades(Uint8List pdf, Certificate cert, int level, {String? tsaUrl, String reason = '', String location = '', List<Uint8List> certs = const [], List<Uint8List> crls = const [], List<Uint8List> ocsps = const []})
Uint8List signBytesPadesOpts(Uint8List pdf, Certificate cert, int level, {String? tsaUrl, String reason = '', String location = '', List<Uint8List> certs = const [], List<Uint8List> crls = const [], List<Uint8List> ocsps = const []})
signBytes— підписати сирі байти PDF сертифікатом; повертає підписані байти.signBytesPades— підписати на базовому рівні PAdES (0=B-B, 1=B-T, 2=B-LT);tsaUrlобов’язковий для рівня ≥ 1, аcerts/crls/ocspsнесуть матеріал відкликання для B-LT.signBytesPadesOpts— варіантsignBytesPadesз опціями-структурою та ідентичною поведінкою.
Журналювання
void setLogLevel(int level)
int getLogLevel()
Задати/отримати глобальний рівень журналювання бібліотеки (0=Off, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Trace).
Криптографія / FIPS
String cryptoActiveProvider()
String cryptoCbom()
String cryptoInventory()
String cryptoPolicy()
int cryptoFipsAvailable()
int cryptoUseFips()
int cryptoSetPolicy(String spec)
cryptoActiveProvider— назва активного криптографічного провайдера.cryptoCbom— криптографічна специфікація матеріалів (CBOM) у вигляді JSON.cryptoInventory— криптографічний інвентар у вигляді JSON.cryptoPolicy— активна криптографічна політика у вигляді JSON.cryptoFipsAvailable— чи доступний провайдер, валідований за FIPS (ненульове = так).cryptoUseFips— перемкнутися на провайдер, валідований за FIPS; повертає статус.cryptoSetPolicy— задати криптографічну політику з рядка-специфікації; повертає статус.
Моделі та глобальна конфігурація
String modelManifest()
int prefetchAvailable()
String prefetchModels(String languagesCsv)
int setMaxOpsPerStream(int limit)
int setPreserveUnmappedGlyphs(int preserve)
modelManifest— маніфест вбудованих моделей у вигляді JSON.prefetchAvailable— чи доступне попереднє завантаження моделей у цій збірці.prefetchModels— попередньо завантажити моделі OCR/розкладки для мов, розділених комами; повертає звіт у JSON.setMaxOpsPerStream— задати глобальний ліміт операторів на потік вмісту; повертає попереднє значення.setPreserveUnmappedGlyphs— увімкнути/вимкнути збереження незіставлених гліфів; повертає попереднє значення.
Обробка помилок
PdfOxideError
Усі коди помилок C ABI (окрім успіху) кидаються як PdfOxideError.
class PdfOxideError implements Exception {
final int code; // C-ABI error code
final String op; // the operation that failed
}
Виклик методу на дескрипторі після close() кидає Dart-вий StateError. EmbeddedFont.fromBytes з некоректними даними шрифту, Certificate.loadFromBytes з некоректним PKCS#12 та PdfDocument.open для відсутнього файлу — усі вони викидають PdfOxideError.
import 'package:pdf_oxide/pdf_oxide.dart';
void main() {
try {
final doc = PdfDocument.open('input.pdf');
print(doc.extractText(0));
doc.close();
} on PdfOxideError catch (e) {
print('PDF error: $e'); // PdfOxideError: <op> failed (error code <code>)
}
}
Типи-значення
Прості класи даних, які повертають методи видобування та інспектування.
PdfVersion
| Поле | Тип | Опис |
|---|---|---|
major |
int |
Старша версія |
minor |
int |
Молодша версія |
Bbox
Обмежувальний прямокутник, вирівняний за осями, у точках користувацького простору PDF.
| Поле | Тип | Опис |
|---|---|---|
x, y |
double |
Початок у нижньому лівому куті |
width, height |
double |
Розмір прямокутника |
Char
| Поле | Тип | Опис |
|---|---|---|
character |
int |
Кодова позиція Unicode |
bbox |
Bbox |
Обмежувальний прямокутник гліфа |
fontName |
String |
Назва шрифту в PostScript |
fontSize |
double |
Розмір шрифту в точках |
Word
| Поле | Тип | Опис |
|---|---|---|
text |
String |
Текст слова |
bbox |
Bbox |
Обмежувальний прямокутник |
fontName |
String |
Назва шрифту |
fontSize |
double |
Розмір шрифту |
bold |
bool |
Чи напівжирний |
TextLine
| Поле | Тип | Опис |
|---|---|---|
text |
String |
Текст рядка |
bbox |
Bbox |
Обмежувальний прямокутник |
wordCount |
int |
Кількість слів |
Table
| Член | Тип | Опис |
|---|---|---|
rowCount |
int |
Кількість рядків |
colCount |
int |
Кількість колонок |
hasHeader |
bool |
Чи присутній рядок заголовка |
cell(int row, int col) |
String |
Текст комірки (з нумерацією від нуля) |
Font
| Поле | Тип | Опис |
|---|---|---|
name |
String |
Назва шрифту |
type |
String |
Тип шрифту |
encoding |
String |
Кодування |
embedded |
bool |
Чи вбудований |
subset |
bool |
Чи підмножина |
Image
| Поле | Тип | Опис |
|---|---|---|
width, height |
int |
Розміри в пікселях |
bitsPerComponent |
int |
Біт на компонент |
format |
String |
Формат зображення |
colorspace |
String |
Простір кольорів |
data |
Uint8List |
Сирі байти зображення |
Annotation
| Поле | Тип | Опис |
|---|---|---|
type |
String |
Тип анотації |
subtype |
String |
Підтип анотації |
content |
String |
Текстовий вміст |
author |
String |
Автор |
rect |
Bbox |
Позиція |
borderWidth |
double |
Ширина рамки |
Path
| Поле | Тип | Опис |
|---|---|---|
bbox |
Bbox |
Обмежувальний прямокутник |
strokeWidth |
double |
Ширина обведення |
hasStroke |
bool |
Чи обведений |
hasFill |
bool |
Чи заповнений |
operationCount |
int |
Кількість операцій контуру |
SearchResult
| Поле | Тип | Опис |
|---|---|---|
text |
String |
Знайдений текст |
page |
int |
Індекс сторінки з нуля |
bbox |
Bbox |
Обмежувальний прямокутник збігу |
FormField
| Поле | Тип | Опис |
|---|---|---|
name |
String |
Повністю кваліфікована назва поля |
value |
String |
Поточне значення |
type |
String |
Тип поля (Tx, Btn, Ch, Sig) |
readonly |
bool |
Чи лише для читання |
required |
bool |
Чи обов’язкове |
QuadPoint
Квад анотації-виділення (чотири кутові точки): x1, y1, x2, y2, x3, y3, x4, y4 (double).
AnnotationDetails
| Поле | Тип | Опис |
|---|---|---|
type, subtype, content |
String |
Тип/підтип анотації та її вміст |
rect |
Bbox |
Позиція |
color |
int |
Упакований колір ARGB |
creationDate, modificationDate |
int |
Секунди Unix-епохи (0, якщо відсутні) |
hidden, markedDeleted, printable, readOnly |
bool |
Прапорці анотації |
linkUri |
String |
Цільовий URI посилання (інакше порожній) |
iconName |
String |
Назва іконки текстової анотації (інакше порожня) |
quadPoints |
List<QuadPoint> |
Квад-точки виділення (інакше порожні) |
CertificateValidity
| Поле | Тип | Опис |
|---|---|---|
notBefore |
int |
Час «дійсний від» (секунди Unix-епохи) |
notAfter |
int |
Час «дійсний до» (секунди Unix-епохи) |
UaStats
| Поле | Тип | Опис |
|---|---|---|
structElements |
int |
Елементи структури |
images |
int |
Зображення |
tables |
int |
Таблиці |
forms |
int |
Поля форм |
annotations |
int |
Анотації |
pages |
int |
Сторінки |
Element
| Поле | Тип | Опис |
|---|---|---|
type |
String |
Тип елемента (наприклад, Text, Image, Table) |
text |
String |
Текстовий вміст (може бути порожнім) |
rect |
Bbox |
Обмежувальний прямокутник |
Повний приклад
import 'dart:io';
import 'package:pdf_oxide/pdf_oxide.dart';
void main() {
// --- Creation ---
final pdf = Pdf.fromMarkdown('# Report\n\nGenerated by PDF Oxide.');
pdf.save('report.pdf');
pdf.close();
// --- Builder ---
final db = DocumentBuilder.create()..setTitle('Invoice');
final page = db.letterPage();
page
.font('Helvetica', 14)
.heading(1, 'Invoice')
.paragraph('Thank you for your business.')
.done();
File('invoice.pdf').writeAsBytesSync(db.build());
db.close();
// --- Extraction ---
final doc = PdfDocument.open('report.pdf');
print('Pages: ${doc.pageCount}');
for (var i = 0; i < doc.pageCount; i++) {
print('Page $i: ${doc.extractText(i).length} chars');
}
for (final word in doc.extractWords(0)) {
print('${word.text} @ ${word.bbox}');
}
// --- Search ---
for (final hit in doc.searchAll('PDF Oxide', false)) {
print('Found "${hit.text}" on page ${hit.page}');
}
// --- Rendering ---
final img = doc.renderPage(0);
img.save('page0.png');
img.close();
doc.close();
// --- Editing ---
final ed = DocumentEditor.open('report.pdf');
ed.rotateAllPages(90);
ed.setProducer('PDF Oxide');
ed.save('rotated.pdf');
ed.close();
}
Other Language Bindings
PDF Oxide надає нативні прив’язки для всіх основних екосистем: Rust, Python, Node.js, WASM, C#, Golang, Java, PHP, Ruby, C++, Swift, Kotlin, R, Julia, Zig, Scala, Clojure, Objective-C та Elixir.
Наступні кроки
- Типи та переліки — усі спільні типи та переліки
- Довідник API сторінки — узгоджена ітерація по сторінках для всіх прив’язок
- Початок роботи з Dart — посібник