wkhtmltopdf Go bindings and high level interface for HTML to PDF conversion

go-wkhtmltopdf logo

wkhtmltopdf Go bindings and high level interface for HTML to PDF conversion.

Build status pkg.go.dev documentation MIT license Go report card Discord channel GitHub issues Buy me a coffee

Implements wkhtmltopdf Go bindings. It can be used to convert HTML documents to PDF files. The package does not use the wkhtmltopdf binary. Instead, it uses the wkhtmltox library directly.

Full documentation can be found at: https://pkg.go.dev/github.com/adrg/go-wkhtmltopdf.

Examples

Prerequisites

In order to use the package, wkhtmltox must be installed. Installation packages for multiple operating systems can be found at https://builds.wkhtmltopdf.org and https://github.com/wkhtmltopdf/packaging/releases.

On Debian based distributions, use dpkg to install the downloaded installation package.

sudo dpkg -i wkhtmltox.deb
sudo ldconfig

Installation

go get github.com/adrg/go-wkhtmltopdf

Usage

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()

	// Create object from file.
	object, err := pdf.NewObject("sample1.html")
	if err != nil {
		log.Fatal(err)
	}
	object.Header.ContentCenter = "[title]"
	object.Header.DisplaySeparator = true

	// Create object from URL.
	object2, err := pdf.NewObject("https://google.com")
	if err != nil {
		log.Fatal(err)
	}
	object.Footer.ContentLeft = "[date]"
	object.Footer.ContentCenter = "Sample footer information"
	object.Footer.ContentRight = "[page]"
	object.Footer.DisplaySeparator = true

	// Create object from reader.
	inFile, err := os.Open("sample2.html")
	if err != nil {
		log.Fatal(err)
	}
	defer inFile.Close()

	object3, err := pdf.NewObjectFromReader(inFile)
	if err != nil {
		log.Fatal(err)
	}
	object3.Zoom = 1.5
	object3.TOC.Title = "Table of Contents"

	// Create converter.
	converter, err := pdf.NewConverter()
	if err != nil {
		log.Fatal(err)
	}
	defer converter.Destroy()

	// Add created objects to the converter.
	converter.Add(object)
	converter.Add(object2)
	converter.Add(object3)

	// Set converter options.
	converter.Title = "Sample document"
	converter.PaperSize = pdf.A4
	converter.Orientation = pdf.Landscape
	converter.MarginTop = "1cm"
	converter.MarginBottom = "1cm"
	converter.MarginLeft = "10mm"
	converter.MarginRight = "10mm"

	// Convert objects and save the output PDF document.
	outFile, err := os.Create("out.pdf")
	if err != nil {
		log.Fatal(err)
	}
	defer outFile.Close()

	if err := converter.Run(outFile); err != nil {
		log.Fatal(err)
	}
}

Stargazers over time

Stargazers over time

Contributing

Contributions in the form of pull requests, issues or just general feedback, are always welcome. See CONTRIBUTING.MD.

Contributors: adrg, leandrosilva.

References

For more information see the wkhtmltopdf documentation and the wkhtmltox documentation.

License

Copyright (c) 2016 Adrian-George Bostan.

This project is licensed under the MIT license. See LICENSE for more details.

