func (c *Client) PostContext(ctx context.Context, req Request) (*http.Response, error) {
	body, contentType, err := multipartForm(req)
	if err != nil {
		return nil, err
	}
	if c.HTTPClient == nil {
		c.HTTPClient = &http.Client{}
	}
	URL := fmt.Sprintf("%s%s", c.Hostname, req.postURL())
	httpReq, err := http.NewRequestWithContext(ctx, http.MethodPost, URL, body)
	if err != nil {
		return nil, err
	}
	httpReq.Header.Set("Content-Type", contentType)
	for key, value := range req.customHTTPHeaders() {
		httpReq.Header.Set(key, value)
	}
	resp, err := c.HTTPClient.Do(httpReq)  
	if err != nil {
		return nil, err
	}
	return resp, nil
}
PostContext sends a request to the Gotenberg API
and returns the response.
The created HTTP request can be canceled by the passed context.
package gotenberg
import (
	"bytes"
	"context"
	"errors"
	"fmt"
	"io"
	"mime/multipart"
	"net/http"
	"os"
	"path/filepath"
	"runtime"
	"strconv"
)
const (
	resultFilename              string = "resultFilename"
	waitTimeout                 string = "waitTimeout"
	webhookURL                  string = "webhookURL"
	webhookURLTimeout           string = "webhookURLTimeout"
	webhookURLBaseHTTPHeaderKey string = "Gotenberg-Webhookurl-"
)
type Client struct {
	Hostname   string
	HTTPClient *http.Client
}
type Request interface {
	postURL() string
	customHTTPHeaders() map[string]string
	formValues() map[string]string
	formFiles() map[string]Document
}
type request struct {
	httpHeaders map[string]string
	values      map[string]string
}
func newRequest() *request {
	return &request{
		httpHeaders: make(map[string]string),
		values:      make(map[string]string),
	}
}
func (req *request) ResultFilename(filename string) {
	req.values[resultFilename] = filename
}
func (req *request) WaitTimeout(timeout float64) {
	req.values[waitTimeout] = strconv.FormatFloat(timeout, 'f', 2, 64)
}
func (req *request) WebhookURL(url string) {
	req.values[webhookURL] = url
}
func (req *request) WebhookURLTimeout(timeout float64) {
	req.values[webhookURLTimeout] = strconv.FormatFloat(timeout, 'f', 2, 64)
}
func (req *request) AddWebhookURLHTTPHeader(key, value string) {
	key = fmt.Sprintf("%s%s", webhookURLBaseHTTPHeaderKey, key)
	req.httpHeaders[key] = value
}
func (req *request) customHTTPHeaders() map[string]string {
	return req.httpHeaders
}
func (req *request) formValues() map[string]string {
	return req.values
}
func (c *Client) Post(req Request) (*http.Response, error) {
	return c.PostContext(context.Background(), req)
}