Skip to main content

DocumentBuilder

Struct DocumentBuilder 

Source
pub struct DocumentBuilder { /* private fields */ }
Expand description

High-level builder for creating complete PDF documents.

Implementations§

Source§

impl DocumentBuilder

Source

pub fn new() -> DocumentBuilder

Create a new document builder.

Examples found in repository?
examples/create_pdf.rs (line 11)
7fn main() -> Result<(), Box<dyn std::error::Error>> {
8    let args: Vec<String> = std::env::args().collect();
9    let output = args.get(1).map(|s| s.as_str()).unwrap_or("created.pdf");
10
11    let mut builder = DocumentBuilder::new();
12    builder.set_title("Created by justpdf");
13    builder.set_author("justpdf example");
14
15    let font = builder.add_standard_font("Helvetica");
16
17    // Page 1
18    let mut page1 = PageBuilder::new(612.0, 792.0);
19    page1.add_font(&font, "Helvetica");
20    page1.begin_text();
21    page1.set_font(&font, 36.0);
22    page1.move_to(72.0, 700.0);
23    page1.show_text("Hello, justpdf!");
24    page1.end_text();
25
26    page1.begin_text();
27    page1.set_font(&font, 14.0);
28    page1.move_to(72.0, 650.0);
29    page1.show_text("This PDF was created with the justpdf Rust library.");
30    page1.end_text();
31
32    // Draw a rectangle
33    page1.set_fill_rgb(0.2, 0.4, 0.8);
34    page1.fill_rect(72.0, 500.0, 468.0, 2.0);
35
36    builder.add_page(page1);
37
38    // Page 2
39    let mut page2 = PageBuilder::new(612.0, 792.0);
40    page2.add_font(&font, "Helvetica");
41    page2.begin_text();
42    page2.set_font(&font, 24.0);
43    page2.move_to(72.0, 700.0);
44    page2.show_text("Page 2");
45    page2.end_text();
46    builder.add_page(page2);
47
48    let bytes = builder.build()?;
49    std::fs::write(output, &bytes)?;
50    println!("Created {output} ({} bytes, 2 pages)", bytes.len());
51
52    Ok(())
53}
Source

pub fn add_standard_font(&mut self, base_font: &str) -> String

Add a standard Type1 font (e.g. “Helvetica”, “Times-Roman”, “Courier”).

Returns the resource name (e.g. “F1”) to use when drawing text.

Examples found in repository?
examples/create_pdf.rs (line 15)
7fn main() -> Result<(), Box<dyn std::error::Error>> {
8    let args: Vec<String> = std::env::args().collect();
9    let output = args.get(1).map(|s| s.as_str()).unwrap_or("created.pdf");
10
11    let mut builder = DocumentBuilder::new();
12    builder.set_title("Created by justpdf");
13    builder.set_author("justpdf example");
14
15    let font = builder.add_standard_font("Helvetica");
16
17    // Page 1
18    let mut page1 = PageBuilder::new(612.0, 792.0);
19    page1.add_font(&font, "Helvetica");
20    page1.begin_text();
21    page1.set_font(&font, 36.0);
22    page1.move_to(72.0, 700.0);
23    page1.show_text("Hello, justpdf!");
24    page1.end_text();
25
26    page1.begin_text();
27    page1.set_font(&font, 14.0);
28    page1.move_to(72.0, 650.0);
29    page1.show_text("This PDF was created with the justpdf Rust library.");
30    page1.end_text();
31
32    // Draw a rectangle
33    page1.set_fill_rgb(0.2, 0.4, 0.8);
34    page1.fill_rect(72.0, 500.0, 468.0, 2.0);
35
36    builder.add_page(page1);
37
38    // Page 2
39    let mut page2 = PageBuilder::new(612.0, 792.0);
40    page2.add_font(&font, "Helvetica");
41    page2.begin_text();
42    page2.set_font(&font, 24.0);
43    page2.move_to(72.0, 700.0);
44    page2.show_text("Page 2");
45    page2.end_text();
46    builder.add_page(page2);
47
48    let bytes = builder.build()?;
49    std::fs::write(output, &bytes)?;
50    println!("Created {output} ({} bytes, 2 pages)", bytes.len());
51
52    Ok(())
53}
Source

pub fn add_page(&mut self, page: PageBuilder)

Add a page to the document from a PageBuilder.

