Giter Site home page Giter Site logo

Creating PDF files in a loop about go-wkhtmltopdf HOT 4 OPEN

adrg avatar adrg commented on May 11, 2024
Creating PDF files in a loop

from go-wkhtmltopdf.

Comments (4)

adrg avatar adrg commented on May 11, 2024 1

For usage inside goroutines see the Basic web page to PDF conversion server or the Configurable web page to PDF conversion server examples. Issue #3 is also relevant.

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 wkhtmltox, not of this package.

from go-wkhtmltopdf.

adrg avatar adrg commented on May 11, 2024

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
}

from go-wkhtmltopdf.

zaky avatar zaky commented on May 11, 2024

Actually the code is part of a web server.
What I fount is that if I put the pdf.init/pdf.destroy in main the first request is working fine but not the following requests.
From the second request the server jut stock.

from go-wkhtmltopdf.

zbykovskyi avatar zbykovskyi commented on May 11, 2024

I suppose, as mentioned in previous comment, this code block

func init() {
	// Set main function to run on the main thread.
	runtime.LockOSThread()
}

in general cases prevents situation with library stuck

from go-wkhtmltopdf.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.