mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-08-12 18:32:14 +01:00
v3.0.0 (#18)
This commit is contained in:
78
pkg/html.go
Normal file
78
pkg/html.go
Normal file
@@ -0,0 +1,78 @@
|
||||
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))
|
||||
)
|
||||
Reference in New Issue
Block a user