Julia API 参考
PDF Oxide 提供地道的 Julia 绑定(PdfOxide.jl),通过 ccall 直接封装在 pdf_oxide 的 C ABI 之上 — 没有中间垫片 crate。原生句柄被包装在带有终结器(finalizer)的可变结构体中,C 字符串与缓冲区会被复制到 Julia 侧并自动释放,任何非成功的 C-ABI 状态都会抛出 PdfOxideError。页码索引从 0 开始。
using Pkg
Pkg.add("PdfOxide")
原生 libpdf_oxide cdylib 会在运行时加载,按 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)
Rust API 请参阅 Rust API 参考;Python API 请参阅 Python API 参考;类型细节请参阅 类型与枚举。
大多数句柄类型(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(Tagged 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) |
从 0 基页码提取纯文本。 |
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}
每个函数都将提取范围限定在 0 基页码上、以 PDF 用户空间点表示的矩形 (x, y, w, h) 内。
搜索
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 |
对文档某一 0 基页码的视图(参见 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 |
链接批注(Link annotation)的 URI。 |
text_annotation_icon_name(d, page, index) |
String |
文本(便笺)批注的图标名称。 |
highlight_quad_points_count(d, page, index) |
Int |
高亮批注(Highlight annotation)的四边形点数量。 |
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) |
以 Vector{FormField} 返回所有 AcroForm 字段。 |
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) |
以 SignatureInfo 形式返回第 index 个签名。 |
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 是这三个校验函数的驼峰式别名。参见 校验结果。
Office 转换
to_docx(d::PdfDocument) -> Vector{UInt8}
to_pptx(d::PdfDocument) -> Vector{UInt8}
to_xlsx(d::PdfDocument) -> Vector{UInt8}
将 PDF 转换回 DOCX / PPTX / XLSX 字节缓冲区。将 Office 文件作为 PDF 打开则使用 open_from_docx_bytes / open_from_pptx_bytes / open_from_xlsx_bytes(参见 Office 输入)。
生命周期
| 函数 |
说明 |
close!(d) |
立即释放原生句柄(幂等;也会在终结阶段自动运行)。 |
PdfPage
由 page(doc, index) 返回的轻量级 0 基页面视图。其方法都委托给父文档处理。
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 是 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}(编码字节,对 render_page_raw 而言为原始 RGBA 数据)。
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) |
来自 /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_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)
编校(涂黑)
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) |
从 Markdown 构建一个 Pdf。 |
from_html(input) |
从 HTML 构建一个 Pdf。 |
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}
将 paths 处的多个 PDF(按顺序)合并为单一 PDF 字节缓冲区。
Office 输入
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 标记 PDF 模式。 |
role_map(b, custom, standard) |
将自定义结构类型映射到标准类型。 |
register_embedded_font(b, name, f) |
在 name 下注册一个已加载的 EmbeddedFont(会消费该字体句柄)。 |
页面
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) |
附加 AcroForm 字段相关的 JavaScript 动作。 |
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)的行内文本。 |
标记批注
以下四个方法均共享签名 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) |
放置一个正方形二维码。 |
矢量图形
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) |
推送一行,带逐单元格的跨行设置(≥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) 获取一个 0 基单元格) |
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;当 level ≥ 1 时需要 tsa_url)。 |
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) |
消息摘要(message-imprint digest)字节。 |
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; …) |
创建一个 RFC 3161 TSA 客户端(可选基本认证、超时、摘要算法、随机数、证书请求)。 |
tsa_request_timestamp(t, data) |
对 data 请求一个时间戳(涉及网络 I/O)。 |
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) |
第 index 个证书 / CRL / OCSP 响应字节。 |
校验结果
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) |
生成一个二维码。 |
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 携带数值型 C-ABI code 以及发生失败的操作名称。
完整示例
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。
后续步骤