Початок роботи з PDF Oxide (Julia)
PDF Oxide — найшвидша бібліотека для роботи з PDF у Julia: видобуток тексту із середнім часом 0.8 мс і 100% успішних проходів на 3830 PDF. Пакет PdfOxide.jl обгортає ядро на Rust безпосередньо через C ABI, тож ви отримуєте нативну швидкість разом з ідіоматичним API для Julia. Індекси сторінок починаються з 0.
Встановлення
Додайте пакет із менеджера пакетів у REPL Julia:
using Pkg
Pkg.add("PdfOxide")
Нативна бібліотека (libpdf_oxide) завантажується під час виконання. Якщо її немає на системному шляху завантажувача, вкажіть PdfOxide.jl на неї за допомогою однієї зі змінних середовища, які він перевіряє по порядку: PDF_OXIDE_LIB_PATH (повний шлях до файлу), PDF_OXIDE_LIB_DIR (каталог), а потім локальний каталог збірки target/release.
export PDF_OXIDE_LIB_DIR=/path/to/pdf_oxide/target/release
Швидкий старт
Відкрийте PDF і видобудьте текст із першої сторінки. extract_text приймає індекс сторінки, що починається з 0.
using PdfOxide
doc = open_document("report.pdf")
println("pages: ", page_count(doc))
v = version(doc)
println("version: ", v.major, ".", v.minor)
# Plain text from the first page (0-based index)
println(extract_text(doc, 0))
Ви також можете зібрати документ у пам’яті й відкрити його з байтів — зручно для тестів і конвеєрів, які взагалі не торкаються диска:
using PdfOxide
pdf = from_markdown("# Hello pdf_oxide\n\nThis is the **Julia** binding.\n")
doc = open_from_bytes(to_bytes(pdf))
println("pages: ", page_count(doc))
println(extract_text(doc, 0))
Огляд документа
Кілька дешевих викликів підкажуть, з чим ви маєте справу, ще до видобутку:
using PdfOxide
doc = open_document("report.pdf")
@show page_count(doc) # number of pages
@show version(doc).major # PDF spec version
@show is_encrypted(doc) # true if the file is password-protected
Конвертація в Markdown і HTML
Конвертуйте одну сторінку або одразу весь документ. Markdown зберігає заголовки, списки й виділення; варіанти _all об’єднують усі сторінки.
using PdfOxide
doc = open_document("paper.pdf")
# One page (0-based)
md = to_markdown(doc, 0)
println(md)
# Whole document
println(to_markdown_all(doc))
# HTML for a single page
html = to_html(doc, 0)
println(html)
# Plain text without any markup
println(to_plain_text(doc, 0))
Видобуток на рівні слів
extract_words повертає вектор значень Word, кожне з яких містить свій текст, обмежувальну рамку, розмір шрифту та ознаку напівжирності. Обмежувальна рамка — це Bbox з полями width, height та координатами розташування.
using PdfOxide
doc = open_document("paper.pdf")
words = extract_words(doc, 0)
for w in first(words, 10)
println(rpad(w.text, 20),
" size=", w.font_size,
" bold=", w.bold,
" width=", round(w.bbox.width; digits = 1))
end
Для побудови розмітки на рівні рядків extract_text_lines повертає значення TextLine, кожне зі своїм текстом, word_count та bbox:
using PdfOxide
doc = open_document("paper.pdf")
lines = extract_text_lines(doc, 0)
for line in lines
println(line.word_count, " words: ", line.text)
end
Пошук
Шукайте на окремій сторінці або по всьому документу. Третій аргумент — це ознака чутливості до регістру (false для нечутливого до регістру пошуку). Кожне знайдене збігання повідомляє свій text, сторінку page, на якій його знайдено, і bbox.
using PdfOxide
doc = open_document("manual.pdf")
# Search one page (case-insensitive)
hits = search(doc, 0, "configuration", false)
for h in hits
println("page ", h.page, ": ", h.text)
end
# Search every page
all_hits = search_all(doc, "configuration", false)
println(length(all_hits), " total matches")
for h in all_hits
println("page ", h.page, " at (",
round(h.bbox.x; digits = 0), ", ",
round(h.bbox.y; digits = 0), ")")
end
Створення PDF
Фабричні функції from_* будують Pdf із Markdown, HTML або звичайного тексту. Викличте to_bytes, щоб отримати сирі байти, або save, щоб одразу записати у файл.
using PdfOxide
# From Markdown
pdf = from_markdown("# Invoice\n\nAmount due: **\$42**\n")
save(pdf, "invoice.pdf")
# From HTML
html_pdf = from_html("<h1>Report</h1><p>Quarterly results.</p>")
save(html_pdf, "report.pdf")
# From plain text — grab the bytes instead of writing a file
text_pdf = from_text("Plain text body.")
bytes = to_bytes(text_pdf)
println("generated ", length(bytes), " bytes")
Обробка помилок
Невдалі операції викликають PdfOxideError. Огорніть виклики, які працюють із недовіреними даними, у блок try/catch:
using PdfOxide
try
doc = open_document("missing.pdf")
println(extract_text(doc, 0))
catch e
e isa PdfOxideError || rethrow()
println("PDF error: ", e)
end
Наступні кроки
- Початок роботи з Rust — нативне ядро, на якому побудовано PDF Oxide
- Початок роботи з Python — використання PDF Oxide із Python
- Видобуток тексту — детальні параметри видобутку та приклади
- Створення PDF — розширене створення з метаданими та стилізацією