Comments
  • panic happens

    panic happens

    panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x4433cf4]

    goroutine 1 [running]: github.com/adrg/go-wkhtmltopdf.(*objectRegistry).add(0x0, 0x7b117c0, 0x44daf40, 0xc0001c3ab0) /Users/machel/gopath/pkg/mod/github.com/adrg/[email protected]/object_registry.go:39 +0x34 github.com/adrg/go-wkhtmltopdf.NewConverterWithOpts(0xc0001ab440, 0xc0001a9e90, 0xc00000ed40, 0x0) /Users/machel/gopath/pkg/mod/github.com/adrg/[email protected]/converter.go:276 +0x1e5 github.com/adrg/go-wkhtmltopdf.NewConverter(...) /Users/machel/gopath/pkg/mod/github.com/adrg/[email protected]/converter.go:235 main.HtmlCvtPdf(0x459dc00, 0xc00002c0a8, 0xc00002cb6c, 0x4, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0)

  • Two Objects with web url fail the rendering

    Two Objects with web url fail the rendering

    In the example present in readme.md, I made a small change. Added two urls, thus two objects. This fails with

    2021/10/06 12:09:50 could not convert the added objects

    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()
    
    	// Create object from file.
    	object, err := pdf.NewObject("https://google.com")
    	if err != nil {
    		log.Fatal(err)
    	}
    	object.Header.ContentCenter = "[title]"
    	object.Header.DisplaySeparator = true
    
    	// Create object from URL.
    	object2, err := pdf.NewObject("https://google.com")
    	if err != nil {
    		log.Fatal(err)
    	}
    	object.Footer.ContentLeft = "[date]"
    	object.Footer.ContentCenter = "Sample footer information"
    	object.Footer.ContentRight = "[page]"
    	object.Footer.DisplaySeparator = true
    
    
    	// Create converter.
    	converter, err := pdf.NewConverter()
    	if err != nil {
    		log.Fatal(err)
    	}
    	defer converter.Destroy()
    
    	// Add created objects to the converter.
    	converter.Add(object)
    	converter.Add(object2)
    
    	// Set converter options.
    	converter.Title = "Sample document"
    	converter.PaperSize = pdf.A4
    	converter.Orientation = pdf.Landscape
    	converter.MarginTop = "1cm"
    	converter.MarginBottom = "1cm"
    	converter.MarginLeft = "10mm"
    	converter.MarginRight = "10mm"
    
    	// Convert objects and save the output PDF document.
    	outFile, err := os.Create("out.pdf")
    	if err != nil {
    		log.Fatal(err)
    	}
    	defer outFile.Close()
    
    	if err := converter.Run(outFile); err != nil {
    		log.Fatal(err)
    	}
    }
    
    
  • Prerequisites Install Error

    Prerequisites Install Error

    Hello

    When I followed this instruction to install wkhtmltox in my Windows, some errors occured.

    1. I chose to install wkhtmltopdf in E:\wkhtmltox. image

    When I tried to use "go build" in cmd, I got the message as follows. It said "package .: no Go files in E:\wkhtmltox". How can I solve this problem?

    image

    1. Another issue may associate with the first problem.

    Although I "go build" failed, I still tried to run my program. Unfortunately, it did not work and gave me some error messages. How can I solve with it?

    Please Help me! Thank you!

    image

  • go-wkhtmltopdf missing wkhtmltox.dll

    go-wkhtmltopdf missing wkhtmltox.dll

    Hello,

    I'm building a program using go-wkhtmltopdf. I followed the install guide and installed the wkhtmltopdf as requested.

    When I run my program, I have the following err: the code cannot proceed because wkhtmltox.dll was not found. Reinstallling may ffix the problem

    Any Idea on how to tell go-wkhtmltopdf where to find the requested dll? Bellow my go env output:

    set GO111MODULE=auto
    set GOARCH=amd64
    set GOBIN=
    set GOCACHE=C:\Users\xxx\AppData\Local\go-build
    set GOENV=C:\Users\xxx\AppData\Roaming\go\env
    set GOEXE=.exe
    set GOFLAGS=
    set GOHOSTARCH=amd64
    set GOHOSTOS=windows
    set GOINSECURE=
    set GOMODCACHE=C:\Users\xx\go\pkg\mod
    set GONOPROXY=
    set GONOSUMDB=
    set GOOS=windows
    set GOPATH=C:\Users\xx\go
    set GOPRIVATE=
    set GOPROXY=https://proxy.golang.org,direct
    set GOROOT=C:\Users\xx\go
    set GOSUMDB=sum.golang.org
    set GOTMPDIR=
    set GOTOOLDIR=C:\Users\xxx\go\pkg\tool\windows_amd64
    set GOVCS=
    set GOVERSION=go1.16
    set GCCGO=gccgo
    set AR=ar
    set CC=gcc
    set CXX=g++
    set CGO_ENABLED=1
    set GOMOD=
    set CGO_CFLAGS=-g -O2
    set CGO_CPPFLAGS=
    set CGO_CXXFLAGS=-g -O2
    set CGO_FFLAGS=-g -O2
    set CGO_LDFLAGS=-g -O2
    set PKG_CONFIG=pkg-config
    set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\xxx\AppData\Local\Temp\go-build397288522=/tmp/go-build -gno-record-gcc-switches
    

    PS: I'm using mingw64

  • Getting error on get the package

    Getting error on get the package

    > go get github.com/adrg/go-wkhtmltopdf
    go: finding github.com/adrg/go-wkhtmltopdf v0.2.2
    go: downloading github.com/adrg/go-wkhtmltopdf v0.2.2
    go: extracting github.com/adrg/go-wkhtmltopdf v0.2.2
    # github.com/adrg/go-wkhtmltopdf
    ../../go/pkg/mod/github.com/adrg/[email protected]/converter.go:7:10: fatal error: wkhtmltox/pdf.h: No such file or directory
     #include <wkhtmltox/pdf.h>
              ^~~~~~~~~~~~~~~~~
    compilation terminated.
    
  • Errors

    Errors

    WARNING: QApplication was not created in the main() thread. QObject::startTimer: QTimer can only be used with threads started with QThread QObject::startTimer: QTimer can only be used with threads started with QThread QObject::startTimer: QTimer can only be used with threads started with QThread QObject::startTimer: QTimer can only be used with threads started with QThread

  • I did a bunch of cool stuff. Hopefully it helps!

    I did a bunch of cool stuff. Hopefully it helps!

    I added those wkhtmltox files for Windows (.dll + .h), an example folder containing the README example (very slightly modified), a Makefile, and a .gitignore file. Also I made a change in the cgo directives to consider -L additionally to -l. And finally, I added a bunch of new thing in the README.

  • Inconsistent pdf formatting and output

    Inconsistent pdf formatting and output

    I am using the code below to generate my pdf using the library. The code executes appropriately. However, most of the time I lose my HTML formatting or even data in many cases. What could be the issue? Could this be memory related?

    Note: My HTML has some css and js

    package dummy
    
    import (
    	"code/common"
    	"log"
    	"os"
    
    	pdf "github.com/adrg/go-wkhtmltopdf"
    )
    
    func GeneratePdf(filename string) {
    	
    
    	// Initialize library.
    	if err := pdf.Init(); err != nil {
    		log.Println(err)
    	}
    	defer pdf.Destroy()
    	
    
    	// Create object from file.
    	object, err := pdf.NewObject("./inputhtml/uc_" + filename + ".html")
    	if err != nil {
    		log.Println(err)
    	}
    
    	// Create object from URL.
    	object2, err := pdf.NewObject("./inputhtml/tc_" + filename + ".html")
    	if err != nil {
    		log.Println(err)
    	}
    
    
    	// Create object from reader.
    	object3, err := pdf.NewObject("./inputhtml/invoice_" + filename + ".html")
    	if err != nil {
    		log.Println(err)
    	}
    
    	object4, err := pdf.NewObject("./inputhtml/feru_" + filename + ".html")
    	if err != nil {
    		log.Println(err)
    	}
    
    
    
    	// Create converter.
    	converter, err := pdf.NewConverter()
    	if err != nil {
    		log.Println(err)
    	}
    	defer converter.Destroy()
    
    	// Add created objects to the converter.
    	converter.Add(object)
    	converter.Add(object2)
    	converter.Add(object3)
    	converter.Add(object4)
    
    	// Set converter options.
    	converter.Title = "Out documents"
    	converter.PaperSize = pdf.A4
    	converter.Orientation = pdf.Portrait
    	converter.MarginTop = "1cm"
    	converter.MarginBottom = "1cm"
    	converter.MarginLeft = "10mm"
    	converter.MarginRight = "10mm"
    
    	// Convert objects and save the output PDF document.
    	outFile, err := os.Create(common.CONST_TMPPDF_FOLDER + "out_" + filename + ".pdf")
    	if err != nil {
    		log.Println(err)
    	}
    	defer outFile.Close()
    
    	if err := converter.Run(outFile); err != nil {
    		log.Println(err)
    	}
    }
    
    
  • Panic WARNING: QApplication was not created in the main() thread.

    Panic WARNING: QApplication was not created in the main() thread.

    Test demo ,Two requst will be panic

    package main
    
    import (
    	"log"
    	"net/http"
    	"os"
    
    	pdf "github.com/adrg/go-wkhtmltopdf"
    )
    
    func PrintHandle(w http.ResponseWriter, r *http.Request) {
    	if err := pdf.Init(); err != nil {
    		log.Fatal(err)
    	}
    	defer pdf.Destroy()
    
    	// Create object from file.
    	object, err := pdf.NewObject("https://www.baidu.com")
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	// Create converter.
    	converter, err := pdf.NewConverter()
    	if err != nil {
    		log.Fatal(err)
    	}
    	defer converter.Destroy()
    
    	// Add created objects to the converter.
    	converter.Add(object)
    
    	// Set converter options.
    	converter.Title = "Sample document"
    	converter.PaperSize = pdf.A4
    
    	// Convert objects and save the output PDF document.
    	outFile, err := os.OpenFile("output.pdf", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0755)
    	if err != nil {
    		log.Fatal(err)
    	}
    	defer outFile.Close()
    
    	if err := converter.Run(outFile); err != nil {
    		log.Fatal(err)
    	}
    	w.Write([]byte("ok"))
    }
    
    func main() {
    	http.HandleFunc("/", PrintHandle)
    	http.ListenAndServe("127.0.0.1:10000", nil)
    }
    

    Panic Data

    WARNING: QApplication was not created in the main() thread.
    QObject::startTimer: QTimer can only be used with threads started with QThread
    QObject::startTimer: QTimer can only be used with threads started with QThread
    QObject::connect: Cannot connect (null)::configurationAdded(QNetworkConfiguration) to QNetworkConfigurationManager::configurationAdded(QNetworkConfiguration)
    QObject::connect: Cannot connect (null)::configurationRemoved(QNetworkConfiguration) to QNetworkConfigurationManager::configurationRemoved(QNetworkConfiguration)
    QObject::connect: Cannot connect (null)::configurationChanged(QNetworkConfiguration) to QNetworkConfigurationManager::configurationChanged(QNetworkConfiguration)
    QObject::connect: Cannot connect (null)::onlineStateChanged(bool) to QNetworkConfigurationManager::onlineStateChanged(bool)
    QObject::connect: Cannot connect (null)::configurationUpdateComplete() to QNetworkConfigurationManager::updateCompleted()
    fatal error: unexpected signal during runtime execution
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x7f6a131f884e]
    
    runtime stack:
    runtime.throw({0x65eb86, 0x7f6a135b7028})
            /usr/local/go/src/runtime/panic.go:1198 +0x71
    runtime.sigpanic()
            /usr/local/go/src/runtime/signal_unix.go:719 +0x396
    
    goroutine 6 [syscall]:
    runtime.cgocall(0x5f51c0, 0xc00015b8f0)
            /usr/local/go/src/runtime/cgocall.go:156 +0x5c fp=0xc00015b8c8 sp=0xc00015b890 pc=0x4067dc
    github.com/adrg/go-wkhtmltopdf._Cfunc_wkhtmltopdf_convert(0x7f69d80154f0)
            _cgo_gotypes.go:137 +0x4c fp=0xc00015b8f0 sp=0xc00015b8c8 pc=0x5ee48c
    github.com/adrg/go-wkhtmltopdf.(*Converter).Run.func1(0xc0000b6000)
            /home/aveyuan/go/pkg/mod/github.com/adrg/[email protected]/converter.go:304 +0x46 fp=0xc00015b928 sp=0xc00015b8f0 pc=0x5ef766
    github.com/adrg/go-wkhtmltopdf.(*Converter).Run(0xc0000b6000, {0x6a64e0, 0xc0000ba008})
            /home/aveyuan/go/pkg/mod/github.com/adrg/[email protected]/converter.go:304 +0x73 fp=0xc00015b990 sp=0xc00015b928 pc=0x5ef3d3
    main.PrintHandle({0x6aaea0, 0xc0000aa000}, 0x0)
            /home/aveyuan/project/go/fkpdf/main.go:44 +0x2d7 fp=0xc00015ba48 sp=0xc00015b990 pc=0x5f4c57
    net/http.HandlerFunc.ServeHTTP(0x0, {0x6aaea0, 0xc0000aa000}, 0x0)
            /usr/local/go/src/net/http/server.go:2047 +0x2f fp=0xc00015ba70 sp=0xc00015ba48 pc=0x5dcbcf
    net/http.(*ServeMux).ServeHTTP(0x0, {0x6aaea0, 0xc0000aa000}, 0xc000184100)
            /usr/local/go/src/net/http/server.go:2425 +0x149 fp=0xc00015bac0 sp=0xc00015ba70 pc=0x5de4c9
    net/http.serverHandler.ServeHTTP({0xc000090030}, {0x6aaea0, 0xc0000aa000}, 0xc000184100)
            /usr/local/go/src/net/http/server.go:2879 +0x43b fp=0xc00015bb80 sp=0xc00015bac0 pc=0x5df7fb
    net/http.(*conn).serve(0xc000110960, {0x6abca0, 0xc000100de0})
            /usr/local/go/src/net/http/server.go:1930 +0xb08 fp=0xc00015bfb8 sp=0xc00015bb80 pc=0x5dbf28
    net/http.(*Server).Serve·dwrap·87()
            /usr/local/go/src/net/http/server.go:3034 +0x2e fp=0xc00015bfe0 sp=0xc00015bfb8 pc=0x5e014e
    runtime.goexit()
            /usr/local/go/src/runtime/asm_amd64.s:1581 +0x1 fp=0xc00015bfe8 sp=0xc00015bfe0 pc=0x465281
    created by net/http.(*Server).Serve
            /usr/local/go/src/net/http/server.go:3034 +0x4e8
    
    goroutine 1 [IO wait]:
    internal/poll.runtime_pollWait(0x7f69e860bf58, 0x72)
            /usr/local/go/src/runtime/netpoll.go:234 +0x89
    internal/poll.(*pollDesc).wait(0xc000144000, 0xc00002a000, 0x0)
            /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
    internal/poll.(*pollDesc).waitRead(...)
            /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
    internal/poll.(*FD).Accept(0xc000144000)
            /usr/local/go/src/internal/poll/fd_unix.go:402 +0x22c
    net.(*netFD).accept(0xc000144000)
            /usr/local/go/src/net/fd_unix.go:173 +0x35
    net.(*TCPListener).accept(0xc00000e0d8)
            /usr/local/go/src/net/tcpsock_posix.go:140 +0x28
    net.(*TCPListener).Accept(0xc00000e0d8)
            /usr/local/go/src/net/tcpsock.go:262 +0x3d
    net/http.(*Server).Serve(0xc000142000, {0x6aacf0, 0xc00000e0d8})
            /usr/local/go/src/net/http/server.go:3002 +0x394
    net/http.(*Server).ListenAndServe(0xc000142000)
            /usr/local/go/src/net/http/server.go:2931 +0x7d
    net/http.ListenAndServe(...)
            /usr/local/go/src/net/http/server.go:3185
    main.main()
            /home/aveyuan/project/go/fkpdf/main.go:52 +0x65
    
    goroutine 7 [IO wait]:
    internal/poll.runtime_pollWait(0x7f69e860bd88, 0x72)
            /usr/local/go/src/runtime/netpoll.go:234 +0x89
    internal/poll.(*pollDesc).wait(0xc000144100, 0xc000158000, 0x0)
            /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
    internal/poll.(*pollDesc).waitRead(...)
            /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
    internal/poll.(*FD).Read(0xc000144100, {0xc000158000, 0x1000, 0x1000})
            /usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
    net.(*netFD).Read(0xc000144100, {0xc000158000, 0x400, 0xc00015f6b0})
            /usr/local/go/src/net/fd_posix.go:56 +0x29
    net.(*conn).Read(0xc000010040, {0xc000158000, 0x400, 0xc000100f38})
            /usr/local/go/src/net/net.go:183 +0x45
    net/http.(*connReader).Read(0xc000100f30, {0xc000158000, 0x1000, 0x1000})
            /usr/local/go/src/net/http/server.go:780 +0x16d
    bufio.(*Reader).fill(0xc00006c300)
            /usr/local/go/src/bufio/bufio.go:101 +0x103
    bufio.(*Reader).ReadSlice(0xc00006c300, 0x40)
            /usr/local/go/src/bufio/bufio.go:360 +0x2f
    bufio.(*Reader).ReadLine(0xc00006c300)
            /usr/local/go/src/bufio/bufio.go:389 +0x27
    net/textproto.(*Reader).readLineSlice(0xc000100f90)
            /usr/local/go/src/net/textproto/reader.go:57 +0x99
    net/textproto.(*Reader).ReadLine(...)
            /usr/local/go/src/net/textproto/reader.go:38
    net/http.readRequest(0xc000010040)
            /usr/local/go/src/net/http/request.go:1029 +0x79
    net/http.(*conn).readRequest(0xc000110a00, {0x6abbf8, 0xc000028280})
            /usr/local/go/src/net/http/server.go:966 +0x225
    net/http.(*conn).serve(0xc000110a00, {0x6abca0, 0xc000100de0})
            /usr/local/go/src/net/http/server.go:1856 +0x865
    created by net/http.(*Server).Serve
            /usr/local/go/src/net/http/server.go:3034 +0x4e8
    
    goroutine 34 [IO wait]:
    internal/poll.runtime_pollWait(0x7f69e860be70, 0x72)
            /usr/local/go/src/runtime/netpoll.go:234 +0x89
    internal/poll.(*pollDesc).wait(0xc000144080, 0xc000090041, 0x0)
            /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
    internal/poll.(*pollDesc).waitRead(...)
            /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
    internal/poll.(*FD).Read(0xc000144080, {0xc000090041, 0x1, 0x1})
            /usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
    net.(*netFD).Read(0xc000144080, {0xc000090041, 0x0, 0x0})
            /usr/local/go/src/net/fd_posix.go:56 +0x29
    net.(*conn).Read(0xc000010038, {0xc000090041, 0x0, 0x0})
            /usr/local/go/src/net/net.go:183 +0x45
    net/http.(*connReader).backgroundRead(0xc000090030)
            /usr/local/go/src/net/http/server.go:672 +0x3f
    created by net/http.(*connReader).startBackgroundRead
            /usr/local/go/src/net/http/server.go:668 +0xcf
    exit status 2
    
  • Blank pdf for react website.

    Blank pdf for react website.

    I am trying to save a page from my site built in react. It generate the blank pdf as site is take sometime to load. Is there any way to fix this issue?

  • Converged my fork to yours master with addition

    Converged my fork to yours master with addition

    As per what I said on issue #3 (here), I did refactor my fork to use your new standard ConverterOpts and ObjectOpts on my proposed of a standard HTTP handler for converting (here and here).

    Also, I removed everything that was specific to my fork, things that were hardcoded to work on my fork, and whatnot.

    If you think it is not worth to merge it now, that's cool. I'm fine with that.

    In any case, thanks for sharing your code over here.

    Cheers.