Examples found in repository?
examples/create_pdf.rs (line 36)
7fn main() -> Result<(), Box<dyn std::error::Error>> {
8    let args: Vec<String> = std::env::args().collect();
9    let output = args.get(1).map(|s| s.as_str()).unwrap_or("created.pdf");
10
11    let mut builder = DocumentBuilder::new();
12    builder.set_title("Created by justpdf");
13    builder.set_author("justpdf example");
14
15    let font = builder.add_standard_font("Helvetica");
16
17    // Page 1
18    let mut page1 = PageBuilder::new(612.0, 792.0);
19    page1.add_font(&font, "Helvetica");
20    page1.begin_text();
21    page1.set_font(&font, 36.0);
22    page1.move_to(72.0, 700.0);
23    page1.show_text("Hello, justpdf!");
24    page1.end_text();
25
26    page1.begin_text();
27    page1.set_font(&font, 14.0);
28    page1.move_to(72.0, 650.0);
29    page1.show_text("This PDF was created with the justpdf Rust library.");
30    page1.end_text();
31
32    // Draw a rectangle
33    page1.set_fill_rgb(0.2, 0.4, 0.8);
34    page1.fill_rect(72.0, 500.0, 468.0, 2.0);
35
36    builder.add_page(page1);
37
38    // Page 2
39    let mut page2 = PageBuilder::new(612.0, 792.0);
40    page2.add_font(&font, "Helvetica");
41    page2.begin_text();
42    page2.set_font(&font, 24.0);
43    page2.move_to(72.0, 700.0);
44    page2.show_text("Page 2");
45    page2.end_text();
46    builder.add_page(page2);
47
48    let bytes = builder.build()?;
49    std::fs::write(output, &bytes)?;
50    println!("Created {output} ({} bytes, 2 pages)", bytes.len());
51
52    Ok(())
53}
Source

pub fn set_title(&mut self, title: &str)

Set the document title.

Examples found in repository?
examples/create_pdf.rs (line 12)
7fn main() -> Result<(), Box<dyn std::error::Error>> {
8    let args: Vec<String> = std::env::args().collect();
9    let output = args.get(1).map(|s| s.as_str()).unwrap_or("created.pdf");
10
11    let mut builder = DocumentBuilder::new();
12    builder.set_title("Created by justpdf");
13    builder.set_author("justpdf example");
14
15    let font = builder.add_standard_font("Helvetica");
16
17    // Page 1
18    let mut page1 = PageBuilder::new(612.0, 792.0);
19    page1.add_font(&font, "Helvetica");
20    page1.begin_text();
21    page1.set_font(&font, 36.0);
22    page1.move_to(72.0, 700.0);
23    page1.show_text("Hello, justpdf!");
24    page1.end_text();
25
26    page1.begin_text();
27    page1.set_font(&font, 14.0);
28    page1.move_to(72.0, 650.0);
29    page1.show_text("This PDF was created with the justpdf Rust library.");
30    page1.end_text();
31
32    // Draw a rectangle
33    page1.set_fill_rgb(0.2, 0.4, 0.8);
34    page1.fill_rect(72.0, 500.0, 468.0, 2.0);
35
36    builder.add_page(page1);
37
38    // Page 2
39    let mut page2 = PageBuilder::new(612.0, 792.0);
40    page2.add_font(&font, "Helvetica");
41    page2.begin_text();
42    page2.set_font(&font, 24.0);
43    page2.move_to(72.0, 700.0);
44    page2.show_text("Page 2");
45    page2.end_text();
46    builder.add_page(page2);
47
48    let bytes = builder.build()?;
49    std::fs::write(output, &bytes)?;
50    println!("Created {output} ({} bytes, 2 pages)", bytes.len());
51
52    Ok(())
53}
Source

pub fn set_author(&mut self, author: &str)

Set the document author.

