Expand description
§pdfkit-rs
Safe Rust bindings for Apple’s PDFKit framework on macOS. The published Cargo package is pdfkit-rs; the Rust library target is pdfkit.
Status: v0.2.1 extends the Swift bridge and safe Rust API with generic
PdfActionhandles, named and remote-go-to actions,PDFDocumentDelegatebridging, structured document write options, notification-name enums, and raw annotation utility enums on top of the v0.2.0 document/view surface.
§Highlights
PdfDocumentfor loading, creating, mutating, saving, attaching delegates, and option-driven writesPdfPagefor bounds, text, character geometry, annotations, and selectionsPdfAction,PdfActionUrl,PdfActionGoTo,PdfActionNamed, andPdfActionRemoteGoTofor abstract and concrete action inspection/editingPdfAnnotation,PdfOutline,PdfBorder, andPdfDestinationfor generic action attachment, outline trees, and navigation targetsPdfDocumentDelegate,PdfDocumentWriteOptions,PdfDocumentNotification,PdfViewNotification, andPdfThumbnailViewNotificationfor delegate-driven integration points and structured notification namesPdfAppearanceCharacteristics,PdfActionNamedName,PdfLineStyle, andPdfMarkupTypefor widget and annotation utility metadataPdfAccessibilityNode::public_api_available()for reporting that PDFKit only forward-declares the type on macOS
§Quick start
use pdfkit::prelude::*;
fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
let document = PdfDocument::from_url("document.pdf")?;
let page = document
.page(0)
.ok_or_else(|| std::io::Error::other("missing first page"))?;
let destination = PdfDestination::new(&page, PdfPoint { x: 36.0, y: 72.0 })?;
let action = PdfActionGoTo::new(&destination)?;
println!("pages={}", document.page_count());
println!("first page text={:?}", page.string());
println!("goto action type={:?}", action.action_type());
Ok(())
}§Surface overview
§Documents, pages, and selections
PdfDocument::new,from_url,from_bytes,write_to_url,write_to_url_with_optionsPdfDocument::insert_page,remove_page,exchange_pages,set_outline_root,set_delegate,unlockPdfDocument::selection_for_entire_document,selection_from_page_points,selection_from_page_charactersPdfPage::new,bounds,set_bounds,rotation,set_rotationPdfPage::selection_for_range,selection_for_rect,selection_for_word_at_point,selection_for_line_at_pointPdfSelection::new,text_range,selections_by_line,add_selection
§Actions, outlines, and annotations
PdfAction::action_type,as_url,as_goto,as_named,as_remote_gotoPdfActionUrl::new,url,set_url,action_typePdfActionGoTo::new,destination,set_destination,action_typePdfActionNamed::new,name,set_name,action_typePdfActionRemoteGoTo::new,page_index,set_page_index,point,set_point,url,set_url,action_typePdfOutline::new,insert_child,set_label,set_destination,action,set_action,clear_actionPdfAnnotation::new,info,set_contents,set_border,action,set_action,clear_actionPdfBorder::new,info,set_style,set_line_width,set_dash_patternPdfDestination::new,info,page,set_zoom,compare
§Delegates, notifications, and utilities
PdfDocumentDelegate,PdfDocumentDelegateHandlePdfDocumentWriteOptions::{with_owner_password, with_user_password, with_access_permissions, with_burn_in_annotations, with_save_text_from_ocr, with_save_images_as_jpeg, with_optimize_images_for_screen}PdfDocumentNotification,PdfDocumentNotificationUserInfoKey,PdfViewNotification,PdfThumbnailViewNotificationPdfActionNamedName,PdfLineStyle,PdfMarkupType
§View state, widget appearance, and accessibility status
PdfView::new,set_document,set_display_mode,set_display_direction,set_display_boxPdfView::set_current_selection,go_to_page,go_to_destination,visible_pagesPdfThumbnailView::new,set_pdf_view,set_thumbnail_size,set_maximum_number_of_columnsPdfAppearanceCharacteristics::new,set_control_type,set_caption,set_background_color,infoPdfAccessibilityNode::public_api_available,PdfAccessibilityNode::availability_note
§Examples
The crate now ships one smoke example per logical area:
01_document_smoke02_page_basics03_annotation_link04_outline_tree05_selection_ranges06_view_state07_thumbnail_view_state08_action_url09_action_goto10_border_style11_destination_compare12_appearance_characteristics13_accessibility_node_status14_action_named_remote_goto15_document_delegate_write_options
Run one example:
cargo run --example 06_view_stateRun all examples:
for ex in examples/*.rs; do cargo run --example "$(basename "$ex" .rs)"; done§Coverage audit
See COVERAGE.md for the v0.2.1 header audit and deferred/skipped items.
§License
Licensed under either of Apache-2.0 or MIT at your option.
§API Documentation
Safe Rust bindings for Apple’s PDFKit framework on macOS.
Modules§
Structs§
- PdfAccessibility
Node - PdfAction
- PdfAction
GoTo - PdfAction
Named - PdfAction
Remote GoTo - PdfAction
Url - PdfAnnotation
- PdfAnnotation
Info - PdfAppearance
Characteristics - PdfAppearance
Characteristics Info - PdfBorder
- PdfBorder
Info - PdfColor
- PdfDestination
- PdfDestination
Info - PdfDocument
- PdfDocument
Attributes - PdfDocument
Delegate Handle - PdfDocument
Info - PdfDocument
Write Options - PdfEdge
Insets - PdfKit
Error - PdfOutline
- PdfPage
- PdfPoint
- PdfRect
- PdfSelection
- PdfSize
- PdfText
Range - PdfThumbnail
View - PdfThumbnail
View Info - PdfView
- PdfView
Info
Enums§
- Display
Box - PdfAction
Named Name - PdfBorder
Style - PdfDisplay
Direction - PdfDisplay
Mode - PdfDocument
Notification - PdfDocument
Notification User Info Key - PdfDocument
Permissions - PdfInterpolation
Quality - PdfLine
Style - PdfMarkup
Type - PdfThumbnail
View Notification - PdfView
Notification - PdfWidget
Control Type