beet_cli/commands/
export_pdf.rs1use beet::prelude::*;
2use clap::Parser;
3
4#[derive(Debug, Clone, Parser)]
6pub struct ExportPdf {
7 #[clap(long = "no-margin")]
10 pub no_margin: bool,
11 pub input: String,
12 #[clap(short = 'o', long = "output",
14 default_value = "file.pdf",
15 value_parser = clap::value_parser!(std::path::PathBuf))]
16 pub output: std::path::PathBuf,
17 #[clap(short = 'r', long = "ranges")]
19 pub page_ranges: Vec<String>,
20}
21
22impl ExportPdf {
23 #[allow(unused)]
24 pub async fn run(self) -> Result {
25 App::default()
26 .run_io_task(async move {
27 let mut opts = PdfOptions {
28 page_ranges: self.page_ranges,
29 ..default()
30 };
31 if self.no_margin {
32 opts.margin = PdfMargin::none();
33 }
34
35
36 let (proc, page) = Page::visit(&self.input).await?;
37 let bytes = page.export_pdf_with_options(&opts).await?;
38 fs_ext::write_async(self.output, bytes).await?;
39 Ok(())
40 })
41 .await
42 }
43}