>백엔드 개발 >Golang >HTML을 PDF로 Golang

HTML을 PDF로 Golang

王林
王林원래의
2023-05-15 15:22:081421검색

실제 개발 프로젝트에서는 HTML을 PDF로 변환해야 하는 경우가 있습니다. 예를 들어 인쇄나 배포 등을 위해 일부 페이지를 PDF 파일로 저장하고 싶습니다. 이 요구 사항을 실현하기 위해 Golang 언어를 사용하는 것도 매우 간단합니다. Golang을 사용하여 HTML을 PDF로 변환하는 기능을 구현하는 방법을 단계별로 설명하겠습니다.

먼저 몇 가지 개념을 명확히 해야 합니다.

HTML(Hyper Text Markup Language), 하이퍼텍스트 마크업 언어로 브라우저를 통해 액세스할 수 있는 구조화된 문서와 웹 페이지를 만드는 데 사용됩니다.

PDF(Portable Document Format)는 휴대용 문서 형식으로 여러 운영 체제에 적합하며 다양한 장치에서 동일한 모양을 표시할 수 있습니다.

다음으로 몇 가지 중요한 라이브러리를 사용해야 합니다.

  1. gofpdf 라이브러리는 Golang에서 PDF 파일을 생성하는 데 사용됩니다. 다음 명령을 통해 설치할 수 있습니다. HTML/CSS를 PDF로 변환하는 명령줄 도구인

    go get -u github.com/jung-kurt/gofpdf

  2. wkhtmltopdf는 다음 URL에서 다운로드할 수 있습니다: https://wkhtmltopdf.org/downloads.html

이 두 라이브러리를 설치한 후 HTML을 PDF로 변환하는 기능 구현을 시작할 수 있습니다. 구체적인 단계는 다음과 같습니다.

  1. HTML 파일의 내용을 읽습니다.

먼저 로컬로 변환할 HTML 파일을 읽어야 합니다. , os 패키지의 Open 메서드를 사용하여 파일을 연 다음 ioutil 패키지의 ReadFile 메서드를 사용하여 파일 내용을 읽을 수 있습니다. 구체적인 코드는 다음과 같습니다.

content, err := ioutil.ReadFile("path/to/html")
if err != nil {
    log.Fatalf("Could not read html file: %v", err)
}
  1. Convert HTML content to PDF

exec 패키지를 사용하면 wkhtmltopdf 명령줄 도구가 호출되어 HTML 콘텐츠를 PDF 파일로 변환할 수 있습니다. 구체적인 코드는 다음과 같습니다.

cmd := exec.Command("wkhtmltopdf", "-", "path/to/pdf")
stdin, err := cmd.StdinPipe()
if err != nil {
    log.Fatalf("Could not get stdin pipe: %v", err)
}
go func() {
    defer stdin.Close()
    _, _ = io.WriteString(stdin, string(content))
}()
out, err := cmd.CombinedOutput()
if err != nil {
    log.Fatalf("Could not convert html to pdf: %v: %s", err, out)
}

그 중 cmd.StdinPipe()는 명령의 표준 입력으로 작성할 수 있는 파이프를 반환합니다. HTML 콘텐츠를 명령의 표준 입력으로 사용할 수 있습니다. cmd.CombinedOutput()은 명령이 완료될 때까지 기다렸다가 명령 출력을 반환합니다. 오류가 있으면 오류 메시지를 반환합니다.

  1. 사용자에게 변환이 성공했다는 메시지를 표시합니다.

마지막으로 HTML 파일이 PDF 파일로 성공적으로 변환되었음을 사용자에게 메시지를 표시해야 합니다. 코드는 다음과 같습니다.

fmt.Println("Convert completed.")

전체 코드는 다음과 같습니다.

package main

import (
    "fmt"
    "io"
    "io/ioutil"
    "log"
    "os/exec"
)

func main() {
    content, err := ioutil.ReadFile("path/to/html")
    if err != nil {
        log.Fatalf("Could not read html file: %v", err)
    }

    cmd := exec.Command("wkhtmltopdf", "-", "path/to/pdf")
    stdin, err := cmd.StdinPipe()
    if err != nil {
        log.Fatalf("Could not get stdin pipe: %v", err)
    }
    go func() {
        defer stdin.Close()
        _, _ = io.WriteString(stdin, string(content))
    }()
    out, err := cmd.CombinedOutput()
    if err != nil {
        log.Fatalf("Could not convert html to pdf: %v: %s", err, out)
    }

    fmt.Println("Convert completed.")
}

위 코드에서는 gofpdf 라이브러리를 사용하여 Golang 코드를 통해 PDF 파일을 생성합니다. gofpdf 라이브러리의 관련 메소드를 사용하여 텍스트, 그림, 표 등을 추가한 후 PDF 파일을 생성할 수 있습니다. 코드는 다음과 같습니다.

package main

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

func main() {
    pdf := gofpdf.New("P", "mm", "A4", "")

    pdf.AddPage()

    pdf.SetFont("Arial", "B", 16)
    pdf.Cell(40, 10, "Hello, World!")

    pdf.Image("path/to/image", 10, 20, 30, 0, false, "", 0, "")

    pdf.OutputFileAndClose("path/to/pdf")

    fmt.Println("PDF created.")
}

위 코드에서는 PDF 파일을 만들고 Hello를 추가했습니다. , 세계에! 그리고 사진. 마지막으로 PDF 파일을 로컬에 저장하고 사용자에게 PDF 파일이 성공적으로 생성되었음을 알리는 메시지를 표시합니다.

요약: HTML을 PDF로 변환하는 것은 매우 일반적인 요구 사항이며 명령줄 도구 및 관련 라이브러리를 통해 Golang 언어에서도 수행할 수 있습니다. 이 글을 통해 독자들이 이 과정에 대해 포괄적이고 심도 있게 이해하고, 실제 개발에 유연하게 활용할 수 있기를 바랍니다.

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

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