-
-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Creating PDF files in a loop #38
Comments
Hi @zaky The library needs to be initialized only once, when the application starts. This should work fine: package main
import (
"log"
"os"
pdf "github.com/adrg/go-wkhtmltopdf"
)
func main() {
// Initialize library.
if err := pdf.Init(); err != nil {
log.Fatal(err)
}
defer pdf.Destroy()
for _, v := range []string{"import1.pdf", "import2.pdf", "import3.pdf"} {
if err := CreatePDFFile("header.html", "footer.html", "content.html", v); err != nil {
log.Fatal(err)
}
}
}
func CreatePDFFile(header, footer, content, output string) error {
// Create object from URLs.
object, err := pdf.NewObject(content)
if err != nil {
return err
}
defer object.Destroy()
object.Header.CustomLocation = header
object.Footer.CustomLocation = footer
// Create converter.
converter, err := pdf.NewConverter()
if err != nil {
return err
}
defer converter.Destroy()
converter.PaperSize = pdf.Letter
// Add created objects to the converter.
converter.Add(object)
// Convert objects and save the output PDF document.
outFile, err := os.Create(output)
if err != nil {
return err
}
defer outFile.Close()
// Run converter.
if err := converter.Run(outFile); err != nil {
return err
}
return nil
} |
Actually the code is part of a web server. |
For usage inside The library must be initialized on the main thread and the conversion must be performed on the main thread as well. This is a known limitation of |
I suppose, as mentioned in previous comment, this code block
in general cases prevents situation with library stuck |
func main() {
for _, v := range []string{"import1.pdf", "import2.pdf", "import3.pdf"} {
CreatePDFFile("header.html", "footer.html", "content.html", v)
}
}
func CreatePDFFile(header, footer, content, output string) error {
// Initialize library.
if err := pdf.Init(); err != nil {
log.Print("fail init", err)
}
Runing this code will create 1 valid file, the first one and two invalid files.
The text was updated successfully, but these errors were encountered: