mirror of
https://github.com/derfenix/webarchive.git
synced 2026-03-11 21:35:34 +03:00
53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package processors
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/SebastiaanKlippert/go-wkhtmltopdf"
|
|
|
|
"github.com/derfenix/webarchive/entity"
|
|
)
|
|
|
|
func NewPDF() *PDF {
|
|
return &PDF{}
|
|
}
|
|
|
|
type PDF struct{}
|
|
|
|
func (P *PDF) Process(_ context.Context, url string) ([]entity.File, error) {
|
|
gen, err := wkhtmltopdf.NewPDFGenerator()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("new pdf generator: %w", err)
|
|
}
|
|
|
|
gen.Dpi.Set(300)
|
|
gen.PageSize.Set(wkhtmltopdf.PageSizeA4)
|
|
gen.Orientation.Set(wkhtmltopdf.OrientationPortrait)
|
|
gen.Grayscale.Set(false)
|
|
gen.Title.Set(url)
|
|
|
|
page := wkhtmltopdf.NewPage(url)
|
|
page.JavascriptDelay.Set(200)
|
|
page.LoadMediaErrorHandling.Set("abort")
|
|
page.FooterRight.Set("[page]")
|
|
page.HeaderLeft.Set(url)
|
|
page.HeaderRight.Set(time.Now().Format(time.DateOnly))
|
|
page.FooterFontSize.Set(10)
|
|
page.Zoom.Set(1)
|
|
page.ViewportSize.Set("1920x1080")
|
|
|
|
gen.AddPage(page)
|
|
|
|
// Create PDF document in internal buffer
|
|
err = gen.Create()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("create pdf: %w", err)
|
|
}
|
|
|
|
file := entity.NewFile("page.pdf", gen.Bytes())
|
|
|
|
return []entity.File{file}, nil
|
|
}
|