pub struct PdfFromUrlRequest {
pub url: String,
pub filename: Option<String>,
pub waitsecs: Option<u64>,
pub landscape: Option<bool>,
pub download: Option<bool>,
pub print_background: Option<bool>,
}Expand description
Request parameters for converting a URL to PDF.
This struct represents the query parameters or request body for the
URL-to-PDF endpoint. All fields except url are optional with sensible
defaults.
§Required Fields
| Field | Type | Description |
|---|---|---|
url | String | The URL to convert (must be a valid HTTP/HTTPS URL) |
§Optional Fields
| Field | Type | Default | Description |
|---|---|---|---|
filename | Option<String> | "document.pdf" | Output filename for Content-Disposition header |
waitsecs | Option<u64> | 5 | Seconds to wait for JavaScript execution |
landscape | Option<bool> | false | Use landscape page orientation |
download | Option<bool> | false | Force download vs inline display |
print_background | Option<bool> | true | Include background colors/images |
§JavaScript Wait Behavior
The waitsecs parameter controls how long to wait for JavaScript to complete.
The service polls for window.isPageDone === true every 200ms. If your page
sets this flag, rendering completes immediately; otherwise, it waits the full
duration.
// In your web page, signal when rendering is complete:
window.isPageDone = true;§Examples
§Basic URL conversion
use html2pdf_api::service::PdfFromUrlRequest;
let request = PdfFromUrlRequest {
url: "https://example.com".to_string(),
..Default::default()
};
assert_eq!(request.filename_or_default(), "document.pdf");
assert_eq!(request.wait_duration().as_secs(), 5);§Landscape PDF with custom filename
use html2pdf_api::service::PdfFromUrlRequest;
let request = PdfFromUrlRequest {
url: "https://example.com/report".to_string(),
filename: Some("quarterly-report.pdf".to_string()),
landscape: Some(true),
waitsecs: Some(10), // Complex charts need more time
..Default::default()
};
assert!(request.is_landscape());
assert_eq!(request.wait_duration().as_secs(), 10);§Force download (vs inline display)
use html2pdf_api::service::PdfFromUrlRequest;
let request = PdfFromUrlRequest {
url: "https://example.com/invoice".to_string(),
filename: Some("invoice-2024.pdf".to_string()),
download: Some(true), // Forces "Content-Disposition: attachment"
..Default::default()
};
assert!(request.is_download());§HTTP API Usage
§As Query Parameters (GET request)
GET /pdf?url=https://example.com&filename=report.pdf&landscape=true&waitsecs=10§As JSON Body (POST request, if supported)
{
"url": "https://example.com",
"filename": "report.pdf",
"landscape": true,
"waitsecs": 10,
"download": false,
"print_background": true
}Fields§
§url: StringThe URL to convert to PDF.
Must be a valid HTTP or HTTPS URL. Relative URLs are not supported.
§Validation
The URL is validated using the url crate before processing.
Invalid URLs result in a PdfServiceError::InvalidUrl error.
§Examples
Valid URLs:
https://example.comhttps://example.com/path?query=valuehttp://localhost:3000/report
Invalid URLs:
example.com(missing scheme)/path/to/page(relative URL)- `` (empty string)
filename: Option<String>Output filename for the generated PDF.
This value is used in the Content-Disposition header. If not provided,
defaults to "document.pdf".
§Notes
- The filename should include the
.pdfextension - Special characters are not escaped; ensure valid filename characters
- The browser may modify the filename based on its own rules
waitsecs: Option<u64>Seconds to wait for JavaScript execution before generating the PDF.
Many modern web pages rely heavily on JavaScript for rendering content. This parameter controls the maximum wait time for the page to become ready.
§Behavior
- After navigation completes, the service waits up to
waitsecsseconds - Every 200ms, it checks if
window.isPageDone === true - If the flag is set, PDF generation begins immediately
- If timeout is reached, PDF generation proceeds anyway
§Default
5 seconds - suitable for most pages with moderate JavaScript.
§Recommendations
| Page Type | Recommended Value |
|---|---|
| Static HTML | 1-2 |
| Light JavaScript | 3-5 |
| Heavy SPA (React, Vue) | 5-10 |
| Complex charts/graphs | 10-15 |
landscape: Option<bool>Use landscape page orientation.
When true, the PDF is generated in landscape mode (wider than tall).
When false or not specified, portrait mode is used.
§Default
false (portrait orientation)
§Use Cases
- Wide tables or spreadsheets
- Horizontal charts and graphs
- Timeline visualizations
- Presentation slides
download: Option<bool>Force download instead of inline display.
Controls the Content-Disposition header behavior:
| Value | Header | Browser Behavior |
|---|---|---|
false (default) | inline; filename="..." | Display in browser |
true | attachment; filename="..." | Force download dialog |
§Default
false - PDF displays inline in the browser’s PDF viewer.
§Notes
Browser behavior may vary. Some browsers always download PDFs regardless of this setting, depending on user preferences.
print_background: Option<bool>Include background colors and images in the PDF.
When true, CSS background colors, background images, and other
background graphics are included in the PDF output.
§Default
true - backgrounds are included by default.
§Notes
Setting this to false can reduce file size and is useful for
print-friendly output where backgrounds are not desired.
Implementations§
Source§impl PdfFromUrlRequest
impl PdfFromUrlRequest
Sourcepub fn filename_or_default(&self) -> String
pub fn filename_or_default(&self) -> String
Returns the filename, using "document.pdf" as the default.
§Examples
use html2pdf_api::service::PdfFromUrlRequest;
let request = PdfFromUrlRequest::default();
assert_eq!(request.filename_or_default(), "document.pdf");
let request = PdfFromUrlRequest {
filename: Some("report.pdf".to_string()),
..Default::default()
};
assert_eq!(request.filename_or_default(), "report.pdf");Sourcepub fn wait_duration(&self) -> Duration
pub fn wait_duration(&self) -> Duration
Returns the JavaScript wait duration.
Defaults to 5 seconds if not specified.
§Examples
use html2pdf_api::service::PdfFromUrlRequest;
use std::time::Duration;
let request = PdfFromUrlRequest::default();
assert_eq!(request.wait_duration(), Duration::from_secs(5));
let request = PdfFromUrlRequest {
waitsecs: Some(10),
..Default::default()
};
assert_eq!(request.wait_duration(), Duration::from_secs(10));Sourcepub fn is_download(&self) -> bool
pub fn is_download(&self) -> bool
Returns whether download mode is enabled.
When true, the response includes Content-Disposition: attachment
to force a download. When false, uses inline for in-browser display.
§Examples
use html2pdf_api::service::PdfFromUrlRequest;
let request = PdfFromUrlRequest::default();
assert!(!request.is_download()); // Default is inline
let request = PdfFromUrlRequest {
download: Some(true),
..Default::default()
};
assert!(request.is_download());Sourcepub fn is_landscape(&self) -> bool
pub fn is_landscape(&self) -> bool
Returns whether landscape orientation is enabled.
§Examples
use html2pdf_api::service::PdfFromUrlRequest;
let request = PdfFromUrlRequest::default();
assert!(!request.is_landscape()); // Default is portrait
let request = PdfFromUrlRequest {
landscape: Some(true),
..Default::default()
};
assert!(request.is_landscape());Sourcepub fn print_background(&self) -> bool
pub fn print_background(&self) -> bool
Returns whether background printing is enabled.
§Examples
use html2pdf_api::service::PdfFromUrlRequest;
let request = PdfFromUrlRequest::default();
assert!(request.print_background()); // Default is true
let request = PdfFromUrlRequest {
print_background: Some(false),
..Default::default()
};
assert!(!request.print_background());Trait Implementations§
Source§impl Clone for PdfFromUrlRequest
impl Clone for PdfFromUrlRequest
Source§fn clone(&self) -> PdfFromUrlRequest
fn clone(&self) -> PdfFromUrlRequest
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PdfFromUrlRequest
impl Debug for PdfFromUrlRequest
Source§impl Default for PdfFromUrlRequest
impl Default for PdfFromUrlRequest
Source§fn default() -> PdfFromUrlRequest
fn default() -> PdfFromUrlRequest
Source§impl<'de> Deserialize<'de> for PdfFromUrlRequest
impl<'de> Deserialize<'de> for PdfFromUrlRequest
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for PdfFromUrlRequest
impl RefUnwindSafe for PdfFromUrlRequest
impl Send for PdfFromUrlRequest
impl Sync for PdfFromUrlRequest
impl Unpin for PdfFromUrlRequest
impl UnwindSafe for PdfFromUrlRequest
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);