Rumah  >  Artikel  >  pembangunan bahagian belakang  >  dokumen golang ke pdf

dokumen golang ke pdf

王林
王林asal
2023-05-13 11:06:372169semak imbas

Dalam kerja harian kami, kami selalunya perlu menukar beberapa dokumen ke dalam format PDF untuk perkongsian dan pencetakan yang mudah. Walaupun terdapat banyak alat penukaran PDF siap sedia di pasaran, bagi kebanyakan kakitangan teknikal, adalah lebih menarik dan bermakna untuk melaksanakan alat penukaran dokumen kepada PDF sendiri. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Golang untuk melaksanakan dokumen mudah kepada alat PDF.

  1. Pasang kebergantungan

Pertama, kita perlu memasang dua perpustakaan untuk menyelesaikan tugas penukaran fail dan penjanaan PDF. Kedua-dua perpustakaan ini ialah:

  • github.com/SebastiaanKlippert/go-wkhtmltopdf: Pustaka ini ialah perpustakaan wkhtmltopdf yang terkandung dalam bahasa go dan digunakan untuk menukar fail format html kepada format PDF.
  • github.com/unidoc/unioffice: Pustaka ini ialah perpustakaan membaca dan menulis fail pejabat golang yang menyokong pelbagai jenis fail pejabat, termasuk doc, docx, xls, xlsx, ppt, pptx, dsb.

Kita boleh menggunakan arahan mod go untuk memasang kedua-dua perpustakaan ini:

go get -u github.com/SebastiaanKlippert/go-wkhtmltopdf
go get -u github.com/unidoc/unioffice
  1. Tukar dokumen kepada HTML

Sekarang kami sudah bersedia Selepas membina dua perpustakaan, langkah seterusnya ialah melaksanakan fungsi menukar dokumen kepada HTML. Kami akan menggunakan fail docx sebagai contoh. Dokumen Docx boleh dibaca dengan mudah menggunakan perpustakaan unioffice. Berikut ialah kod pelaksanaan mudah:

package main

import (
    "log"
    "github.com/unidoc/unioffice/document"
)

func DocxToHtml(inputFilePath string) (string, error) {
    doc, err := document.Open(inputFilePath)
    if err != nil {
        return "", err
    }
    defer func() {
        err := doc.Close()
        if err != nil {
            log.Fatalf("unable to close document: %s", err)
        }
    }()

    html, err := doc.Html()
    if err != nil {
        return "", err
    }
    
    return html, nil
}

Fungsi fungsi ini adalah untuk menukar fail docx input kepada rentetan HTML. Parameter input fungsi ialah laluan ke fail docx, dan output ialah rentetan HTML dan nilai ralat. Dalam fungsi ini, kami mula-mula menggunakan fungsi document.Open untuk membuka fail docx, dan kemudian gunakan fungsi doc.Html untuk menukar kandungan fail kepada rentetan HTML. Akhirnya, rentetan HTML dikembalikan sebagai nilai output.

  1. Tukar HTML kepada PDF

Sekarang kita telah menyelesaikan fungsi menukar fail docx kepada HTML, langkah seterusnya ialah menukar HTML kepada PDF. Kami akan menggunakan perpustakaan go-wkhtmltopdf untuk melaksanakan fungsi ini. Pustaka ini ialah perpustakaan wkhtmltopdf yang terkandung dalam bahasa Go, yang boleh menukar dokumen format HTML ke dalam format PDF dengan mudah. Berikut ialah kod pelaksanaan mudah:

package main

import (
    "io/ioutil"
    "strings"
    "github.com/SebastiaanKlippert/go-wkhtmltopdf"
)

func HtmlToPdf(html string, outputFilePath string) error {
    err := ioutil.WriteFile("input.html", []byte(html), 0644)
    if err != nil {
        return err
    }

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

    pdfg.AddPage(wkhtmltopdf.NewPageReader(strings.NewReader(html)))
    pdfg.Dpi.Set(300)
    pdfg.Orientation.Set(wkhtmltopdf.OrientationPortrait)
    pdfg.PageSize.Set(wkhtmltopdf.PageSizeA4)
    err = pdfg.Create()
    if err != nil {
        return err
    }

    err = pdfg.WriteFile(outputFilePath)
    if err != nil {
        return err
    }

    return nil
}

