Skip to main content

easypdf/
lib.rs

1//! # easypdf-rust
2//!
3//! 符合 Rust 惯用法的 PDF 操作库:创建、读取、操作和表单填充。
4//! 受阿里巴巴 EasyExcel 的 builder 模式 API 设计启发。
5//!
6//! ## 快速示例
7//!
8//! **创建 PDF:**
9//! ```ignore
10//! use easypdf::prelude::*;
11//!
12//! EasyPdf::create("output.pdf")
13//!     .page(PageSize::A4)
14//!     .add_text("Hello, world!")
15//!         .font(PdfFont::helvetica(12.0))
16//!     .do_write()?;
17//! ```
18//!
19//! **读取 PDF:**
20//! ```ignore
21//! let text = EasyPdf::read("input.pdf").extract_text()?;
22//! ```
23//!
24//! **合并 PDF:**
25//! ```ignore
26//! EasyPdf::merge(&["a.pdf", "b.pdf"], "merged.pdf")?;
27//! ```
28//!
29//! **填充表单:**
30//! ```ignore
31//! #[derive(PdfModel)]
32//! struct MyData {
33//!     #[pdf(field = "name")]
34//!     name: String,
35//! }
36//!
37//! EasyPdf::fill_form("template.pdf", &MyData { name: "Alice".into() })
38//!     .save("filled.pdf")?;
39//! ```
40
41#![warn(missing_docs)]
42#![warn(clippy::pedantic)]
43#![deny(unsafe_code)]
44#![allow(
45    clippy::uninlined_format_args,
46    clippy::manual_string_new,
47    clippy::cast_precision_loss,
48    clippy::doc_markdown,
49    clippy::write_with_newline,
50    clippy::items_after_statements
51)]
52
53// ======================================================================
54// 来自子 crate 的重导出
55// ======================================================================
56
57// --- 核心类型(平坦重导出) ---
58pub use easypdf_core::*;
59
60// --- derive 宏 ---
61pub use easypdf_derive::PdfModel;
62
63// --- 读取器 ---
64pub use easypdf_reader::{PdfReader, ReadStrategy};
65
66// --- 引擎中立模型与受限 I/O ---
67pub use easypdf_core::io::guards::{guard_decompression_bomb, guard_element_explosion};
68pub use easypdf_core::io::repair::{RepairOptions, attempt_repair, is_likely_corrupt};
69pub use easypdf_core::io::ssrf_guard::validate_url as validate_io_url;
70pub use easypdf_core::{AtomicFileOutput, PdfInput, ResourceLimits};
71pub use easypdf_core::{
72    ImageData, ImageFormat, ListItem, PdfBlock, PdfBlockType, PdfDocumentModel, PdfPageModel,
73    SourceLocation,
74};
75
76// --- 写入器 ---
77pub use easypdf_writer::{PdfWriter, PdfWriterBuilder, WriteBackend};
78
79// --- 操作器 ---
80pub use easypdf_reader::PdfManipulator;
81
82// --- 模板填充 ---
83pub use easypdf_writer::PdfTemplateFiller;
84
85// --- 布局 crate ---
86pub use easypdf_core::layout::Direction as LayoutDirection;
87pub use easypdf_core::layout::FlowLayout;
88
89// --- Markdown 管道(可选) ---
90#[cfg(feature = "markdown")]
91pub use easypdf_markdown::{
92    DetailedProcessorCapabilities, PRIORITY_GENERIC, PRIORITY_SPECIFIC, ProcessorCapability,
93    ProcessorPipeline,
94};
95#[cfg(feature = "markdown")]
96pub use easypdf_markdown::{
97    ImagePolicy, MarkdownConversionResult, MarkdownExportReport, MarkdownExportResult,
98    MarkdownProcessorCapabilities, MarkdownProfile, MarkdownRenderer, MarkdownWarning, OcrPolicy,
99    PdfMarkdownBuilder, PdfMarkdownExportBuilder, PdfMarkdownProcessor, TablePolicy,
100};
101
102// --- 表格检测(可选) ---
103#[cfg(feature = "markdown-table")]
104pub use easypdf_markdown::table::{ColumnSeparator, TableDetectionConfig, TableDetectorProcessor};
105
106// --- OCR 管道(可选) ---
107#[cfg(feature = "ocr")]
108pub use easypdf_markdown::ocr::{
109    OcrConfig, OcrEngine, OcrImage, OcrProcessor, OcrResult, OcrTrigger, WordBox,
110};
111
112// --- OCR 引擎(可选) ---
113#[cfg(feature = "ocr")]
114pub use easypdf_ocr::{
115    AuthMethod as OcrAuthMethod, BackoffStrategy, HttpClientConfig as OcrHttpClientConfig,
116    HttpOcrEngine, OcrHttpError, RateLimitConfig,
117};
118
119// --- 渲染(可选) ---
120#[cfg(feature = "render")]
121pub use easypdf_markdown::render::error::RenderError;
122#[cfg(feature = "render")]
123pub use easypdf_markdown::render::{
124    Background, PdfRenderer, RenderBackend, RenderConfig, RenderedImage,
125};
126
127// --- Resident 守护进程(可选) ---
128#[cfg(feature = "resident")]
129pub use easypdf_runtime::resident::serve as resident_serve;
130#[cfg(feature = "resident")]
131pub use easypdf_runtime::resident::try_attach as resident_try_attach;
132#[cfg(feature = "resident")]
133pub use easypdf_runtime::resident::{AutosaveMode, ResidentClient, ResidentConfig, ResidentServer};
134
135// --- MCP 服务器(可选) ---
136#[cfg(feature = "mcp")]
137pub use easypdf_runtime::mcp::McpServer;
138
139// ======================================================================
140// 内部模块
141// ======================================================================
142
143mod builders;
144pub use builders::{
145    PdfCreateBuilder, PdfImageBuilder, PdfManipulateBuilder, PdfPositionedTextBuilder,
146    PdfReadBuilder, PdfSplitBuilder, PdfTableBuilder, PdfTextBuilder,
147};
148
149mod pdf_fill_builder;
150pub use pdf_fill_builder::PdfFillBuilder;
151
152mod writer_helpers;
153pub use writer_helpers::{PageNumberHandler, write_table};
154
155pub mod prelude;
156
157#[cfg(any(test, feature = "html"))]
158mod html;
159#[cfg(feature = "html")]
160pub use html::HtmlToPdfBuilder;
161#[cfg(test)]
162use html::markdown_to_html;
163mod crypto_facade;
164mod facade_features;
165
166mod easy_pdf;
167pub use easy_pdf::EasyPdf;
168
169#[cfg(test)]
170mod tests;