Menghasilkan Laporan PDF dalam GO

Baik. Sekarang menghasilkan PDF dalam GO!

Konten Halaman

Menghasilkan dokumen PDF secara programatis dapat menjadi fitur penting dalam aplikasi Anda. Di sini kita akan menjelaskan dan memberikan ulasan singkat dengan contoh dari perpustakaan yang tersedia dalam bahasa pemrograman Go (Golang) untuk menghasilkan file PDF.

Solusi yang sesuai mungkin berbeda, misalnya untuk pembuatan dokumen sederhana, atau pembuatan PDF yang kompleks dan kaya fitur.

go, pdf! Ya, gambar ini dihasilkan oleh AI, modelnya adalah Flux1.Dev.

Perpustakaan dan Alat

gofpdf

GoPdf adalah perpustakaan yang sederhana untuk membuat PDF. Ia memungkinkan penambahan teks, gambar, bentuk, tabel, dan penanganan halaman yang berbeda. Sesuai untuk tugas pembuatan PDF yang sederhana hingga sedang kompleks.

Pemelihara: Jung Kurt (telah dihentikan tetapi masih digunakan).

Keterbatasan: Kurangnya pembaruan, meskipun penggunaan masih ada.

Contoh:

package main

import (
    "github.com/jung-kurt/gofpdf"
)

func main() {
    pdf := gofpdf.New("P", "mm", "A4", "")
    pdf.AddPage()
    pdf.SetFont("Arial", "B", 16)
    pdf.Cell(40, 10, "Hello World!")
    err := pdf.OutputFileAndClose("hello.pdf")
    if err != nil {
        panic(err)
    }
}

gopdf

Pemelihara: signintech (secara aktif dipelihara).

Dalam bahasa pemrograman Go, salah satu perpustakaan yang menonjol untuk tujuan ini adalah gopdf, dikembangkan oleh SignInTech. Perpustakaan ini menyediakan cara sederhana untuk membuat PDF secara programatis tanpa bergantung pada dependensi eksternal atau perpustakaan C.

gopdf adalah perpustakaan Go murni yang dirancang khusus untuk membuat dokumen PDF. Ia menawarkan API sederhana dan efisien yang berfokus utama pada pembuatan PDF, membuatnya lebih mudah digunakan untuk tugas dasar sambil mempertahankan fleksibilitas yang diperlukan untuk operasi yang lebih kompleks.

Fitur Utama:

  • Implementasi Go Murni: Tidak memerlukan dependensi eksternal atau perpustakaan C.
  • API Sederhana: Fungsi-fungsi yang mudah digunakan untuk menghasilkan PDF.
  • Kinerja Efisien: Dioptimalkan untuk pembuatan PDF yang cepat dan efisien.

Contoh Penggunaan

Untuk mengilustrasikan bagaimana gopdf dapat digunakan, mari kita lihat contoh dasar pembuatan dokumen PDF sederhana:

package main

import (
    "github.com/signintech/gopdf"
)

func main() {
    // Membuat instance PDF baru
    pdf := gopdf.New()

    // Menetapkan ukuran halaman dan margin
    pdf.SetPageSize(gopdf.PageSizeA4)
    pdf.AddPage()

    // Menambahkan teks ke PDF
    pdf.SetFont("Arial", "", 12)
    pdf.Write(50, 50, "Hello, World!")

    // Menyimpan PDF ke file
    err := pdf.SaveToFile("example.pdf")
    if err != nil {
        panic(err)
    }
}

Contoh ini menunjukkan bagaimana membuat dokumen PDF baru, menambahkan teks ke dalamnya, dan menyimpannya sebagai file.

Fitur Lanjutan gopdf:

  • Menambahkan Gambar: Anda dapat menyisipkan gambar ke dalam dokumen PDF Anda menggunakan metode AddImage.
  • Menggambar Bentuk: Perpustakaan menyediakan fungsi untuk menggambar garis, persegi, dan bentuk lainnya.
  • Perlindungan PDF: Anda dapat menetapkan perlindungan kata sandi pada PDF Anda untuk membatasi akses.

pdfcpu

