mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-08-08 08:32:16 +01:00
79 lines
2.2 KiB
Go
79 lines
2.2 KiB
Go
package gotenberg
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
"strconv"
|
|
)
|
|
|
|
// HTMLRequest facilitates HTML conversion
|
|
// with the Gotenberg API.
|
|
type HTMLRequest struct {
|
|
IndexFilePath string
|
|
AssetFilePaths []string
|
|
Options *HTMLOptions
|
|
}
|
|
|
|
// HTMLOptions gathers all options
|
|
// for HTML conversion with the Gotenberg API.
|
|
type HTMLOptions struct {
|
|
WebHookURL string
|
|
HeaderFilePath string
|
|
FooterFilePath string
|
|
PaperSize [2]float64
|
|
PaperMargins [4]float64
|
|
Landscape bool
|
|
}
|
|
|
|
func (html *HTMLRequest) validate() error {
|
|
if !fileExists(html.IndexFilePath) {
|
|
return fmt.Errorf("%s: index file does not exist", html.IndexFilePath)
|
|
}
|
|
if html.Options.HeaderFilePath != "" && !fileExists(html.Options.HeaderFilePath) {
|
|
return fmt.Errorf("%s: header file does not exist", html.Options.HeaderFilePath)
|
|
}
|
|
if html.Options.FooterFilePath != "" && !fileExists(html.Options.FooterFilePath) {
|
|
return fmt.Errorf("%s: footer file does not exist", html.Options.FooterFilePath)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (html *HTMLRequest) getPostURL() string {
|
|
return "/convert/html"
|
|
}
|
|
|
|
func (html *HTMLRequest) getFormValues() map[string]string {
|
|
if html.Options == nil {
|
|
html.Options = &HTMLOptions{}
|
|
}
|
|
values := make(map[string]string)
|
|
values[webhookURL] = html.Options.WebHookURL
|
|
values[paperWidth] = fmt.Sprintf("%f", html.Options.PaperSize[0])
|
|
values[paperHeight] = fmt.Sprintf("%f", html.Options.PaperSize[1])
|
|
values[marginTop] = fmt.Sprintf("%f", html.Options.PaperMargins[0])
|
|
values[marginBottom] = fmt.Sprintf("%f", html.Options.PaperMargins[1])
|
|
values[marginLeft] = fmt.Sprintf("%f", html.Options.PaperMargins[2])
|
|
values[marginRight] = fmt.Sprintf("%f", html.Options.PaperMargins[3])
|
|
values[landscape] = strconv.FormatBool(html.Options.Landscape)
|
|
return values
|
|
}
|
|
|
|
func (html *HTMLRequest) getFormFiles() map[string]string {
|
|
if html.Options == nil {
|
|
html.Options = &HTMLOptions{}
|
|
}
|
|
files := make(map[string]string)
|
|
files["index.html"] = html.IndexFilePath
|
|
files["header.html"] = html.Options.HeaderFilePath
|
|
files["footer.html"] = html.Options.FooterFilePath
|
|
for _, fpath := range html.AssetFilePaths {
|
|
files[filepath.Base(fpath)] = fpath
|
|
}
|
|
return files
|
|
}
|
|
|
|
// Compile-time checks to ensure type implements desired interfaces.
|
|
var (
|
|
_ = Request(new(HTMLRequest))
|
|
)
|