Skip to content

Commit

Permalink
printpdf1: Add my_pdf mod
Browse files Browse the repository at this point in the history
  • Loading branch information
bouzuya committed Dec 14, 2023
1 parent d436fb7 commit 616ba5d
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 1 deletion.
10 changes: 9 additions & 1 deletion printpdf1/src/main.rs
@@ -1,8 +1,11 @@
mod my_pdf;

use printpdf::*;
use std::fs::File;
use std::io::BufWriter;

fn main() -> anyhow::Result<()> {
#[allow(dead_code)]
fn f1() -> anyhow::Result<()> {
let (doc, _page1, _layer1) =
PdfDocument::new("PDF_Document_title", Mm(247.0), Mm(210.0), "Layer 1");
let (_page2, _layer1) = doc.add_page(Mm(10.0), Mm(250.0), "Page 2, Layer 1");
Expand All @@ -12,3 +15,8 @@ fn main() -> anyhow::Result<()> {
))?;
Ok(())
}

fn main() -> anyhow::Result<()> {
my_pdf::main()?;
Ok(())
}
73 changes: 73 additions & 0 deletions printpdf1/src/my_pdf.rs
@@ -0,0 +1,73 @@
use std::{
fs::File,
io::{BufWriter, Write},
};

use printpdf::{
Line, Mm, PdfDocument, PdfDocumentReference, PdfLayerIndex, PdfLayerReference, PdfPageIndex,
Point,
};

pub struct MyPdfDocument {
pdf_document_reference: PdfDocumentReference,
pdf_page_index: PdfPageIndex,
pdf_layer_index: PdfLayerIndex,
}

impl MyPdfDocument {
fn new<P1, P2, S1, S2>(
document_title: S1,
initial_page_width: P1,
initial_page_height: P2,
initial_layer_name: S2,
) -> MyPdfDocument
where
P1: Into<Mm>,
P2: Into<Mm>,
S1: Into<String>,
S2: Into<String>,
{
let (pdf_document_reference, pdf_page_index, pdf_layer_index) = PdfDocument::new(
document_title,
initial_page_width.into(),
initial_page_height.into(),
initial_layer_name,
);
Self {
pdf_document_reference,
pdf_page_index,
pdf_layer_index,
}
}

pub fn f1(&self) -> anyhow::Result<()> {
let pdf_layer_reference = self.get_current_layer();
pdf_layer_reference.add_line(Line {
points: vec![
(Point::new(Mm(10.0), Mm(10.0)), false),
(Point::new(Mm(20.0), Mm(10.0)), false),
],
is_closed: false,
});
Ok(())
}

pub fn get_current_layer(&self) -> PdfLayerReference {
let pdf_page_reference = self.pdf_document_reference.get_page(self.pdf_page_index);
pdf_page_reference.get_layer(self.pdf_layer_index)
}

pub fn into_bytes(self) -> anyhow::Result<Vec<u8>> {
Ok(self.pdf_document_reference.save_to_bytes()?)
}
}

pub fn main() -> anyhow::Result<()> {
let doc = MyPdfDocument::new("PDF_Document_title", Mm(247.0), Mm(210.0), "Layer 1");

doc.f1()?;

let mut writer = BufWriter::new(File::create("test_working.pdf")?);
writer.write_all(&doc.into_bytes()?)?;
Ok(())
}

0 comments on commit 616ba5d

Please sign in to comment.