Perpustakaan lain yang kuat yang tersedia untuk manipulasi PDF dalam Go adalah pdfcpu. Perpustakaan ini menawarkan suite fitur komprehensif untuk membuat, memodifikasi, dan memeriksa file PDF melalui API dan antarmuka perintah baris (CLI). Di bawah ini, kita akan menjelaskan deskripsi, contoh penggunaan, dan fitur utama dari pdfcpu.

pdfcpu adalah perpustakaan pemrosesan PDF berbasis Go yang mendukung enkripsi dan menawarkan alat kuat untuk menangani berbagai aspek dokumen PDF. Ia kompatibel dengan semua versi PDF, termasuk peningkatan terus-menerus untuk PDF 2.0 (ISO-32000-2). Perpustakaan ini bertujuan untuk menyediakan berbagai fitur pemrosesan PDF yang komprehensif, membuatnya cocok untuk penggunaan sederhana dan kompleks.

Fitur Utama

  • Dukungan Enkripsi: pdfcpu mendukung enkripsi, memungkinkan pengembang untuk melindungi dokumen PDF mereka secara efektif.
  • API dan CLI: Ia menawarkan API untuk akses programatis dan antarmuka perintah baris (CLI) untuk operasi cepat.
  • Pemrosesan Batch: Dukungan kuat untuk pemrosesan batch melalui perintah baris kaya membuatnya efisien dalam menangani beberapa file sekaligus.
  • Kompatibilitas: Kompatibel dengan semua versi PDF, termasuk dukungan dasar dan peningkatan terus-menerus untuk PDF 2.0.

Untuk memulai dengan pdfcpu, Anda perlu menginstalnya menggunakan sistem manajemen paket Go:

go get github.com/pdfcpu/pdfcpu

Operasi Dasar Perintah Baris

pdfcpu menyediakan berbagai perintah untuk berbagai operasi. Berikut adalah beberapa contoh:

Membuat PDF dari Gambar

Anda dapat mengonversi satu atau beberapa file gambar menjadi file PDF dengan perintah berikut:

pdfcpu img2pdf out.pdf image1.jpg image2.png

Perintah ini akan membuat PDF di mana setiap gambar ditampilkan pada halaman terpisah.

Untuk menggabungkan beberapa file PDF menjadi satu dokumen, gunakan perintah merge:

pdfcpu merge output.pdf file1.pdf file2.pdf

Contoh Penggunaan pdfcpu

Untuk operasi yang lebih kompleks, Anda dapat menggunakan API yang disediakan oleh pdfcpu. Berikut adalah contoh bagaimana membuat PDF baru dan menambahkan teks menggunakan kode Go:

package main

import (
    "github.com/pdfcpu/pdfcpu"
    "log"
)

func main() {
    // Membuat dokumen PDF baru
    doc := pdfcpu.NewPDF(0, 0)
    defer doc.Close()

    // Menambahkan halaman ke dokumen
    page := doc.AddPage()
    page.SetMediaBox(pdfcpu.MediaBox{
        LLX: 0,
        LLY: 0,
        URX: 612,
        URY: 792,
    })

    // Menambahkan teks ke halaman
    content := "Hello, World!"
    font := pdfcpu.NewFont("Helvetica", "")
    page.AddText(content, font, 12, 100, 750)

    // Menyimpan dokumen
    err := doc.Save("output.pdf")
    if err != nil {
        log.Fatal(err)
    }
}

Contoh ini menunjukkan bagaimana membuat PDF baru, menambahkan halaman, dan menulis teks di atasnya menggunakan API pdfcpu.

