wkhtmltopdf-rs icon indicating copy to clipboard operation
wkhtmltopdf-rs copied to clipboard

Add more safe builder methods for setting global and object settings

Open anowell opened this issue 8 years ago • 3 comments

and figure out or report upstream other flags that don't seem to work (like outlineDepth)

anowell avatar Jul 29 '16 07:07 anowell

How would you pass other arguments to builder for wkhtmltopdf? Specifically I would like to pass --user-style-sheet

derrickcope avatar Aug 09 '19 08:08 derrickcope

@anowell could you please confirm the desired way to add command line arguments that don't have a safe rust function.

Is using fn global_setting() the way to go about this?

let html = r##"<!DOCTYPE html><html><head><meta charset="utf-8"></head><body>Hello World</body></html>"##

unsafe {
    let pdf_app = PdfApplication::new().expect("Failed to init PDF application");
    let mut pdfout = pdf_app
        .builder()
        .global_setting("encoding","UTF-8")
        .build_from_html(&html)
        .expect("failed to build pdf");
}

craigmayhew avatar May 08 '21 08:05 craigmayhew

I think global_settings would only work for the fields defined on the PdfGlobal object in the upstream project (also documented as Pdf Global Settings which includes the load.* settings).

The web settings (e.g. encoding and stylesheet) appear to be on the PdfObject. So while I haven't tested it, I'd expect to use: .object_setting("web.defaultEncoding", "UTF-8") and .object_setting("web.userStyleSheet") to accomplish the questions in this issue.

And if those are correct, it should be pretty trivial to add the safe builder methods:

  pub fn default_encoding(&mut self, encoding: &str) -> &mut PdfBuilder {
        self.os.insert("web.defaultEncoding", encoding.to_string().into());
        self
    } 

  
  pub fn user_style_sheet<P: AsRef<Path>>(&mut self, style_sheet: P) -> &mut PdfBuilder {
        self.os.insert("web.userStyleSheet", style_sheet.as_ref().to_string().into());
        self
    }

anowell avatar May 14 '21 05:05 anowell