Справочник API Julia
PDF Oxide предоставляет идиоматичные привязки для Julia (PdfOxide.jl), которые ложатся напрямую поверх C ABI pdf_oxide через ccall — без промежуточной shim-крейты. Нативные хендлы оборачиваются в изменяемые структуры с финализаторами, C-строки и буферы копируются в Julia и освобождаются автоматически, а любой неуспешный статус C ABI выбрасывает PdfOxideError. Индексы страниц начинаются с нуля.
using Pkg
Pkg.add("PdfOxide")
Нативная динамическая библиотека libpdf_oxide загружается во время выполнения и ищется по порядку: PDF_OXIDE_LIB_PATH → PDF_OXIDE_LIB_DIR → ../target/release → target/release → системный загрузчик. Соберите её с нужным набором фич для привязок:
cargo build --release --lib --features ocr,rendering,signatures,barcodes,tsa-client,system-fonts
using PdfOxide
pdf = from_markdown("# Hello\n\nbody\n")
doc = open_from_bytes(to_bytes(pdf))
page_count(doc)
extract_text(doc, 0) # 0-based page index
to_markdown_all(doc)
close!(doc)
Справочник по API Rust см. в справочнике API Rust. Справочник по API Python см. в справочнике API Python. Подробности о типах см. в разделе Типы и перечисления.
Большинство типов-хендлов (PdfDocument, Pdf, DocumentEditor, DocumentBuilder, RenderedImage, Certificate, SignatureInfo, Timestamp, TsaClient, Dss, результаты валидации, Barcode, OcrEngine, Renderer, ElementList, EmbeddedFont, PageBuilder) владеют нативной памятью. Освобождайте их заранее вызовом close!(x) — он идемпотентен и также выполняется при финализации.
PdfDocument
Хендл для чтения — открытия, извлечения, поиска, рендеринга, валидации и инспекции существующего PDF.
Открытие
open_document(path::AbstractString; password::Union{Nothing,AbstractString} = nothing) -> PdfDocument
open_from_bytes(data::AbstractVector{UInt8}) -> PdfDocument
open_with_password(path::AbstractString, password::AbstractString) -> PdfDocument
| Функция |
Описание |
open_document(path; password=nothing) |
Открыть PDF из пути в файловой системе (опционально защищённый паролем). |
open_from_bytes(data) |
Открыть PDF из вектора байтов в памяти. |
open_with_password(path, password) |
Открыть зашифрованный PDF на диске с паролем. |
Информация о документе
| Функция |
Возвращает |
Описание |
page_count(d) |
Int |
Количество страниц. |
version(d) |
PdfVersion |
Версия PDF (major/minor). |
is_encrypted(d) |
Bool |
Зашифрован ли документ. |
has_structure_tree(d) |
Bool |
Является ли документ тегированным PDF с деревом структуры. |
has_xfa(d) |
Bool |
Содержит ли документ форму XFA. |
authenticate(d, password) |
Bool |
Проверить пароль зашифрованного документа (неверный пароль возвращает false, а не ошибку). |
Конвертация документа целиком
| Функция |
Возвращает |
Описание |
to_markdown_all(d) |
String |
Markdown для всего документа. |
to_html_all(d) |
String |
HTML для всего документа. |
to_plain_text_all(d) |
String |
Обычный текст для всего документа. |
extract_all_text(d) |
String |
Автоматическое извлечение текста по всему документу. |
classify_document(d) |
String |
Классифицировать документ целиком; возвращает JSON-строку классификатора. |
Постраничное извлечение текста
extract_text(d::PdfDocument, page::Integer) -> String
to_plain_text(d::PdfDocument, page::Integer) -> String
to_markdown(d::PdfDocument, page::Integer) -> String
to_html(d::PdfDocument, page::Integer) -> String
extract_structured_json(d::PdfDocument, page::Integer) -> String
| Функция |
Описание |
extract_text(d, page) |
Извлечь обычный текст со страницы (индекс с нуля). |
to_plain_text(d, page) |
Отрендерить страницу в текст с учётом разметки. |
to_markdown(d, page) |
Отрендерить страницу в Markdown. |
to_html(d, page) |
Отрендерить страницу в HTML. |
extract_structured_json(d, page) |
Извлечь структурированную JSON-модель документа для страницы. |
extract_text_auto(d, page) |
Автоматически выбрать наилучший способ извлечения текста для страницы. |
extract_page_auto(d, page, options="{}") |
Автоматическое извлечение страницы со строкой JSON-опций. |
classify_page(d, page) |
Классифицировать страницу; возвращает JSON-строку классификатора. |
Извлечение структурированных элементов
extract_chars(d::PdfDocument, page::Integer) -> Vector{Char}
extract_words(d::PdfDocument, page::Integer) -> Vector{Word}
extract_text_lines(d::PdfDocument, page::Integer) -> Vector{TextLine}
extract_tables(d::PdfDocument, page::Integer) -> Vector{Table}
embedded_fonts(d::PdfDocument, page::Integer) -> Vector{Font}
embedded_images(d::PdfDocument, page::Integer) -> Vector{Image}
page_annotations(d::PdfDocument, page::Integer) -> Vector{Annotation}
extract_paths(d::PdfDocument, page::Integer) -> Vector{Path}
| Функция |
Описание |
extract_chars(d, page) |
Извлечь глифы со страницы как Vector{Char}. |
extract_words(d, page) |
Извлечь слова со страницы как Vector{Word}. |
extract_text_lines(d, page) |
Извлечь текстовые строки как Vector{TextLine}. |
extract_tables(d, page) |
Извлечь таблицы как Vector{Table}. |
embedded_fonts(d, page) |
Встроенные шрифты как Vector{Font}. |
embedded_images(d, page) |
Встроенные изображения как Vector{Image}. |
page_annotations(d, page) |
Аннотации как Vector{Annotation}. |
extract_paths(d, page) |
Векторные пути как Vector{Path}. |
Извлечение в пределах области
extract_text_in_rect(d::PdfDocument, page::Integer, x, y, w, h) -> String
extract_words_in_rect(d::PdfDocument, page::Integer, x, y, w, h) -> Vector{Word}
extract_lines_in_rect(d::PdfDocument, page::Integer, x, y, w, h) -> Vector{TextLine}
extract_tables_in_rect(d::PdfDocument, page::Integer, x, y, w, h) -> Vector{Table}
extract_images_in_rect(d::PdfDocument, page::Integer, x, y, w, h) -> Vector{Image}
Каждая функция ограничивает извлечение прямоугольником (x, y, w, h) в пользовательских координатах PDF (точках) на странице с индексом от нуля.
Поиск
search(d::PdfDocument, page::Integer, term::AbstractString, caseSensitive::Bool) -> Vector{SearchResult}
search_all(d::PdfDocument, term::AbstractString, caseSensitive::Bool) -> Vector{SearchResult}
search_results_to_json(d::PdfDocument, term::AbstractString, caseSensitive::Bool) -> String
| Функция |
Описание |
search(d, page, term, caseSensitive) |
Найти term на одной странице. |
search_all(d, term, caseSensitive) |
Найти term по всему документу. |
search_results_to_json(d, term, caseSensitive) |
Сериализовать результаты поиска по всему документу в JSON. |
Геометрия страницы
| Функция |
Возвращает |
Описание |
page_get_width(d, page) |
Float64 |
Ширина страницы (в точках PDF). |
page_get_height(d, page) |
Float64 |
Высота страницы (в точках PDF). |
page_get_rotation(d, page) |
Int |
Абсолютный угол поворота (градусы) страницы. |
page(d, index) |
PdfPage |
Представление страницы (индекс с нуля) над документом (см. PdfPage). |
Структура и метаданные документа
| Функция |
Возвращает |
Описание |
get_outline(d) |
String |
Закладки / оглавление (JSON). |
get_page_labels(d) |
String |
Диапазоны меток страниц (JSON). |
get_xmp_metadata(d) |
String |
XMP-метаданные (JSON). |
get_source_bytes(d) |
Vector{UInt8} |
Исходные байты документа. |
plan_split_by_bookmarks(d, options="{}") |
String |
Спланировать разделение по закладкам (JSON). |
Инспекция аннотаций
annotations_to_json(d::PdfDocument, page::Integer) -> String
annotation_get_color(d::PdfDocument, page::Integer, index::Integer) -> UInt32
annotation_creation_date(d::PdfDocument, page::Integer, index::Integer) -> String
annotation_modification_date(d::PdfDocument, page::Integer, index::Integer) -> String
| Функция |
Возвращает |
Описание |
annotations_to_json(d, page) |
String |
Все аннотации страницы в виде JSON. |
annotation_get_color(d, page, index) |
UInt32 |
32-битный упакованный RGBA-цвет аннотации. |
annotation_creation_date(d, page, index) |
String |
Дата создания аннотации. |
annotation_modification_date(d, page, index) |
String |
Дата изменения аннотации. |
annotation_is_hidden(d, page, index) |
Bool |
Скрыта ли аннотация. |
annotation_is_marked_deleted(d, page, index) |
Bool |
Помечена ли аннотация как удалённая. |
annotation_is_printable(d, page, index) |
Bool |
Печатается ли аннотация. |
annotation_is_read_only(d, page, index) |
Bool |
Доступна ли аннотация только для чтения. |
link_annotation_uri(d, page, index) |
String |
URI аннотации-ссылки (Link). |
text_annotation_icon_name(d, page, index) |
String |
Имя иконки текстовой аннотации (заметки-стикера). |
highlight_quad_points_count(d, page, index) |
Int |
Количество четырёхугольников аннотации-выделения (Highlight). |
highlight_quad_point(d, page, index, quad_index) |
NTuple{8,Float64} |
Четырёхугольник с индексом quad_index (8 чисел с плавающей точкой). |
Вспомогательные функции JSON для шрифтов и элементов
| Функция |
Возвращает |
Описание |
fonts_to_json(d, page) |
String |
Встроенные шрифты страницы в виде JSON. |
font_size(d, page, index) |
Float64 |
Размер шрифта встроенного шрифта с индексом index. |
page_get_elements(d, page) |
ElementList |
Элементы областей вёрстки страницы как ElementList. |
Поля форм
get_form_fields(d::PdfDocument) -> Vector{FormField}
form_field_count(d::PdfDocument) -> Int
export_form_data_to_bytes(d::PdfDocument, format_type::Integer) -> Vector{UInt8}
import_form_data(d::PdfDocument, path::AbstractString) -> Int
form_import_from_file(d::PdfDocument, filename::AbstractString) -> Bool
| Функция |
Описание |
get_form_fields(d) |
Все поля AcroForm как Vector{FormField}. |
form_field_count(d) |
Удобный счётчик полей. |
export_form_data_to_bytes(d, format_type) |
Экспортировать данные формы (format_type выбирает FDF/XFDF). |
import_form_data(d, path) |
Импортировать данные формы из файла; возвращает код статуса C. |
form_import_from_file(d, filename) |
Импортировать данные формы; возвращает true при успехе. |
OCR
page_needs_ocr(d::PdfDocument, page::Integer) -> Bool
ocr_extract_text(d::PdfDocument, page::Integer, engine::Union{Nothing,OcrEngine} = nothing) -> String
| Функция |
Описание |
page_needs_ocr(d, page) |
Является ли страница сканом/гибридной и нуждается ли в OCR. |
ocr_extract_text(d, page, engine=nothing) |
Извлечь текст через OCR (nothing означает использование только нативного извлечения). См. OcrEngine. |
Подписи (на уровне документа)
sign(d::PdfDocument, cert::Certificate; reason::AbstractString = "", location::AbstractString = "") -> Int
get_signature_count(d::PdfDocument) -> Int
get_signature(d::PdfDocument, index::Integer) -> SignatureInfo
verify_all_signatures(d::PdfDocument) -> Int
has_timestamp(d::PdfDocument) -> Int
document_get_dss(d::PdfDocument) -> Union{Dss,Nothing}
| Функция |
Описание |
sign(d, cert; reason, location) |
Подписать документ с помощью cert; возвращает код статуса. |
get_signature_count(d) |
Количество подписей в документе. |
get_signature(d, index) |
Подпись с индексом index как SignatureInfo. |
verify_all_signatures(d) |
Проверить все подписи; возвращает код статуса. |
has_timestamp(d) |
Содержит ли документ метку времени уровня документа. |
document_get_dss(d) |
Прочитать /DSS документа в Dss или nothing, если его нет. |
Валидация и конвертация
validate_pdf_a(d::PdfDocument, level::Integer) -> PdfAResults
validate_pdf_ua(d::PdfDocument, level::Integer) -> UaResults
validate_pdf_x(d::PdfDocument, level::Integer) -> PdfXResults
document_convert_to_pdf_a(d::PdfDocument, level::Integer) -> Bool
validatePdfA / validatePdfUa / validatePdfX — псевдонимы в стиле camelCase для трёх валидаторов. См. Результаты валидации.
Конвертация в офисные форматы
to_docx(d::PdfDocument) -> Vector{UInt8}
to_pptx(d::PdfDocument) -> Vector{UInt8}
to_xlsx(d::PdfDocument) -> Vector{UInt8}
Конвертировать PDF обратно в байтовый буфер DOCX / PPTX / XLSX. Открытие офисных файлов как PDF выполняется через open_from_docx_bytes / open_from_pptx_bytes / open_from_xlsx_bytes (см. Импорт офисных форматов).
Жизненный цикл
| Функция |
Описание |
close!(d) |
Освободить нативный хендл немедленно (идемпотентно; также выполняется при финализации). |
PdfPage
Лёгкое представление страницы (индекс с нуля), возвращаемое page(doc, index). Методы делегируют вызовы родительскому документу.
p = page(doc, 0)
text(p) # -> String
markdown(p) # -> String
extract_words(p) # -> Vector{Word}
search(p, "term", false) # -> Vector{SearchResult}
render_page(p) # -> RenderedImage
| Метод |
Возвращает |
Описание |
text(p) |
String |
Обычный текст страницы. |
markdown(p) |
String |
Markdown страницы. |
html(p) |
String |
HTML страницы. |
plain_text(p) |
String |
Текст с учётом разметки. |
extract_chars(p) |
Vector{Char} |
Глифы. |
extract_words(p) |
Vector{Word} |
Слова. |
extract_text_lines(p) |
Vector{TextLine} |
Текстовые строки. |
extract_tables(p) |
Vector{Table} |
Таблицы. |
embedded_fonts(p) |
Vector{Font} |
Встроенные шрифты. |
embedded_images(p) |
Vector{Image} |
Встроенные изображения. |
page_annotations(p) |
Vector{Annotation} |
Аннотации. |
extract_paths(p) |
Vector{Path} |
Векторные пути. |
search(p, term, caseSensitive) |
Vector{SearchResult} |
Поиск по странице. |
render_page(p, format=0) |
RenderedImage |
Отрендерить страницу (0=PNG). |
render_page_zoom(p, zoom, format=0) |
RenderedImage |
Отрендерить с коэффициентом масштабирования. |
render_page_thumbnail(p, size, format=0) |
RenderedImage |
Отрендерить миниатюру, вписанную в size пикселей. |
Рендеринг
Рендеринг страниц PdfDocument в изображения. format: 0=PNG (по умолчанию), 1=JPEG. Координаты — в пользовательских точках PDF.
render_page(d::PdfDocument, pageIndex::Integer, format::Integer = 0) -> RenderedImage
render_page_zoom(d::PdfDocument, pageIndex::Integer, zoom::Real, format::Integer = 0) -> RenderedImage
render_page_thumbnail(d::PdfDocument, pageIndex::Integer, size::Integer, format::Integer = 0) -> RenderedImage
render_page_region(d::PdfDocument, page::Integer, crop_x, crop_y, crop_width, crop_height, format::Integer = 0) -> RenderedImage
render_page_fit(d::PdfDocument, page::Integer, w::Integer, h::Integer, format::Integer = 0) -> RenderedImage
render_page_raw(d::PdfDocument, page::Integer, dpi::Integer) -> Tuple{RenderedImage,Int,Int}
render_page_with_options(d::PdfDocument, page::Integer, dpi, format, bg_r, bg_g, bg_b, bg_a, transparent_background, render_annotations, jpeg_quality) -> RenderedImage
render_page_with_options_ex(d::PdfDocument, page::Integer, dpi, format, bg_r, bg_g, bg_b, bg_a, transparent_background, render_annotations, jpeg_quality, excluded_layers::AbstractVector{<:AbstractString} = String[]) -> RenderedImage
| Функция |
Описание |
render_page(d, page, format=0) |
Отрендерить страницу (0=PNG). |
render_page_zoom(d, page, zoom, format=0) |
Отрендерить с коэффициентом масштабирования. |
render_page_thumbnail(d, page, size, format=0) |
Отрендерить миниатюру, вписанную в size пикселей. |
render_page_region(d, page, x, y, w, h, format=0) |
Отрендерить прямоугольную область (пользовательские точки). |
render_page_fit(d, page, w, h, format=0) |
Отрендерить, вписав в w×h пикселей с сохранением пропорций. |
render_page_raw(d, page, dpi) |
Отрендерить в сырой буфер RGBA8888 с предумножением; возвращает (image, width, height). |
render_page_with_options(d, page, dpi, format, bg_r, bg_g, bg_b, bg_a, transparent_background, render_annotations, jpeg_quality) |
Рендеринг с полным набором RenderOptions (каналы фона 0–1; флаги 0/1). |
render_page_with_options_ex(...; excluded_layers) |
То же, плюс фильтрация слоёв OCG — подавление слоёв по их именам /Name. |
estimate_render_time(d, page) |
Оценить время рендеринга (мс) для страницы. |
renderPage / renderPageZoom / renderPageThumbnail — псевдонимы в стиле camelCase для render_page / render_page_zoom / render_page_thumbnail.
Renderer
Переиспользуемый хендл рендерера.
create_renderer(dpi::Integer = 150, format::Integer = 0, quality::Integer = 90, anti_alias::Bool = true) -> Renderer
close!(r::Renderer)
RenderedImage
Результат вызова рендеринга. Поля: width::Int, height::Int, data::Vector{UInt8} (закодированные байты или сырой RGBA для render_page_raw).
save(img::RenderedImage, path::AbstractString) # write to disk (format inferred)
close!(img::RenderedImage)
DocumentEditor
Хендл для редактирования — изменения и повторного сохранения существующего PDF.
Открытие и источник
open_editor(path::AbstractString) -> DocumentEditor
open_editor_from_bytes(data::AbstractVector{UInt8}) -> DocumentEditor
| Функция |
Возвращает |
Описание |
is_modified(e) |
Bool |
Есть ли у редактора несохранённые изменения. |
get_source_path(e) |
String |
Путь к источнику, из которого был открыт редактор. |
page_count(e) |
Int |
Количество страниц. |
version(e) |
PdfVersion |
Версия PDF. |
Информация / метаданные
| Функция |
Описание |
get_producer(e) |
Producer из /Info.Producer. |
set_producer(e, value) |
Установить /Info.Producer. |
get_creation_date(e) |
Дата создания из /Info.CreationDate (сырая строка даты PDF). |
set_creation_date(e, date_str) |
Установить /Info.CreationDate (сырая строка даты PDF). |
Сохранение
save(e::DocumentEditor, path::AbstractString)
save_to_bytes(e::DocumentEditor) -> Vector{UInt8}
save_to_bytes_with_options(e::DocumentEditor, compress::Bool, garbage_collect::Bool, linearize::Bool) -> Vector{UInt8}
extract_pages_to_bytes(e::DocumentEditor, pages::AbstractVector{<:Integer}) -> Vector{UInt8}
save_encrypted(e::DocumentEditor, path::AbstractString, user_password::AbstractString, owner_password::AbstractString)
save_encrypted_to_bytes(e::DocumentEditor, user_password::AbstractString, owner_password::AbstractString) -> Vector{UInt8}
convert_to_pdf_a(e::DocumentEditor, level::Integer)
| Функция |
Описание |
save(e, path) |
Сохранить отредактированный документ по пути. |
save_to_bytes(e) |
Сериализовать отредактированный документ в байты. |
save_to_bytes_with_options(e, compress, garbage_collect, linearize) |
Сериализовать с опциями сжатия / сборки мусора / линеаризации. |
extract_pages_to_bytes(e, pages) |
Извлечь подмножество страниц в новый PDF в памяти. |
save_encrypted(e, path, user_pw, owner_pw) |
Сохранить с шифрованием AES-256 по пути. |
save_encrypted_to_bytes(e, user_pw, owner_pw) |
Сохранить с шифрованием AES-256 в байты. |
convert_to_pdf_a(e, level) |
Конвертировать в PDF/A на месте (level: 0=A1b…7=A3u). |
Слияние и вложения
| Функция |
Описание |
merge_from(e, source_path) |
Слить страницы из PDF на диске. |
merge_from_bytes(e, data) |
Слить страницы из буфера PDF в памяти. |
embed_file(e, name, data) |
Встроить вложение файла (name, байты data). |
Операции со страницами
rotate_all_pages(e::DocumentEditor, degrees::Integer)
rotate_page_by(e::DocumentEditor, page::Integer, degrees::Integer)
get_page_rotation(e::DocumentEditor, page::Integer) -> Int
set_page_rotation(e::DocumentEditor, page::Integer, degrees::Integer)
delete_page(e::DocumentEditor, page::Integer)
move_page(e::DocumentEditor, from::Integer, to::Integer)
| Функция |
Описание |
rotate_all_pages(e, degrees) |
Повернуть все страницы (относительно текущего угла). |
rotate_page_by(e, page, degrees) |
Повернуть страницу аддитивно. |
get_page_rotation(e, page) |
Абсолютный угол поворота страницы. |
set_page_rotation(e, page, degrees) |
Установить абсолютный угол поворота страницы. |
delete_page(e, page) |
Удалить страницу. |
move_page(e, from, to) |
Переместить страницу из одного индекса в другой. |
Боксы страницы и обрезка
get_page_media_box(e::DocumentEditor, page::Integer) -> NTuple{4,Float64}
get_page_crop_box(e::DocumentEditor, page::Integer) -> NTuple{4,Float64}
set_page_media_box(e::DocumentEditor, page::Integer, x, y, w, h)
set_page_crop_box(e::DocumentEditor, page::Integer, x, y, w, h)
crop_margins(e::DocumentEditor, left::Real, right::Real, top::Real, bottom::Real)
| Функция |
Описание |
get_page_media_box(e, page) |
Получить MediaBox страницы. |
get_page_crop_box(e, page) |
Получить CropBox страницы. |
set_page_media_box(e, page, x, y, w, h) |
Установить MediaBox страницы. |
set_page_crop_box(e, page, x, y, w, h) |
Установить CropBox страницы. |
crop_margins(e, left, right, top, bottom) |
Обрезать все страницы по полям (в пользовательских координатах). |
Стирание / закрашивание
erase_region(e::DocumentEditor, page::Integer, x, y, w, h)
erase_regions(e::DocumentEditor, page::Integer, rects::AbstractVector{<:NTuple{4,<:Real}})
clear_erase_regions(e::DocumentEditor, page::Integer)
| Функция |
Описание |
erase_region(e, page, x, y, w, h) |
Стереть одну прямоугольную область. |
erase_regions(e, page, rects) |
Стереть несколько областей (rects — вектор кортежей (x, y, w, h)). |
clear_erase_regions(e, page) |
Очистить все ожидающие записи стирания для страницы. |
Удаление колонтитулов и артефактов
erase_header(d::PdfDocument, page::Integer)
erase_footer(d::PdfDocument, page::Integer)
erase_artifacts(d::PdfDocument, page::Integer)
remove_headers(d::PdfDocument, threshold::Real = 0.5)
remove_footers(d::PdfDocument, threshold::Real = 0.5)
remove_artifacts(d::PdfDocument, threshold::Real = 0.5)
| Функция |
Описание |
erase_header(d, page) / erase_footer(d, page) / erase_artifacts(d, page) |
Стереть обнаруженный верхний / нижний колонтитул или артефакты на странице. |
remove_headers(d, threshold=0.5) / remove_footers(...) / remove_artifacts(...) |
Удалить повторяющиеся колонтитулы / артефакты по всему документу выше порога частоты. |
Развёртка (flatten) аннотаций
flatten_annotations(e::DocumentEditor, page::Integer)
flatten_all_annotations(e::DocumentEditor)
is_page_marked_for_flatten(e::DocumentEditor, page::Integer) -> Bool
unmark_page_for_flatten(e::DocumentEditor, page::Integer)
Редактирование (Redaction)
apply_page_redactions(e::DocumentEditor, page::Integer)
apply_all_redactions(e::DocumentEditor)
is_page_marked_for_redaction(e::DocumentEditor, page::Integer) -> Bool
unmark_page_for_redaction(e::DocumentEditor, page::Integer)
redaction_add(e::DocumentEditor, page::Integer, x1, y1, x2, y2, r, g, b)
redaction_count(e::DocumentEditor, page::Integer) -> Int
redaction_apply(e::DocumentEditor, scrub_metadata::Bool, r::Real, g::Real, b::Real) -> Int
redaction_scrub_metadata(e::DocumentEditor) -> Int
| Функция |
Описание |
apply_page_redactions(e, page) |
Применить (впечатать) редактирование на странице. |
apply_all_redactions(e) |
Применить все ожидающие операции редактирования. |
is_page_marked_for_redaction(e, page) |
Помечена ли страница для редактирования. |
unmark_page_for_redaction(e, page) |
Снять с страницы метку редактирования. |
redaction_add(e, page, x1, y1, x2, y2, r, g, b) |
Поставить в очередь прямоугольник редактирования с цветом перекрытия (DeviceRGB, 0–1). |
redaction_count(e, page) |
Количество поставленных в очередь областей редактирования на странице. |
redaction_apply(e, scrub_metadata, r, g, b) |
Деструктивно применить все поставленные в очередь операции редактирования; возвращает количество удалённых глифов. |
redaction_scrub_metadata(e) |
Удалить Info/XMP/JavaScript/EmbeddedFiles; возвращает количество удалённых записей. |
Заполнение и развёртка форм
set_form_field_value(e::DocumentEditor, name::AbstractString, value::AbstractString)
flatten_forms(e::DocumentEditor)
flatten_forms_on_page(e::DocumentEditor, page::Integer)
flatten_warnings_count(e::DocumentEditor) -> Int
flatten_warning(e::DocumentEditor, index::Integer) -> String
import_fdf_bytes(e::DocumentEditor, data::AbstractVector{UInt8})
import_xfdf_bytes(e::DocumentEditor, data::AbstractVector{UInt8})
| Функция |
Описание |
set_form_field_value(e, name, value) |
Установить значение поля формы (UTF-8). |
flatten_forms(e) |
Развернуть все формы (впечатать значения в содержимое страницы). |
flatten_forms_on_page(e, page) |
Развернуть формы на одной странице. |
flatten_warnings_count(e) |
Количество предупреждений от последнего сохранения с развёрткой форм. |
flatten_warning(e, index) |
Строка предупреждения развёртки с индексом index. |
import_fdf_bytes(e, data) |
Импортировать данные формы FDF из байтов. |
import_xfdf_bytes(e, data) |
Импортировать данные формы XFDF из байтов. |
Печать штрихкодов
add_barcode_to_page(e::DocumentEditor, page::Integer, b::Barcode, x, y, width, height)
Впечатать Barcode на странице в прямоугольнике (x, y, width, height). См. Штрихкоды.
Жизненный цикл
close!(e::DocumentEditor) освобождает хендл.
Pdf
Лёгкий хендл для создания, возвращаемый фабриками from_*.
Фабрики
from_markdown(input::AbstractString) -> Pdf
from_html(input::AbstractString) -> Pdf
from_text(input::AbstractString) -> Pdf
from_image(path::AbstractString) -> Pdf
from_image_bytes(data::AbstractVector{UInt8}) -> Pdf
from_html_css(html::AbstractString, css::AbstractString, font_bytes::Union{Nothing,AbstractVector{UInt8}} = nothing) -> Pdf
from_html_css_with_fonts(html::AbstractString, css::AbstractString, families::AbstractVector{<:AbstractString}, fonts::AbstractVector{<:AbstractVector{UInt8}}) -> Pdf
| Функция |
Описание |
from_markdown(input) |
Построить Pdf из Markdown. |
from_html(input) |
Построить Pdf из HTML. |
from_text(input) |
Построить Pdf из обычного текста. |
from_image(path) |
Построить Pdf из файла изображения. |
from_image_bytes(data) |
Построить Pdf из байтов изображения в памяти. |
from_html_css(html, css, font_bytes=nothing) |
Построить из HTML + CSS с одним опциональным встроенным шрифтом. |
from_html_css_with_fonts(html, css, families, fonts) |
Построить из HTML + CSS с каскадом из нескольких шрифтов (families[i] называет fonts[i]). |
Методы
| Функция |
Возвращает |
Описание |
save(p, path) |
— |
Записать построенный PDF по пути. |
to_bytes(p) |
Vector{UInt8} |
Сериализовать построенный PDF в байты. |
get_page_count(p) |
Int |
Количество страниц у построителя Pdf. |
close!(p) |
— |
Освободить хендл. |
merge_pdfs
merge_pdfs(paths::AbstractVector{<:AbstractString}) -> Vector{UInt8}
Слить PDF-файлы по путям paths (по порядку) в единый байтовый буфер PDF.
Импорт офисных форматов
open_from_docx_bytes(data::AbstractVector{UInt8}) -> Pdf
open_from_pptx_bytes(data::AbstractVector{UInt8}) -> Pdf
open_from_xlsx_bytes(data::AbstractVector{UInt8}) -> Pdf
Конвертировать байты DOCX / PPTX / XLSX в Pdf.
DocumentBuilder
Гибкий, осведомлённый о структуре построитель PDF. Создавайте страницы с помощью a4_page / letter_page / page, выкладывайте содержимое на возвращённом PageBuilder, вызывайте done для фиксации каждой страницы, затем build / save / зашифрованные варианты.
DocumentBuilder() -> DocumentBuilder
Конфигурация уровня документа
set_title(b::DocumentBuilder, value::AbstractString)
set_author(b::DocumentBuilder, value::AbstractString)
set_subject(b::DocumentBuilder, value::AbstractString)
set_keywords(b::DocumentBuilder, value::AbstractString)
set_creator(b::DocumentBuilder, value::AbstractString)
on_open(b::DocumentBuilder, value::AbstractString)
language(b::DocumentBuilder, value::AbstractString)
tagged_pdf_ua1(b::DocumentBuilder)
role_map(b::DocumentBuilder, custom::AbstractString, standard::AbstractString)
register_embedded_font(b::DocumentBuilder, name::AbstractString, f::EmbeddedFont)
| Функция |
Описание |
set_title / set_author / set_subject / set_keywords / set_creator |
Установить соответствующее поле метаданных /Info. |
on_open(b, value) |
Установить JavaScript-действие при открытии документа. |
language(b, value) |
Установить язык документа (например, "en-US"). |
tagged_pdf_ua1(b) |
Включить режим тегированного PDF/UA-1. |
role_map(b, custom, standard) |
Сопоставить пользовательский тип структуры со стандартным. |
register_embedded_font(b, name, f) |
Зарегистрировать загруженный EmbeddedFont под именем name (поглощает шрифт). |
Страницы
a4_page(b::DocumentBuilder) -> PageBuilder
letter_page(b::DocumentBuilder) -> PageBuilder
page(b::DocumentBuilder, width::Real, height::Real) -> PageBuilder
Вывод
build(b::DocumentBuilder) -> Vector{UInt8}
save(b::DocumentBuilder, path::AbstractString)
save_encrypted_builder(b::DocumentBuilder, path::AbstractString, user_password::AbstractString, owner_password::AbstractString)
to_bytes_encrypted(b::DocumentBuilder, user_password::AbstractString, owner_password::AbstractString) -> Vector{UInt8}
| Функция |
Описание |
build(b) |
Построить и вернуть байты PDF (построитель всё равно нужно закрыть). |
save(b, path) |
Построить и сохранить по пути. |
save_encrypted_builder(b, path, user_pw, owner_pw) |
Построить и сохранить с шифрованием AES-256. |
to_bytes_encrypted(b, user_pw, owner_pw) |
Построить зашифрованные байты (AES-256). |
EmbeddedFont
embedded_font_from_file(path::AbstractString) -> EmbeddedFont
embedded_font_from_bytes(data::AbstractVector{UInt8}; name::Union{Nothing,AbstractString} = nothing) -> EmbeddedFont
| Функция |
Описание |
embedded_font_from_file(path) |
Загрузить шрифт TTF/OTF из пути. |
embedded_font_from_bytes(data; name) |
Загрузить шрифт из байтов (name может быть пустым — тогда используется PostScript-имя). |
PageBuilder
Возвращается a4_page / letter_page / page. Все методы изменяют страницу на месте; вызывайте done(p), чтобы зафиксировать её в родительском построителе (это поглощает хендл страницы).
Текст и вёрстка
font(p::PageBuilder, name::AbstractString, size::Real)
at(p::PageBuilder, x::Real, y::Real)
heading(p::PageBuilder, level::Integer, text::AbstractString)
| Метод |
Описание |
font(p, name, size) |
Установить шрифт и размер для последующего текста. |
at(p, x, y) |
Переместить курсор в абсолютную позицию (x, y) (в точках, от левого нижнего угла). |
heading(p, level, text) |
Вывести заголовок уровня level (1–6). |
Следующие методы со строковым значением имеют общую сигнатуру f(p::PageBuilder, value::AbstractString):
| Метод |
Описание |
text(p, value) |
Вывести фрагмент основного текста. |
paragraph(p, value) |
Вывести абзац с переносом строк. |
link_url(p, value) |
Сделать предыдущий текст ссылкой-URL. |
link_named(p, value) |
Связать предыдущий текст с именованным назначением. |
link_javascript(p, value) |
Прикрепить к предыдущему тексту JavaScript-действие. |
on_open(p, value) |
Установить JavaScript-действие при открытии страницы. |
on_close(p, value) |
Установить JavaScript-действие при закрытии страницы. |
field_keystroke(p, value) / field_format(p, value) / field_validate(p, value) / field_calculate(p, value) |
Прикрепить JavaScript-действия полей AcroForm. |
sticky_note(p, value) |
Прикрепить заметку-стикер к предыдущему содержимому. |
watermark(p, value) |
Добавить текстовый водяной знак. |
stamp(p, value) |
Добавить аннотацию-штамп. |
inline(p, value) |
Добавить встроенный фрагмент текста. |
inline_bold(p, value) |
Добавить встроенный фрагмент текста полужирным шрифтом. |
inline_italic(p, value) |
Добавить встроенный фрагмент текста курсивом. |
Методы вёрстки без аргументов, все f(p::PageBuilder):
| Метод |
Описание |
horizontal_rule(p) |
Нарисовать горизонтальную линию. |
space(p) |
Вставить вертикальный отступ. |
newline(p) |
Перейти на новую строку. |
new_page_same_size(p) |
Начать новую страницу с теми же размерами. |
watermark_confidential(p) |
Добавить водяной знак «CONFIDENTIAL». |
watermark_draft(p) |
Добавить водяной знак «DRAFT». |
link_page(p::PageBuilder, page_index::Integer)
sticky_note_at(p::PageBuilder, x::Real, y::Real, text::AbstractString)
freetext(p::PageBuilder, x::Real, y::Real, w::Real, h::Real, text::AbstractString)
footnote(p::PageBuilder, ref_mark::AbstractString, note_text::AbstractString)
columns(p::PageBuilder, column_count::Integer, gap_pt::Real, text::AbstractString)
inline_color(p::PageBuilder, r::Real, g::Real, b_::Real, text::AbstractString)
| Метод |
Описание |
link_page(p, page_index) |
Связать предыдущий текст с внутренним индексом страницы. |
sticky_note_at(p, x, y, text) |
Разместить отдельную заметку-стикер. |
freetext(p, x, y, w, h, text) |
Разместить свободно расположенную текстовую аннотацию в прямоугольнике. |
footnote(p, ref_mark, note_text) |
Добавить сноску (встроенный надстрочный знак + текст в конце страницы). |
columns(p, column_count, gap_pt, text) |
Выложить текст по сбалансированным колонкам. |
inline_color(p, r, g, b_, text) |
Добавить встроенный фрагмент текста, окрашенный в RGB (каналы 0–1). |
Аннотации разметки (markup)
Все четыре метода имеют сигнатуру f(p::PageBuilder, r::Real, g::Real, b_::Real) и применяются к предыдущему тексту с RGB-цветом:
| Метод |
Описание |
highlight(p, r, g, b) |
Выделить предыдущий текст. |
underline(p, r, g, b) |
Подчеркнуть предыдущий текст. |
strikeout(p, r, g, b) |
Зачеркнуть предыдущий текст. |
squiggly(p, r, g, b) |
Подчеркнуть предыдущий текст волнистой линией. |
Виджеты форм
text_field(p::PageBuilder, name, x, y, w, h; default_value::Union{Nothing,AbstractString} = nothing)
checkbox(p::PageBuilder, name, x, y, w, h, checked::Bool)
combo_box(p::PageBuilder, name, x, y, w, h, options::AbstractVector{<:AbstractString}; selected::Union{Nothing,AbstractString} = nothing)
radio_group(p::PageBuilder, name, values, xs, ys, ws, hs; selected::Union{Nothing,AbstractString} = nothing)
push_button(p::PageBuilder, name, x, y, w, h, caption::AbstractString)
signature_field(p::PageBuilder, name, x, y, w, h)
| Метод |
Описание |
text_field(p, name, x, y, w, h; default_value) |
Добавить однострочное текстовое поле. |
checkbox(p, name, x, y, w, h, checked) |
Добавить флажок с начальным состоянием. |
combo_box(p, name, x, y, w, h, options; selected) |
Добавить выпадающий список. |
radio_group(p, name, values, xs, ys, ws, hs; selected) |
Добавить группу переключателей (параллельные массивы описывают каждую кнопку). |
push_button(p, name, x, y, w, h, caption) |
Добавить нажимаемую кнопку. |
signature_field(p, name, x, y, w, h) |
Добавить незаполненное поле для подписи. |
Изображения и штрихкоды
image(p::PageBuilder, bytes::AbstractVector{UInt8}, x, y, w, h)
image_with_alt(p::PageBuilder, bytes::AbstractVector{UInt8}, x, y, w, h, alt_text::AbstractString)
image_artifact(p::PageBuilder, bytes::AbstractVector{UInt8}, x, y, w, h)
barcode_1d(p::PageBuilder, barcode_type::Integer, data::AbstractString, x, y, w, h)
barcode_qr(p::PageBuilder, data::AbstractString, x, y, size::Real)
| Метод |
Описание |
image(p, bytes, x, y, w, h) |
Встроить изображение (сырые JPEG/PNG/WebP). |
image_with_alt(p, bytes, x, y, w, h, alt_text) |
Встроить изображение с альтернативным текстом для доступности. |
image_artifact(p, bytes, x, y, w, h) |
Встроить декоративное изображение как /Artifact. |
barcode_1d(p, barcode_type, data, x, y, w, h) |
Разместить одномерный штрихкод (barcode_type: 0=Code128…7=Codabar). |
barcode_qr(p, data, x, y, size) |
Разместить квадратный QR-код. |
Векторная графика
rect(p::PageBuilder, x, y, w, h)
filled_rect(p::PageBuilder, x, y, w, h, r, g, b_)
line(p::PageBuilder, x1, y1, x2, y2)
stroke_rect(p::PageBuilder, x, y, w, h, width, r, g, b_)
stroke_line(p::PageBuilder, x1, y1, x2, y2, width, r, g, b_)
stroke_rect_dashed(p::PageBuilder, x, y, w, h, width, r, g, b_, dash_array::AbstractVector{<:Real}, phase::Real)
stroke_line_dashed(p::PageBuilder, x1, y1, x2, y2, width, r, g, b_, dash_array::AbstractVector{<:Real}, phase::Real)
text_in_rect(p::PageBuilder, x, y, w, h, text::AbstractString, align::Integer)
| Метод |
Описание |
rect(p, x, y, w, h) |
Обведённый чёрный прямоугольник толщиной 1pt. |
filled_rect(p, x, y, w, h, r, g, b) |
Закрашенный прямоугольник в RGB (0–1). |
line(p, x1, y1, x2, y2) |
Чёрная линия толщиной 1pt. |
stroke_rect(p, x, y, w, h, width, r, g, b) |
Обведённый прямоугольник толщиной width pt, цвет RGB. |
stroke_line(p, x1, y1, x2, y2, width, r, g, b) |
Обведённая линия толщиной width pt, цвет RGB. |
stroke_rect_dashed(...) |
Пунктирный обведённый прямоугольник (dash_array — длины штрихов/пробелов, phase — смещение). |
stroke_line_dashed(...) |
Пунктирная обведённая линия. |
text_in_rect(p, x, y, w, h, text, align) |
Нарисовать текст внутри прямоугольника (align: 0=по левому краю, 1=по центру, 2=по правому краю). |
Таблицы
table(p::PageBuilder, n_columns::Integer, widths::AbstractVector{<:Real}, aligns::AbstractVector{<:Integer}, n_rows::Integer, cell_strings::AbstractMatrix{<:AbstractString}, has_header::Bool)
streaming_table_begin(p::PageBuilder, headers::AbstractVector{<:AbstractString}, widths::AbstractVector{<:Real}, aligns::AbstractVector{<:Integer}, repeat_header::Bool)
streaming_table_begin_v2(p::PageBuilder, headers, widths, aligns, repeat_header::Bool, mode::Integer, sample_rows::Integer, min_col_width_pt::Real, max_col_width_pt::Real, max_rowspan::Integer)
streaming_table_set_batch_size(p::PageBuilder, batch_size::Integer)
streaming_table_pending_row_count(p::PageBuilder) -> Int
streaming_table_batch_count(p::PageBuilder) -> Int
streaming_table_push_row(p::PageBuilder, cells::AbstractVector{<:AbstractString})
streaming_table_push_row_v2(p::PageBuilder, cells::AbstractVector{<:AbstractString}, rowspans::AbstractVector{<:Integer})
streaming_table_flush(p::PageBuilder)
streaming_table_finish(p::PageBuilder)
| Метод |
Описание |
table(p, n_columns, widths, aligns, n_rows, cell_strings, has_header) |
Вывести буферизованную таблицу (aligns: 0=по левому краю/1=по центру/2=по правому краю; cell_strings — построчная матрица n_rows × n_columns). |
streaming_table_begin(p, headers, widths, aligns, repeat_header) |
Открыть потоковую таблицу (параллельные массивы длиной n_columns). |
streaming_table_begin_v2(...) |
Открыть потоковую таблицу с режимом ширины mode (0=Fixed, 1=Sample, 2=AutoAll) и max_rowspan. |
streaming_table_set_batch_size(p, batch_size) |
Установить размер пакета (0 → 256). |
streaming_table_pending_row_count(p) |
Строки, добавленные с момента последней границы пакета. |
streaming_table_batch_count(p) |
Количество завершённых пакетов на данный момент. |
streaming_table_push_row(p, cells) |
Добавить одну строку (rowspan=1). |
streaming_table_push_row_v2(p, cells, rowspans) |
Добавить одну строку с rowspan для каждой ячейки (≥2 объединяемых строк). |
streaming_table_flush(p) |
Сбросить текущий пакет. |
streaming_table_finish(p) |
Завершить потоковую таблицу. |
Фиксация
done(p::PageBuilder) # commit this page's buffered operations to its parent builder (consumes the handle)
Типы значений
Неизменяемые структуры, возвращаемые при извлечении. Bbox имеет поля x, y, width, height (в пользовательских единицах PDF).
| Тип |
Поля |
Bbox |
x, y, width, height (Float64) |
Char |
character::UInt32, bbox::Bbox, font_name::String, font_size::Float64 |
Word |
text, bbox, font_name, font_size, bold |
TextLine |
text, bbox, word_count |
Table |
row_count, col_count, has_header, cells (используйте cell(t, row, col) для ячейки с индексом от нуля) |
Font |
name, type, encoding, embedded, subset |
Image |
width, height, bitsPerComponent, format, colorspace, data |
Annotation |
type, subtype, content, author, rect::Bbox, borderWidth |
Path |
bbox::Bbox, strokeWidth, hasStroke, hasFill, operationCount |
SearchResult |
text, page, bbox::Bbox |
FormField |
name, value, type, readonly, required |
PdfVersion |
major::Int, minor::Int |
cell(t::Table, row::Integer, col::Integer) -> String
form_field_name(f::FormField) -> String
form_field_value(f::FormField) -> String
form_field_type(f::FormField) -> String
form_field_is_readonly(f::FormField) -> Bool
form_field_is_required(f::FormField) -> Bool
ElementList
element_count(l::ElementList) -> Int
element_type(l::ElementList, index::Integer) -> String
element_text(l::ElementList, index::Integer) -> String
element_rect(l::ElementList, index::Integer) -> Bbox
elements_to_json(l::ElementList) -> String
close!(l::ElementList)
Электронные подписи
Certificate
certificate_load_from_bytes(data::AbstractVector{UInt8}, password::AbstractString = "") -> Certificate
certificate_load_from_pem(cert_pem::AbstractString, key_pem::AbstractString) -> Certificate
certificate_get_subject(c::Certificate) -> String
certificate_get_issuer(c::Certificate) -> String
certificate_get_serial(c::Certificate) -> String
certificate_get_validity(c::Certificate) -> Tuple{Int,Int}
certificate_is_valid(c::Certificate) -> Bool
| Функция |
Описание |
certificate_load_from_bytes(data, password="") |
Загрузить учётные данные для подписи из байтов PKCS#12 / PFX. |
certificate_load_from_pem(cert_pem, key_pem) |
Загрузить из PEM-сертификата и закрытого ключа. |
certificate_get_subject(c) / certificate_get_issuer(c) / certificate_get_serial(c) |
Строки субъекта / издателя / серийного номера. |
certificate_get_validity(c) |
Окно действительности как (not_before, not_after) в секундах Unix-времени. |
certificate_is_valid(c) |
Действителен ли сертификат в данный момент. |
Подписание
sign_bytes(pdf::AbstractVector{UInt8}, cert::Certificate, reason::AbstractString, location::AbstractString) -> Vector{UInt8}
sign_bytes_pades(pdf::AbstractVector{UInt8}, cert::Certificate, level::Integer, tsa_url::Union{Nothing,AbstractString}, reason::AbstractString, location::AbstractString; certs = Vector{UInt8}[], crls = Vector{UInt8}[], ocsps = Vector{UInt8}[]) -> Vector{UInt8}
sign_bytes_pades_opts(pdf::AbstractVector{UInt8}, cert::Certificate, level::Integer, tsa_url, reason, location; certs = Vector{UInt8}[], crls = Vector{UInt8}[], ocsps = Vector{UInt8}[]) -> Vector{UInt8}
add_timestamp(pdf_data::AbstractVector{UInt8}, sig_index::Integer, tsa_url::AbstractString) -> Vector{UInt8}
| Функция |
Описание |
sign_bytes(pdf, cert, reason, location) |
Подписать сырые байты PDF; возвращает подписанный PDF. |
sign_bytes_pades(pdf, cert, level, tsa_url, reason, location; certs, crls, ocsps) |
Базовое подписание PAdES (level: 0=B-B, 1=B-T, 2=B-LT; tsa_url обязателен при уровне ≥ 1). |
sign_bytes_pades_opts(...) |
Вариант sign_bytes_pades с опциями в виде структуры (идентичное поведение, строит PadesSignOptionsC). |
add_timestamp(pdf_data, sig_index, tsa_url) |
Добавить метку времени RFC 3161 к подписи; возвращает PDF с проставленной меткой времени. |
SignatureInfo
signature_get_signer_name(s::SignatureInfo) -> String
signature_get_signing_reason(s::SignatureInfo) -> String
signature_get_signing_location(s::SignatureInfo) -> String
signature_get_signing_time(s::SignatureInfo) -> Int
signature_get_certificate(s::SignatureInfo) -> Certificate
signature_get_pades_level(s::SignatureInfo) -> Int
signature_has_timestamp(s::SignatureInfo) -> Bool
signature_get_timestamp(s::SignatureInfo) -> Timestamp
signature_add_timestamp(s::SignatureInfo, ts) -> Bool
signature_verify(s::SignatureInfo) -> Int
signature_verify_detached(s::SignatureInfo, pdf::AbstractVector{UInt8}) -> Int
| Функция |
Описание |
signature_get_signer_name(s) / _reason(s) / _location(s) |
Имя подписавшего / причина / место подписания. |
signature_get_signing_time(s) |
Время подписания (секунды Unix-времени). |
signature_get_certificate(s) |
Certificate подписавшего (владение передаётся вызывающему). |
signature_get_pades_level(s) |
Код уровня PAdES. |
signature_has_timestamp(s) |
Присутствует ли встроенная метка времени RFC 3161. |
signature_get_timestamp(s) |
Встроенная Timestamp (владение передаётся вызывающему). |
signature_add_timestamp(s, ts) |
Прикрепить Timestamp; возвращает true при успехе. |
signature_verify(s) |
Криптографическая проверка атрибутов подписавшего (1=действительна, 0=недействительна, -1=неизвестно). |
signature_verify_detached(s, pdf) |
Полная сквозная проверка по байтам всего PDF (1/0/-1). |
Timestamp
timestamp_parse(data::AbstractVector{UInt8}) -> Timestamp
timestamp_get_token(t::Timestamp) -> Vector{UInt8}
timestamp_get_message_imprint(t::Timestamp) -> Vector{UInt8}
timestamp_get_time(t::Timestamp) -> Int
timestamp_get_serial(t::Timestamp) -> String
timestamp_get_tsa_name(t::Timestamp) -> String
timestamp_get_policy_oid(t::Timestamp) -> String
timestamp_get_hash_algorithm(t::Timestamp) -> Int
timestamp_verify(t::Timestamp) -> Bool
| Функция |
Описание |
timestamp_parse(data) |
Разобрать DER-токен RFC 3161 TimeStampToken (либо «голый» TSTInfo). |
timestamp_get_token(t) |
Сырые байты токена. |
timestamp_get_message_imprint(t) |
Байты дайджеста отпечатка сообщения. |
timestamp_get_time(t) |
Время метки (секунды Unix-времени). |
timestamp_get_serial(t) |
Строка серийного номера. |
timestamp_get_tsa_name(t) |
Имя TSA. |
timestamp_get_policy_oid(t) |
OID политики. |
timestamp_get_hash_algorithm(t) |
Код алгоритма дайджеста. |
timestamp_verify(t) |
Проходит ли токен проверку. |
TsaClient
tsa_client_create(url::AbstractString; username = nothing, password = nothing, timeout::Integer = 30, hash_algo::Integer = 0, use_nonce::Bool = true, cert_req::Bool = true) -> TsaClient
tsa_request_timestamp(t::TsaClient, data::AbstractVector{UInt8}) -> Timestamp
tsa_request_timestamp_hash(t::TsaClient, hash::AbstractVector{UInt8}, hash_algo::Integer) -> Timestamp
| Функция |
Описание |
tsa_client_create(url; …) |
Создать клиент TSA по RFC 3161 (опциональная базовая аутентификация, таймаут, алгоритм хэширования, nonce, cert-req). |
tsa_request_timestamp(t, data) |
Запросить метку времени по data (сетевой ввод-вывод). |
tsa_request_timestamp_hash(t, hash, hash_algo) |
Запросить метку времени по заранее вычисленному дайджесту. |
Dss (хранилище данных для проверки подписи)
dss_cert_count(d::Dss) -> Int
dss_crl_count(d::Dss) -> Int
dss_ocsp_count(d::Dss) -> Int
dss_vri_count(d::Dss) -> Int
dss_get_cert(d::Dss, index::Integer) -> Vector{UInt8}
dss_get_crl(d::Dss, index::Integer) -> Vector{UInt8}
dss_get_ocsp(d::Dss, index::Integer) -> Vector{UInt8}
| Функция |
Описание |
dss_cert_count(d) / dss_crl_count(d) / dss_ocsp_count(d) / dss_vri_count(d) |
Количество сертификатов / CRL / ответов OCSP / записей VRI. |
dss_get_cert(d, index) / dss_get_crl(d, index) / dss_get_ocsp(d, index) |
Байты сертификата / CRL / ответа OCSP с индексом index. |
Результаты валидации
validate_pdf_a / validate_pdf_ua / validate_pdf_x возвращают PdfAResults / UaResults / PdfXResults.
| Функция |
Возвращает |
Описание |
is_compliant(r::PdfAResults) |
Bool |
Соответствует ли документ PDF/A. |
is_compliant(r::PdfXResults) |
Bool |
Соответствует ли документ PDF/X. |
is_accessible(r::UaResults) |
Bool |
Доступен ли документ по стандарту PDF/UA. |
errors(r) |
Vector{String} |
Сообщения об ошибках (PdfAResults / UaResults / PdfXResults). |
warnings(r) |
Vector{String} |
Предупреждения. |
ua_stats(r::UaResults) |
NamedTuple |
Счётчики элементов доступности (structure, images, tables, forms, annotations, pages). |
pdf_a_error_count(r) / pdf_a_warning_count(r) |
Int |
Количество ошибок / предупреждений PDF/A. |
pdf_ua_error_count(r) / pdf_ua_warning_count(r) |
Int |
Количество ошибок / предупреждений PDF/UA. |
pdf_x_error_count(r) |
Int |
Количество ошибок PDF/X. |
Штрихкоды
generate_qr_code(data::AbstractString, error_correction::Integer = 0, size_px::Integer = 256) -> Barcode
generate_barcode(data::AbstractString, format::Integer = 0, size_px::Integer = 256) -> Barcode
barcode_get_data(b::Barcode) -> String
barcode_get_format(b::Barcode) -> Int
barcode_get_confidence(b::Barcode) -> Float64
barcode_get_image_png(b::Barcode, size_px::Integer = 256) -> Vector{UInt8}
barcode_get_svg(b::Barcode, size_px::Integer = 256) -> String
| Функция |
Описание |
generate_qr_code(data, error_correction=0, size_px=256) |
Сгенерировать QR-код. |
generate_barcode(data, format=0, size_px=256) |
Сгенерировать одномерный/двумерный штрихкод. |
barcode_get_data(b) |
Строка декодированной/закодированной полезной нагрузки. |
barcode_get_format(b) |
Код формата. |
barcode_get_confidence(b) |
Уверенность распознавания (0.0–1.0). |
barcode_get_image_png(b, size_px=256) |
Отрендерить в байты PNG. |
barcode_get_svg(b, size_px=256) |
Отрендерить в строку SVG. |
Впечатать штрихкод на странице редактора с помощью add_barcode_to_page(e, page, b, x, y, width, height).
OCR
OcrEngine
ocr_engine_create(det_model_path::AbstractString, rec_model_path::AbstractString, dict_path::AbstractString) -> OcrEngine
Создать движок OCR из путей к модели обнаружения, модели распознавания и файлу словаря. Используйте его с ocr_extract_text(doc, page, engine) и page_needs_ocr(doc, page) (см. PdfDocument › OCR). close!(o::OcrEngine) освобождает его.
Предзагрузка моделей
prefetch_models(languages_csv::AbstractString) -> String
prefetch_available() -> Int
model_manifest() -> String
| Функция |
Описание |
prefetch_models(languages_csv) |
Предзагрузить модели OCR/анализа вёрстки для языков, перечисленных через запятую. |
prefetch_available() |
Доступна ли предзагрузка моделей. |
model_manifest() |
Манифест встроенных моделей (JSON/строка). |
Глобальная конфигурация и криптография
set_log_level(level::Integer) # 0=Off 1=Error 2=Warn 3=Info 4=Debug 5=Trace
get_log_level() -> Int
set_max_ops_per_stream(limit::Integer) -> Int
set_preserve_unmapped_glyphs(preserve::Integer) -> Int
| Функция |
Описание |
set_log_level(level) |
Установить глобальный уровень логирования (0–5). |
get_log_level() |
Получить текущий глобальный уровень логирования. |
set_max_ops_per_stream(limit) |
Установить лимит операций содержимого на поток; возвращает предыдущий лимит. |
set_preserve_unmapped_glyphs(preserve) |
Переключить сохранение несопоставленных глифов; возвращает предыдущее значение настройки. |
Криптографическая политика и инвентаризация
crypto_active_provider() -> String
crypto_cbom() -> String
crypto_inventory() -> String
crypto_policy() -> String
crypto_set_policy(spec::AbstractString) -> Int
crypto_fips_available() -> Int
crypto_use_fips() -> Int
| Функция |
Описание |
crypto_active_provider() |
Имя активного криптопровайдера. |
crypto_cbom() |
Спецификация криптографических компонентов (Cryptographic Bill of Materials, JSON). |
crypto_inventory() |
Инвентаризация криптографических алгоритмов (JSON). |
crypto_policy() |
Активная криптографическая политика. |
crypto_set_policy(spec) |
Установить активную криптографическую политику из spec; возвращает код статуса. |
crypto_fips_available() |
Доступен ли провайдер FIPS. |
crypto_use_fips() |
Активен ли режим FIPS. |
Обработка ошибок
Любой неуспешный статус C ABI выбрасывает PdfOxideError:
using PdfOxide
try
doc = open_document("file.pdf")
text = extract_text(doc, 0)
close!(doc)
catch e
if e isa PdfOxideError
@warn "PDF error" code=e.code op=e.op
else
rethrow()
end
end
PdfOxideError <: Exception несёт в себе числовой код code из C ABI и имя операции, которая завершилась неудачей.
Полный пример
using PdfOxide
# --- Creation ---
doc_bytes = let b = DocumentBuilder()
set_title(b, "Report")
p = letter_page(b)
font(p, "Helvetica", 18)
at(p, 72, 720)
heading(p, 1, "Quarterly Report")
paragraph(p, "Generated by PDF Oxide.")
done(p)
out = build(b)
close!(b)
out
end
# --- Extraction ---
doc = open_from_bytes(doc_bytes)
println("Pages: ", page_count(doc))
for i in 0:page_count(doc)-1
println("Page ", i + 1, ": ", length(extract_text(doc, i)), " chars")
end
# Words + tables
words = extract_words(doc, 0)
tables = extract_tables(doc, 0)
# Search
for hit in search_all(doc, "report", false)
println("Found on page ", hit.page, " at ", hit.bbox)
end
close!(doc)
# --- Editing ---
e = open_editor("input.pdf")
rotate_all_pages(e, 90)
set_form_field_value(e, "name", "Jane Doe")
flatten_forms(e)
save(e, "output.pdf")
close!(e)
# --- Rendering ---
doc = open_document("input.pdf")
img = render_page(doc, 0) # PNG
save(img, "page0.png")
close!(img)
close!(doc)
Other Language Bindings
PDF Oxide предоставляет нативные привязки для всех основных экосистем: Rust, Python, Node.js, WASM, C#, Golang, Java, PHP, Ruby, C++, Swift, Kotlin, Dart, R, Zig, Scala, Clojure, Objective-C, и Elixir.
Дальнейшие шаги