Fungsi fungsi ini adalah untuk menukar rentetan HTML input kepada fail PDF. Parameter input fungsi ialah rentetan HTML dan laluan ke fail PDF output, dan output ialah nilai ralat. Dalam fungsi, kami mula-mula menulis rentetan HTML pada fail, dan kemudian menggunakan perpustakaan go-wkhtmltopdf untuk menukar fail HTML kepada fail PDF. Apabila memanggil fungsi AddPage, kami menghantar fail HTML sebagai objek Pembaca. Untuk fail PDF output, kita boleh menggunakan fungsi pdfg.WriteFile untuk menulisnya ke laluan yang ditentukan.

  1. Kod Penuh

Kini kami telah menyelesaikan dua langkah utama untuk menukar dokumen kepada PDF. Berikut ialah kod contoh lengkap:

package main

import (
    "io/ioutil"
    "log"
    "os"
    "strings"
    "github.com/SebastiaanKlippert/go-wkhtmltopdf"
    "github.com/unidoc/unioffice/document"
)

func main() {
    inputFilePath := "input.docx"
    outputFilePath := "output.pdf"
    html, err := DocxToHtml(inputFilePath)
    if err != nil {
        log.Fatalf("unable to convert docx to html: %s", err)
    }

    err = HtmlToPdf(html, outputFilePath)
    if err != nil {
        log.Fatalf("unable to convert html to pdf: %s", err)
    }

    err = os.Remove("input.html")
    if err != nil {
        log.Fatalf("unable to delete input.html: %s", err)
    }
}

func DocxToHtml(inputFilePath string) (string, error) {
    doc, err := document.Open(inputFilePath)
    if err != nil {
        return "", err
    }
    defer func() {
        err := doc.Close()
        if err != nil {
            log.Fatalf("unable to close document: %s", err)
        }
    }()

    html, err := doc.Html()
    if err != nil {
        return "", err
    }
    
    return html, nil
}

func HtmlToPdf(html string, outputFilePath string) error {
    err := ioutil.WriteFile("input.html", []byte(html), 0644)
    if err != nil {
        return err
    }

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

    pdfg.AddPage(wkhtmltopdf.NewPageReader(strings.NewReader(html)))
    pdfg.Dpi.Set(300)
    pdfg.Orientation.Set(wkhtmltopdf.OrientationPortrait)
    pdfg.PageSize.Set(wkhtmltopdf.PageSizeA4)
    err = pdfg.Create()
    if err != nil {
        return err
    }

    err = pdfg.WriteFile(outputFilePath)
    if err != nil {
        return err
    }

    return nil
}

Dalam contoh ini, kami mentakrifkan dua fungsi: DocxToHtml dan HtmlToPdf. Fungsi DocxToHtml digunakan untuk menukar fail docx input kepada rentetan HTML, fungsi HtmlToPdf digunakan untuk menukar rentetan HTML kepada fail PDF. Dalam fungsi utama, kami mula-mula memanggil fungsi DocxToHtml untuk menukar fail docx menjadi rentetan HTML, dan kemudian memanggil fungsi HtmlToPdf untuk menukar rentetan HTML kepada fail PDF. Akhir sekali, kami memadamkan input fail perantaraan yang dijana.html.

  1. Ringkasan

Dalam artikel ini, kami memperkenalkan cara menggunakan Golang untuk melaksanakan dokumen ringkas kepada alat PDF. Kami menggunakan dua perpustakaan: go-wkhtmltopdf dan unioffice. Pustaka go-wkhtmltopdf digunakan untuk menukar fail format HTML ke dalam format PDF; perpustakaan unioffice digunakan untuk membaca fail docx dan menukarnya kepada rentetan HTML. Menggunakan kedua-dua perpustakaan ini, kami boleh menukar dokumen ke dalam format PDF dengan mudah. Walaupun contoh ini mudah, ia adalah titik permulaan yang baik untuk orang yang menggunakan Golang untuk membangunkan projek dan boleh dikembangkan dan dioptimumkan lagi.

Atas ialah kandungan terperinci dokumen golang ke pdf. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:golang json转stringArtikel seterusnya:golang json转string