일상 업무에서 쉽게 공유하고 인쇄할 수 있도록 일부 문서를 PDF 형식으로 변환해야 하는 경우가 많습니다. 시중에는 기성 PDF 변환 도구가 많이 있지만 대부분의 기술 인력에게는 문서를 PDF로 변환 도구를 직접 구현하는 것이 더 흥미롭고 의미가 있습니다. 이번 글에서는 Golang을 사용하여 간단한 문서를 PDF 도구로 구현하는 방법을 소개하겠습니다.
먼저 파일 변환 및 PDF 생성 작업을 완료하려면 두 개의 라이브러리를 설치해야 합니다. 이 두 라이브러리는 다음과 같습니다.
go mod 명령을 사용하여 다음 두 라이브러리를 설치할 수 있습니다.
go get -u github.com/SebastiaanKlippert/go-wkhtmltopdf go get -u github.com/unidoc/unioffice
이제 두 라이브러리를 준비했으므로 다음 단계는 문서를 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 문자열이 출력 값으로 반환됩니다.
이제 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 함수를 사용하여 지정된 경로에 쓸 수 있습니다.
이제 문서를 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을 삭제합니다.
이 글에서는 Golang을 활용하여 간단한 문서를 PDF 도구로 구현하는 방법을 소개했습니다. 우리는 go-wkhtmltopdf와 unioffice라는 두 개의 라이브러리를 사용했습니다. go-wkhtmltopdf 라이브러리는 HTML 형식 파일을 PDF 형식으로 변환하는 데 사용됩니다. unioffice 라이브러리는 docx 파일을 읽고 HTML 문자열로 변환하는 데 사용됩니다. 이 두 라이브러리를 사용하면 문서를 PDF 형식으로 쉽게 변환할 수 있습니다. 이 예제는 간단하지만 Golang을 사용하여 프로젝트를 개발하는 사람들에게 좋은 출발점이 되며 더욱 확장되고 최적화될 수 있습니다.
위 내용은 golang 문서를 pdf로의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!