Assembly syntax that makes you feel like you're writing code in a high-level language.

shasm Assembly syntax that makes you feel like you're writing code in a high-level language. Shasm is not an Assembler. Shasm simply compiles Shasm sy

Jun 5, 2021
HTTP service to generate PDF from Json requests

pdfgen HTTP service to generate PDF from Json requests Install and run The recommended method is to use the docker container by mounting your template

Dec 2, 2022
A vitamin C rich, book, pdf & documentation brewing library for e-readers/e-ink readers
A vitamin C rich, book, pdf & documentation brewing library for e-readers/e-ink readers

go-Cbook A vitamin C rich, book, pdf & documentation brewing library for e-readers/e-ink readers. Now take priviliges of (eye-safe) e-readers to read

Dec 28, 2021
Optimized bit-level Reader and Writer for Go.

bitio Package bitio provides an optimized bit-level Reader and Writer for Go. You can use Reader.ReadBits() to read arbitrary number of bits from an i

Dec 1, 2022
User level X Keyboard Grabber

xkg - X Keyboard Grabber Installation go get gopkg.in/xkg.v0 Usage example: package main import ( "fmt" "gopkg.in/xkg.v0" ) func main() { var ke

Sep 27, 2022
Instant online preview of HTML files or websites.

Instant online preview of HTML files or websites.

Apr 19, 2022
Lib to extract information of tag html meta

What is this? Is a lib to extract information to mount preview. For Example: When you insert a url on chat how WhatsApp is mounted an preview of websi

May 17, 2022
Go bindings for unarr (decompression library for RAR, TAR, ZIP and 7z archives)

go-unarr Golang bindings for the unarr library from sumatrapdf. unarr is a decompression library and CLI for RAR, TAR, ZIP and 7z archives. GoDoc See

Dec 29, 2022
Native Go bindings for D-Bus

go.dbus go.dbus is a simple library that implements native Go client bindings for the D-Bus message bus system. Features Complete native implementatio

Nov 20, 2022
GObject-introspection based bindings generator

WARNING! This project is no longer maintained. Probably doesn't even compile. GObject-introspection based bindings generator for Go. Work in progress

Jan 5, 2022
Some plain Go/Golang i2c sensor bindings to Waveshare Sense HAT for raspberry pi

i2c some plain Go/Golang i2c sensor bindings to Waveshare Sense HAT for raspberry pi using https://periph.io Supported hardware: Raspberry Zero W 1 ht

Dec 31, 2021
The gofinder program is an acme user interface to search through Go projects.

The gofinder program is an acme user interface to search through Go projects.

Jun 14, 2021
Simple interface to libmagic for Go Programming Language

File Magic in Go Introduction Provides simple interface to libmagic for Go Programming Language. Table of Contents Contributing Versioning Author Copy

Dec 22, 2021
Go language interface to the PAPI performance API

go-papi Description go-papi provides a Go interface to PAPI, the Performance Application Programming Interface. PAPI provides convenient access to har

Dec 22, 2022
A go interface to NotifyMyAndroid

Notify My Android on the Go This is a go client for Notify my Android. With this, you can send simple notifications directly to your phone and other a

Aug 13, 2019
Generate type-safe Go converters by simply defining an interface

goverter a "type-safe Go converter" generator goverter is a tool for creating type-safe converters. All you have to do is create an interface and exec

Jan 4, 2023
Third party extension interface for sillyGirl.
Third party extension interface for sillyGirl.

Third party extension interface for sillyGirl.

Jan 11, 2022
Simple example program using CRUD operations to interface with azcosmos

Simple example program using CRUD operations to interface with azcosmos

Nov 15, 2021
Data interface for salesforce price bulk get

data-interface-for-salesforce-price-bulk-get 概要 data-interface-for-salesforce-price-bulk-get は、salesforce の価格オブジェクト取得に必要なデータの整形、および作成時に salesforce から返

Nov 27, 2021