Examples found in repository?
examples/create_pdf.rs (line 13)
7fn main() -> Result<(), Box<dyn std::error::Error>> {
8    let args: Vec<String> = std::env::args().collect();
9    let output = args.get(1).map(|s| s.as_str()).unwrap_or("created.pdf");
10
11    let mut builder = DocumentBuilder::new();
12    builder.set_title("Created by justpdf");
13    builder.set_author("justpdf example");
14
15    let font = builder.add_standard_font("Helvetica");
16
17    // Page 1
18    let mut page1 = PageBuilder::new(612.0, 792.0);
19    page1.add_font(&font, "Helvetica");
20    page1.begin_text();
21    page1.set_font(&font, 36.0);
22    page1.move_to(72.0, 700.0);
23    page1.show_text("Hello, justpdf!");
24    page1.end_text();
25
26    page1.begin_text();
27    page1.set_font(&font, 14.0);
28    page1.move_to(72.0, 650.0);
29    page1.show_text("This PDF was created with the justpdf Rust library.");
30    page1.end_text();
31
32    // Draw a rectangle
33    page1.set_fill_rgb(0.2, 0.4, 0.8);
34    page1.fill_rect(72.0, 500.0, 468.0, 2.0);
35
36    builder.add_page(page1);
37
38    // Page 2
39    let mut page2 = PageBuilder::new(612.0, 792.0);
40    page2.add_font(&font, "Helvetica");
41    page2.begin_text();
42    page2.set_font(&font, 24.0);
43    page2.move_to(72.0, 700.0);
44    page2.show_text("Page 2");
45    page2.end_text();
46    builder.add_page(page2);
47
48    let bytes = builder.build()?;
49    std::fs::write(output, &bytes)?;
50    println!("Created {output} ({} bytes, 2 pages)", bytes.len());
51
52    Ok(())
53}
Source

pub fn set_subject(&mut self, subject: &str)

Set the document subject.

Source

pub fn set_producer(&mut self, producer: &str)

Set the producer field.

Source

pub fn set_creator(&mut self, creator: &str)

Set the creator field.

Source

pub fn embed_truetype_font( &mut self, font_data: &[u8], ) -> Result<String, JustPdfError>

Embed a TrueType font from raw TTF data.

Returns the resource name (e.g. “F1”, “F2”) for use in page content. The font is embedded with WinAnsiEncoding and a ToUnicode CMap.

Source

pub fn set_encryption(&mut self, config: EncryptionConfig)

Set encryption for the document.

Source

pub fn set_xmp_metadata( &mut self, title: &str, author: &str, subject: &str, creator: &str, )

Set XMP metadata on the document catalog.

Generates an XMP XML metadata stream with the given fields and attaches it to the Catalog as /Metadata.

Source

pub fn build(self) -> Result<Vec<u8>, JustPdfError>

Build the document and return the PDF bytes.

Examples found in repository?
examples/create_pdf.rs (line 48)
7fn main() -> Result<(), Box<dyn std::error::Error>> {
8    let args: Vec<String> = std::env::args().collect();
9    let output = args.get(1).map(|s| s.as_str()).unwrap_or("created.pdf");
10
11    let mut builder = DocumentBuilder::new();
12    builder.set_title("Created by justpdf");
13    builder.set_author("justpdf example");
14
15    let font = builder.add_standard_font("Helvetica");
16
17    // Page 1
18    let mut page1 = PageBuilder::new(612.0, 792.0);
19    page1.add_font(&font, "Helvetica");
20    page1.begin_text();
21    page1.set_font(&font, 36.0);
22    page1.move_to(72.0, 700.0);
23    page1.show_text("Hello, justpdf!");
24    page1.end_text();
25
26    page1.begin_text();
27    page1.set_font(&font, 14.0);
28    page1.move_to(72.0, 650.0);
29    page1.show_text("This PDF was created with the justpdf Rust library.");
30    page1.end_text();
31
32    // Draw a rectangle
33    page1.set_fill_rgb(0.2, 0.4, 0.8);
34    page1.fill_rect(72.0, 500.0, 468.0, 2.0);
35
36    builder.add_page(page1);
37
38    // Page 2
39    let mut page2 = PageBuilder::new(612.0, 792.0);
40    page2.add_font(&font, "Helvetica");
41    page2.begin_text();
42    page2.set_font(&font, 24.0);
43    page2.move_to(72.0, 700.0);
44    page2.show_text("Page 2");
45    page2.end_text();
46    builder.add_page(page2);
47
48    let bytes = builder.build()?;
49    std::fs::write(output, &bytes)?;
50    println!("Created {output} ({} bytes, 2 pages)", bytes.len());
51
52    Ok(())
53}
Source

pub fn save(self, path: &Path) -> Result<(), JustPdfError>

Build the document and save to a file.

Trait Implementations§

Source§

impl Default for DocumentBuilder

Source§

fn default() -> DocumentBuilder

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V