>백엔드 개발 >Golang >golang 문서를 pdf로

golang 문서를 pdf로

王林
王林원래의
2023-05-13 11:06:372232검색

일상 업무에서 쉽게 공유하고 인쇄할 수 있도록 일부 문서를 PDF 형식으로 변환해야 하는 경우가 많습니다. 시중에는 기성 PDF 변환 도구가 많이 있지만 대부분의 기술 인력에게는 문서를 PDF로 변환 도구를 직접 구현하는 것이 더 흥미롭고 의미가 있습니다. 이번 글에서는 Golang을 사용하여 간단한 문서를 PDF 도구로 구현하는 방법을 소개하겠습니다.

  1. 종속성 설치

먼저 파일 변환 및 PDF 생성 작업을 완료하려면 두 개의 라이브러리를 설치해야 합니다. 이 두 라이브러리는 다음과 같습니다.

  • github.com/SebastiaanKlippert/go-wkhtmltopdf: 이 라이브러리는 go 언어로 캡슐화된 wkhtmltopdf 라이브러리이며 html 형식 파일을 PDF 형식으로 변환하는 데 사용됩니다.
  • github.com/unidoc/unioffice: 이 라이브러리는 doc, docx, xls, xlsx, ppt, pptx 등 다양한 유형의 오피스 파일을 지원하는 golang 오피스 파일 읽기 및 쓰기 라이브러리입니다.

go mod 명령을 사용하여 다음 두 라이브러리를 설치할 수 있습니다.

go get -u github.com/SebastiaanKlippert/go-wkhtmltopdf
go get -u github.com/unidoc/unioffice
  1. 문서를 HTML로 변환

이제 두 라이브러리를 준비했으므로 다음 단계는 문서를 HTML로 변환하는 기능을 구현하는 것입니다. docx 파일을 예로 사용하겠습니다. Docx 문서는 유니오피스 라이브러리를 이용하여 쉽게 읽을 수 있습니다. 다음은 간단한 구현 코드입니다.

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
}

이 함수의 기능은 입력된 docx 파일을 HTML 문자열로 변환하는 것입니다. 함수의 입력 매개변수는 docx 파일의 경로이고 출력은 HTML 문자열과 오류 값입니다. 이 함수에서는 먼저 document.Open 함수를 사용하여 docx 파일을 연 다음 doc.Html 함수를 사용하여 파일 내용을 HTML 문자열로 변환합니다. 마지막으로 HTML 문자열이 출력 값으로 반환됩니다.

  1. HTML을 PDF로 변환

이제 docx 파일을 HTML로 변환하는 기능을 완료했으므로 다음 단계는 HTML을 PDF로 변환하는 것입니다. 이 기능을 구현하기 위해 go-wkhtmltopdf 라이브러리를 사용할 것입니다. 이 라이브러리는 HTML 형식의 문서를 PDF 형식으로 쉽게 변환할 수 있는 Go 언어로 캡슐화된 wkhtmltopdf 라이브러리입니다. 다음은 간단한 구현 코드입니다.

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
}

이 함수의 기능은 입력된 HTML 문자열을 PDF 파일로 변환하는 것입니다. 함수의 입력 매개변수는 HTML 문자열과 출력 PDF 파일의 경로이며, 출력은 오류 값입니다. 함수에서는 먼저 HTML 문자열을 파일에 쓴 다음 go-wkhtmltopdf 라이브러리를 사용하여 HTML 파일을 PDF 파일로 변환합니다. AddPage 함수를 호출할 때 HTML 파일을 Reader 개체로 전달합니다. 출력 PDF 파일의 경우 pdfg.WriteFile 함수를 사용하여 지정된 경로에 쓸 수 있습니다.

  1. 전체 코드

이제 문서를 PDF로 변환하는 두 가지 주요 단계를 완료했습니다. 다음은 전체 예제 코드입니다.

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
}

이 예제에서는 DocxToHtml 및 HtmlToPdf라는 두 가지 함수를 정의합니다. DocxToHtml 함수는 입력 docx 파일을 HTML 문자열로 변환하는 데 사용되며, HtmlToPdf 함수는 HTML 문자열을 PDF 파일로 변환하는 데 사용됩니다. 기본 함수에서는 먼저 DocxToHtml 함수를 호출하여 docx 파일을 HTML 문자열로 변환한 다음 HtmlToPdf 함수를 호출하여 HTML 문자열을 PDF 파일로 변환합니다. 마지막으로 생성된 중간 파일 input.html을 삭제합니다.

  1. 요약

이 글에서는 Golang을 활용하여 간단한 문서를 PDF 도구로 구현하는 방법을 소개했습니다. 우리는 go-wkhtmltopdf와 unioffice라는 두 개의 라이브러리를 사용했습니다. go-wkhtmltopdf 라이브러리는 HTML 형식 파일을 PDF 형식으로 변환하는 데 사용됩니다. unioffice 라이브러리는 docx 파일을 읽고 HTML 문자열로 변환하는 데 사용됩니다. 이 두 라이브러리를 사용하면 문서를 PDF 형식으로 쉽게 변환할 수 있습니다. 이 예제는 간단하지만 Golang을 사용하여 프로젝트를 개발하는 사람들에게 좋은 출발점이 되며 더욱 확장되고 최적화될 수 있습니다.

위 내용은 golang 문서를 pdf로의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:golang json转string다음 기사:golang json转string