diff --git a/converter/converter.go b/converter/converter.go index 6639a4f..e2b04fd 100644 --- a/converter/converter.go +++ b/converter/converter.go @@ -127,54 +127,55 @@ func (c *Converter) Convert(files ...models.File) error { } // Convert converts all given input files -func (c *Converter) ConvertHtml(html []byte, outputPath string) error { +func (c *Converter) ConvertHtmls(htmls ...models.Html) error { + for _, h := range htmls { + if len(h.Html) == 0 { + return fmt.Errorf("no .html input provided") + } else if h.Output == "" || filepath.Ext(h.Output) != ".pdf" { + return fmt.Errorf("no .pdf output file path provided: %s", h.Output) + } - if len(html) == 0 { - return fmt.Errorf("no .html input provided") - } else if outputPath == "" || filepath.Ext(outputPath) != ".pdf" { - return fmt.Errorf("no .pdf output file path provided: %s", outputPath) - } + taskCtx, taskCancel := chromedp.NewContext(c.browserCtx) + timeoutCtx, timeoutCancel := context.WithTimeout(taskCtx, 60*time.Second) - taskCtx, taskCancel := chromedp.NewContext(c.browserCtx) - timeoutCtx, timeoutCancel := context.WithTimeout(taskCtx, 60*time.Second) + var pdfData []byte + err := chromedp.Run(timeoutCtx, + // Start with a blank page + chromedp.Navigate("about:blank"), + // Inject HTML directly + chromedp.ActionFunc(func(ctx context.Context) error { + frameTree, err := page.GetFrameTree().Do(ctx) + if err != nil { + return err + } - var pdfData []byte - err := chromedp.Run(timeoutCtx, - // Start with a blank page - chromedp.Navigate("about:blank"), - // Inject HTML directly - chromedp.ActionFunc(func(ctx context.Context) error { - frameTree, err := page.GetFrameTree().Do(ctx) - if err != nil { - return err - } + return page.SetDocumentContent(frameTree.Frame.ID, string(h.Html)).Do(ctx) + }), + chromedp.WaitReady("body", chromedp.ByQuery), + chromedp.ActionFunc(func(ctx context.Context) error { + buf, _, err := page.PrintToPDF(). + WithPrintBackground(true). + WithPaperWidth(8.27). + WithPaperHeight(11.69). + Do(ctx) + if err != nil { + return err + } + pdfData = buf + return nil + }), + ) - return page.SetDocumentContent(frameTree.Frame.ID, string(html)).Do(ctx) - }), - chromedp.WaitReady("body", chromedp.ByQuery), - chromedp.ActionFunc(func(ctx context.Context) error { - buf, _, err := page.PrintToPDF(). - WithPrintBackground(true). - WithPaperWidth(8.27). - WithPaperHeight(11.69). - Do(ctx) - if err != nil { - return err - } - pdfData = buf - return nil - }), - ) + timeoutCancel() + taskCancel() + if err != nil { + return err + } - timeoutCancel() - taskCancel() - if err != nil { - return err - } - - // Save PDF to file - if err := os.WriteFile(outputPath, pdfData, 0644); err != nil { - return err + // Save PDF to file + if err := os.WriteFile(h.Output, pdfData, 0644); err != nil { + return err + } } return nil } diff --git a/html2pdf_test.go b/html2pdf_test.go index 72670cb..ff520b2 100644 --- a/html2pdf_test.go +++ b/html2pdf_test.go @@ -94,7 +94,7 @@ func TestConvertHtml(t *testing.T) { } defer c.Close() - err = c.ConvertHtml(html, outputPath) + err = c.ConvertHtmls(models.Html{Html: html, Output: outputPath}) if err != nil { t.Fatalf("ConvertHtml failed: %v", err) }