Skip to main content

rpdfium_edit/
lib.rs

1#![forbid(unsafe_code)]
2#![doc = "PDF editing and writing for rpdfium — a faithful Rust port of PDFium."]
3//!
4//! This crate implements PDF editing capabilities:
5//!
6//! - **Object serialization**: PDF objects → byte output
7//! - **Stream encoding**: Flate compression for output streams
8//! - **EditDocument**: Mutable overlay on top of immutable ObjectStore
9//! - **PDF writing**: Full rewrite and incremental save
10//! - **Page management**: Add, delete, move pages; insert page objects
11//! - **Content generation**: Paths, text, images → content stream operators
12//! - **Annotation editing**: Create, modify, delete annotations
13//! - **Form persistence**: Update form field values
14//! - **Encryption output**: Re-encrypt modified documents
15//!
16//! # Design
17//!
18//! The core pattern is a *mutable overlay* (`EditDocument`) that layers
19//! modifications on top of an existing immutable `ObjectStore`. This
20//! preserves the read-only design of the parser while enabling editing.
21
22// Renamed from upstream cpdf_creator.cpp / fpdfsdk/
23pub mod cpdf_creator;
24pub(crate) mod cpdf_creator_encrypt;
25pub(crate) mod cpdf_creator_incremental;
26pub(crate) mod cpdf_creator_serialize;
27
28// Content generation (upstream cpdf_pagecontentgenerator.cpp)
29pub(crate) mod cpdf_contentstream_write_utils;
30pub mod cpdf_pagecontentgenerator;
31
32// Page management (upstream cpdf_pagecontentmanager.cpp / cpdf_pageorganizer.cpp)
33pub(crate) mod cpdf_pagecontentmanager;
34pub(crate) mod cpdf_pageorganizer;
35
36// Page export (upstream cpdf_pageexporter.cpp / cpdf_npagetooneexporter.cpp)
37pub mod cpdf_npagetooneexporter;
38pub mod cpdf_pageexporter;
39
40// Encoding (upstream flate encoder, part of fpdfsdk/fpdf_edit.cpp)
41pub mod cpdf_flateencoder;
42
43// SDK layer (upstream fpdfsdk/)
44pub mod fpdf_annot;
45pub mod fpdf_edit;
46pub mod fpdf_formfill;
47pub mod fpdf_ppo;
48
49// Widget appearance stream generation (upstream CPDF_GenerateAP::GenerateFormAP)
50pub(crate) mod widget_ap;
51
52// No upstream equivalent — rpdfium-specific
53pub mod document;
54pub mod error;
55pub mod font_reg;
56pub mod object_ctx;
57pub mod page_object;
58
59pub use cpdf_creator::{WriteOptions, write_full};
60pub use cpdf_creator_incremental::write_incremental;
61pub use cpdf_creator_serialize::{CountingWriter, PdfWrite};
62pub use cpdf_npagetooneexporter::{NupPageSettings, export_npage_to_one};
63pub use cpdf_pageexporter::{export_pages, export_pages_from_range};
64pub use document::{EditDocument, FormFieldSpec};
65pub use error::{EditError, EditResult};
66pub use font_reg::{FontRegistration, FontType, GlyphPath, GlyphSegment, GlyphSegmentType};
67pub use fpdf_annot::{AnnotationBuilder, AnnotationSpec, AnnotationUpdates};
68pub use fpdf_ppo::parse_page_range;
69pub use object_ctx::{AnnotObjectCtx, AnnotObjectCtxMut, PageObjectCtx, PageObjectCtxMut};
70pub use page_object::{
71    ClipPath, ContentMark, FillMode, FormObject, ImageMetadata, ImageObject, MarkParamValue,
72    PageObject, PathObject, PathSegment, TextObject, parse_jpeg_dimensions, path_ops_to_segments,
73    segments_to_path_ops,
74};
75pub use rpdfium_graphics::{BlendMode, DashPattern};