mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-08-16 12:22:17 +01:00
now using latest version of unoconv, allowing to specify paper size and orientation + updating go client (#24)
This commit is contained in:
124
pkg/markdown.go
124
pkg/markdown.go
@@ -9,73 +9,102 @@ import (
|
||||
// MarkdownRequest facilitates Markdown conversion
|
||||
// with the Gotenberg API.
|
||||
type MarkdownRequest struct {
|
||||
IndexFilePath string
|
||||
MarkdownFilePaths []string
|
||||
AssetFilePaths []string
|
||||
Options *MarkdownOptions
|
||||
indexFilePath string
|
||||
markdownFilePaths []string
|
||||
headerFilePath string
|
||||
footerFilePath string
|
||||
assetFilePaths []string
|
||||
values map[string]string
|
||||
}
|
||||
|
||||
// MarkdownOptions gathers all options
|
||||
// for Markdown conversion with the Gotenberg API.
|
||||
type MarkdownOptions struct {
|
||||
WebHookURL string
|
||||
HeaderFilePath string
|
||||
FooterFilePath string
|
||||
PaperSize [2]float64
|
||||
PaperMargins [4]float64
|
||||
Landscape bool
|
||||
}
|
||||
|
||||
func (markdown *MarkdownRequest) validate() error {
|
||||
if !fileExists(markdown.IndexFilePath) {
|
||||
return fmt.Errorf("%s: index file does not exist", markdown.IndexFilePath)
|
||||
// NewMarkdownRequest create MarkdownRequest.
|
||||
func NewMarkdownRequest(indexFilePath string, markdownFilePaths []string) (*MarkdownRequest, error) {
|
||||
if !fileExists(indexFilePath) {
|
||||
return nil, fmt.Errorf("%s: index file does not exist", indexFilePath)
|
||||
}
|
||||
if markdown.Options.HeaderFilePath != "" && !fileExists(markdown.Options.HeaderFilePath) {
|
||||
return fmt.Errorf("%s: header file does not exist", markdown.Options.HeaderFilePath)
|
||||
}
|
||||
if markdown.Options.FooterFilePath != "" && !fileExists(markdown.Options.FooterFilePath) {
|
||||
return fmt.Errorf("%s: footer file does not exist", markdown.Options.FooterFilePath)
|
||||
}
|
||||
for _, fpath := range markdown.MarkdownFilePaths {
|
||||
for _, fpath := range markdownFilePaths {
|
||||
if !fileExists(fpath) {
|
||||
return fmt.Errorf("%s: markdown file does not exist", fpath)
|
||||
return nil, fmt.Errorf("%s: markdown file does not exist", fpath)
|
||||
}
|
||||
}
|
||||
return &MarkdownRequest{
|
||||
indexFilePath: indexFilePath,
|
||||
markdownFilePaths: markdownFilePaths,
|
||||
values: make(map[string]string),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// SetWebhookURL sets webhookURL form field.
|
||||
func (markdown *MarkdownRequest) SetWebhookURL(webhookURL string) {
|
||||
markdown.values[webhookURL] = webhookURL
|
||||
}
|
||||
|
||||
// SetHeader sets header form file.
|
||||
func (markdown *MarkdownRequest) SetHeader(fpath string) error {
|
||||
if !fileExists(fpath) {
|
||||
return fmt.Errorf("%s: header file does not exist", fpath)
|
||||
}
|
||||
markdown.headerFilePath = fpath
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetFooter sets footer form file.
|
||||
func (markdown *MarkdownRequest) SetFooter(fpath string) error {
|
||||
if !fileExists(fpath) {
|
||||
return fmt.Errorf("%s: footer file does not exist", fpath)
|
||||
}
|
||||
markdown.footerFilePath = fpath
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetAssets sets assets form files.
|
||||
func (markdown *MarkdownRequest) SetAssets(fpaths []string) error {
|
||||
for _, fpath := range fpaths {
|
||||
if !fileExists(fpath) {
|
||||
return fmt.Errorf("%s: file does not exist", fpath)
|
||||
}
|
||||
}
|
||||
markdown.assetFilePaths = fpaths
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetPaperSize sets paperWidth and paperHeight form fields.
|
||||
func (markdown *MarkdownRequest) SetPaperSize(size [2]float64) {
|
||||
markdown.values[paperWidth] = fmt.Sprintf("%f", size[0])
|
||||
markdown.values[paperHeight] = fmt.Sprintf("%f", size[1])
|
||||
}
|
||||
|
||||
// SetMargins sets marginTop, marginBottom,
|
||||
// marginLeft and marginRight form fields.
|
||||
func (markdown *MarkdownRequest) SetMargins(margins [4]float64) {
|
||||
markdown.values[marginTop] = fmt.Sprintf("%f", margins[0])
|
||||
markdown.values[marginBottom] = fmt.Sprintf("%f", margins[1])
|
||||
markdown.values[marginLeft] = fmt.Sprintf("%f", margins[2])
|
||||
markdown.values[marginRight] = fmt.Sprintf("%f", margins[3])
|
||||
}
|
||||
|
||||
// SetLandscape sets landscape form field.
|
||||
func (markdown *MarkdownRequest) SetLandscape(isLandscape bool) {
|
||||
markdown.values[landscape] = strconv.FormatBool(isLandscape)
|
||||
}
|
||||
|
||||
func (markdown *MarkdownRequest) getPostURL() string {
|
||||
return "/convert/markdown"
|
||||
}
|
||||
|
||||
func (markdown *MarkdownRequest) getFormValues() map[string]string {
|
||||
if markdown.Options == nil {
|
||||
markdown.Options = &MarkdownOptions{}
|
||||
}
|
||||
values := make(map[string]string)
|
||||
values[webhookURL] = markdown.Options.WebHookURL
|
||||
values[paperWidth] = fmt.Sprintf("%f", markdown.Options.PaperSize[0])
|
||||
values[paperHeight] = fmt.Sprintf("%f", markdown.Options.PaperSize[1])
|
||||
values[marginTop] = fmt.Sprintf("%f", markdown.Options.PaperMargins[0])
|
||||
values[marginBottom] = fmt.Sprintf("%f", markdown.Options.PaperMargins[1])
|
||||
values[marginLeft] = fmt.Sprintf("%f", markdown.Options.PaperMargins[2])
|
||||
values[marginRight] = fmt.Sprintf("%f", markdown.Options.PaperMargins[3])
|
||||
values[landscape] = strconv.FormatBool(markdown.Options.Landscape)
|
||||
return values
|
||||
return markdown.values
|
||||
}
|
||||
|
||||
func (markdown *MarkdownRequest) getFormFiles() map[string]string {
|
||||
if markdown.Options == nil {
|
||||
markdown.Options = &MarkdownOptions{}
|
||||
}
|
||||
files := make(map[string]string)
|
||||
files["index.html"] = markdown.IndexFilePath
|
||||
files["header.html"] = markdown.Options.HeaderFilePath
|
||||
files["footer.html"] = markdown.Options.FooterFilePath
|
||||
for _, fpath := range markdown.MarkdownFilePaths {
|
||||
files["index.html"] = markdown.indexFilePath
|
||||
files["header.html"] = markdown.headerFilePath
|
||||
files["footer.html"] = markdown.footerFilePath
|
||||
for _, fpath := range markdown.markdownFilePaths {
|
||||
files[filepath.Base(fpath)] = fpath
|
||||
}
|
||||
for _, fpath := range markdown.AssetFilePaths {
|
||||
for _, fpath := range markdown.assetFilePaths {
|
||||
files[filepath.Base(fpath)] = fpath
|
||||
}
|
||||
return files
|
||||
@@ -84,4 +113,5 @@ func (markdown *MarkdownRequest) getFormFiles() map[string]string {
|
||||
// Compile-time checks to ensure type implements desired interfaces.
|
||||
var (
|
||||
_ = Request(new(MarkdownRequest))
|
||||
_ = ChromeRequest(new(MarkdownRequest))
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user