Maroto

  • Pemelihara: Tim go-playground (https://github.com/go-playground/maroto).
  • Kasus Penggunaan: Pengembang yang lebih memilih pendekatan desain terlebih dahulu (mirip dengan Bootstrap).
  • Dibuat berdasarkan Bootstrap; dirancang untuk mudah digunakan dengan gaya deklaratif yang mirip dengan HTML/CSS.
  • Dibangun di atas gofpdf, ia menyederhanakan proses pembuatan sambil mempertahankan opsi penyesuaian yang kuat.

Maroto adalah perpustakaan Go lain untuk membuat PDF, tetapi fokusnya adalah menyederhanakan proses dengan menghilangkan detail tingkat rendah. Ia dibangun di atas perpustakaan gofpdf dan menyediakan API yang lebih ramah pengguna untuk menghasilkan dokumen.

Contoh Penggunaan Maroto

Berikut adalah contoh bagaimana Anda dapat menggunakan Maroto untuk membuat PDF sederhana:

package main

import (
    "github.com/andreyhoffmann1103/maroto"
)

func main() {
    // Membuat dokumen PDF baru dengan dimensi yang ditentukan
    m := maroto.NewPDF(595, 842) // Ukuran A4 dalam poin

    // Menambahkan teks ke halaman pertama
    m.AddText("Hello, Maroto!", 0, 0)

    // Menyimpan PDF ke file
    err := m.OutputFileAndClose("example.pdf")
    if err != nil {
        panic(err)
    }
}

Contoh ini menunjukkan bagaimana membuat dokumen PDF baru dengan satu halaman dan menambahkan teks ke dalamnya menggunakan Maroto.

Unipdf

UniPDF adalah perpustakaan lain yang kuat dan komprehensif untuk membuat dan memproses file PDF dalam Golang (Go). Ia menawarkan berbagai fitur yang membuatnya populer di kalangan pengembang yang membutuhkan untuk menghasilkan, memodifikasi, dan mengekstrak konten dari dokumen PDF.

  • Pemelihara: UnidocLib (https://unidoc.io).
  • Kasus Penggunaan: Pemrosesan PDF lanjutan (enkripsi, penggabungan, skrip).
  • Perpustakaan kuat untuk membuat dan memproses PDF (Go murni).
  • Menawarkan fitur luas termasuk elemen interaktif seperti tautan, bookmark, penggabungan/pemecahan, enkripsi, dan lainnya.
  • API komprehensif untuk membaca dan menulis objek PDF (diktiori, aliran).
  • Cocok untuk aplikasi yang membutuhkan kemampuan pembuatan PDF yang kuat.

Instalasi UniPDF

Untuk memulai dengan UniPDF, Anda perlu menginstal perpustakaan. Ikuti langkah-langkah berikut:

# Membuat Direktori Baru:
mkdir go-pdf-generator cd go-pdf-generator
# Menginisialisasi Modul Go:
go mod init go-pdf-generator
# Menginstal Perpustakaan UniPDF:
go get github.com/unidoc/unipdf/v3

Ini akan mengatur proyek Anda dan menginstal dependensi yang diperlukan.

Contoh Penggunaan Dasar

Berikut adalah contoh sederhana untuk membuat dokumen PDF menggunakan UniPDF:

package main

import (
    "github.com/unidoc/unipdf/v3/core"
    "github.com/unidoc/unipdf/v3/model"
    "github.com/unidoc/unipdf/v3/creator"
)

func main() {
    // Membuat dokumen PDF baru
    pdf := creator.New()

    // Menambahkan halaman ke PDF
    page := pdf.NewPage()

    // Menyiapkan aliran konten untuk halaman
    contentStream := model.NewContentStream()
    page.SetContents(contentStream)

    // Menambahkan teks ke halaman
    text := "Hello, UniPDF!"
    font := creator.NewStandardFont(creator.FontHelvetica)
    textObject := model.NewText(text, font, 12)
    contentStream.Add(textObject)

    // Menyimpan dokumen PDF
    err := pdf.WriteToFile("example.pdf")
    if err != nil {
        panic(err)
    }
}

Contoh ini menunjukkan bagaimana membuat dokumen PDF baru, menambahkan halaman, dan menulis teks ke dalamnya. File yang dihasilkan, example.pdf, akan berisi teks “Hello, UniPDF!”.

Wrapper wkhtmltopdf

Fitur:

  • Mengonversi template HTML (dirender dengan html/template Go) ke PDF.
  • Margin, orientasi halaman, dan header/footer yang dapat dikustomisasi.
  • Cocok ketika desain dokumen kompleks dan melibatkan styling HTML/CSS.
  • Menggunakan wkhtmltopdf sebagai backend untuk mengonversi konten HTML ke format PDF.

Contoh penggunaan go-wkhtmltopdf

import (
    "bytes"
    "github.com/SebastiaanKlippert/go-wkhtmltopdf"
    "html/template"
)

type PDFService struct {}

func NewPDFService() *PDFService {
    return &PDFService{}
}

func (p PDFService) GeneratePDF(data interface{}) ([]byte, error) {
    var templ *template.Template
    var err error

    if templ, err = template.ParseFiles("pdf-template.html"); err != nil {
        return nil, err
    }

    var body bytes.Buffer
    if err := templ.Execute(&body, data); err != nil {
        return nil, err
    }

    pdfg, err := wkhtmltopdf.NewPDFGenerator()
    if err != nil {
        return nil, err
    }

    page := wkhtmltopdf.NewPageReader(bytes.NewReader(body.Bytes()))
    page.EnableLocalFileAccess.Set(true)

    pdfg.AddPage(page)
    pdfg.MarginLeft.Set(0)
    pdfg.MarginRight.Set(0)
    pdfg.Dpi.Set(300)
    pdfg.PageSize.Set(wkhtmltopdf.PageSizeA4)
    pdfg.Orientation.Set(wkhtmltopdf.OrientationLandscape)

    err = pdfg.Create()
    if err != nil {
        return nil, err
    }

    return pdfg.Bytes(), nil
}

pdflib (dari EndFirstCorp):

  • Alat perintah baris untuk berbagai operasi PDF seperti validasi, optimasi, pemecahan/penggabungan.
  • Berguna untuk pemrosesan batch dan tugas administratif terkait dokumen PDF.

Gambaran pdflib

Perpustakaan pdflib dirancang untuk menjadi pemroses PDF komprehensif untuk bahasa pemrograman Go. Ia mendukung berbagai fungionalitas seperti validasi, optimasi, pemecahan, penggabungan, ekstraksi konten dari, dan pemotongan PDF. Perpustakaan ini mematuhi standar PDF 32000-1:2008 (PDF 1.7), memastikan kompatibilitas dengan berbagai dokumen PDF.

Fitur Utama

  • Validasi: Memastikan bahwa file PDF mematuhi standar PDF 1.7.
  • Optimasi: Mengurangi ukuran file dengan menghilangkan sumber daya redundan.
  • Pemecahan dan Penggabungan: Memungkinkan pemecahan dokumen PDF multi-halaman menjadi PDF satu halaman atau penggabungan beberapa PDF menjadi satu.
  • Ekstraksi: Mengambil gambar, font, konten, dan halaman dari PDF.
  • Pemotongan: Membuat versi PDF yang dipotong.

Instalasi

Untuk menggunakan pdflib, Anda perlu menginstalnya melalui sistem manajemen paket Go. Anda dapat melakukannya dengan menjalankan:

go get github.com/EndFirstCorp/pdflib

Contoh Penggunaan Dasar - Validasi PDF

Berikut adalah contoh sederhana yang menunjukkan bagaimana menggunakan perpustakaan pdflib untuk melakukan operasi PDF dasar:

Untuk memvalidasi PDF terhadap standar PDF 1.7, Anda dapat menggunakan kode berikut:

package main

import ( "fmt" "github.com/EndFirstCorp/pdflib/cmd/pdflib" )

func main() {
   // Memvalidasi file PDF
   err := pdflib.Validate("example.pdf")
   if err != nil {
     fmt.Println("Validasi gagal:", err)
   } else {
     fmt.Println("PDF valid.")
   }
}

Kesimpulan

Untuk menghasilkan PDF dalam Go, pilihan perpustakaan bergantung pada kompleksitas dan kebutuhan spesifik proyek Anda. Berikut rekomendasi yang diberikan:

  • Dokumen Sederhana: Gunakan gofpdf atau Maroto. Perpustakaan ini menawarkan kesederhanaan dan kemudahan penggunaan untuk tugas-tugas dasar.
  • Desain Kompleks dengan HTML/CSS: Manfaatkan wkhtmltopdf Wrapper, yang memanfaatkan wkhtmltopdf untuk menangani konten HTML dan styling yang kompleks.
  • Pemrosesan PDF Lanjutan: Pilih Unipdf atau pdfcpu ketika aplikasi Anda memerlukan fitur lanjutan seperti enkripsi, elemen interaktif, pemformatan rinci, dan kemampuan manipulasi komprehensif.

Setiap perpustakaan ini menawarkan kekuatan unik yang memenuhi kebutuhan berbeda dalam pembuatan PDF, memberikan pengembang berbagai alat untuk dipilih berdasarkan kebutuhan spesifik mereka.

Tautan Perpustakaan

Tautan Berguna Lainnya