beet_cli/commands/
export_pdf.rs

1use beet::prelude::*;
2use clap::Parser;
3
4/// Build the project
5#[derive(Debug, Clone, Parser)]
6pub struct ExportPdf {
7	/// Input url (positional)
8	/// Disable margins
9	#[clap(long = "no-margin")]
10	pub no_margin: bool,
11	pub input: String,
12	/// Output file (-o, --output)
13	#[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	/// Page ranges to export, e.g. "1-5, 8, 11-13", or leave empty to export all
18	#[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}