GO에서 PDF 보고서 생성하기
좋습니다. 이제 GO에서 PDF를 생성합니다!
PDF 문서를 프로그래밍 방식으로 생성하는 것은 애플리케이션에서 중요한 기능이 될 수 있습니다. 여기서는 Go 프로그래밍 언어(Golang)에서 PDF 파일 생성에 사용할 수 있는 라이브러리 목록을 탐색하고 예제를 통한 간단한 리뷰를 제공합니다.
적합한 솔루션은 예를 들어 단순한 문서 생성인지, 아니면 복잡한 기능에 부응하는 PDF 생성인지에 따라 다를 수 있습니다.
네, 이미지는 AI로 생성된 것이며, 모델은 Flux1.Dev입니다.
라이브러리 및 도구
gofpdf
GoPdf는 PDF 생성을 위한 직관적인 라이브러리입니다. 텍스트, 이미지, 도형, 테이블 추가 및 여러 페이지 처리를 지원합니다. 단순한 작업부터 중간 수준의 복잡한 PDF 생성 작업에 적합합니다.
유지 관리자: Jung Kurt (개발은 중단되었지만 여전히 사용됨).
제한 사항: 업데이트가 부족하지만 기존 사용 사례는 유지됨.
예제:
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
유지 관리자: signintech (적극적으로 유지보수 중).
Go 프로그래밍 언어에서 이 목적을 위해 눈에 띄는 라이브러리 중 하나는 SignInTech가 개발한 gopdf입니다. 이 라이브러리는 외부 의존성이나 C 라이브러리에 의존하지 않고 프로그래밍 방식으로 PDF를 생성하는 직접적인 방법을 제공합니다.
gopdf는 PDF 문서 생성을 위해 특별히 설계된 순수 Go 라이브러리입니다. 주로 PDF 생성에 초점을 맞춘 단순하고 효율적인 API를 제공하여 기본 작업을 사용할 때 더 쉬우면서, 더 복잡한 작업에 필요한 유연성을 유지합니다.
주요 기능:
- 순수 Go 구현: 외부 의존성이나 C 라이브러리 불필요.
- 단순한 API: PDF 생성을 위한 사용하기 쉬운 함수.
- 효율적인 성능: 빠르고 효율적인 PDF 생성을 위해 최적화됨.
사용 예제
gopdf를 사용하는 방법을 설명하기 위해, 간단한 PDF 문서를 생성하는 기본 예제를 살펴보겠습니다:
package main
import (
"github.com/signintech/gopdf"
)
func main() {
// Create a new PDF instance
pdf := gopdf.New()
// Set the page size and margins
pdf.SetPageSize(gopdf.PageSizeA4)
pdf.AddPage()
// Add some text to the PDF
pdf.SetFont("Arial", "", 12)
pdf.Write(50, 50, "Hello, World!")
// Save the PDF to a file
err := pdf.SaveToFile("example.pdf")
if err != nil {
panic(err)
}
}
이 예제는 새로운 PDF 문서를 생성하고, 텍스트를 추가하고, 파일을 저장하는 방법을 보여줍니다.
gopdf 고급 기능:
- 이미지 추가: AddImage 메서드를 사용하여 PDF 문서에 이미지를 삽입할 수 있습니다.
- 도형 그리기: 라이브러리는 선, 사각형 및 기타 도형을 그리는 함수를 제공합니다.
- PDF 보호: 액세스를 제한하기 위해 PDF에 비밀번호 보호를 설정할 수 있습니다.
pdfcpu
- 유지 관리자: PDFCPU 팀 (https://github.com/pdfcpu/pdfcpu).
- 사용 사례: 대규모 PDF 조작 및 분석.
Go에서 PDF 조작을 위해 사용할 수 있는 강력한 라이브러리 중 또 하나는 pdfcpu입니다. 이 라이브러리는 API와 커맨드 라인 인터페이스(CLI)를 통해 PDF 파일을 생성, 수정, 검사하는ための 포괄적인 기능 모음을 제공합니다. 아래에서는 pdfcpu의 설명, 사용 예제 및 주요 기능에 대해 자세히 다룹니다.
pdfcpu는 암호화를 지원하는 Go 기반 PDF 처리 라이브러리로, PDF 문서의 다양한 측면을 처리하기 위한 강력한 도구를 제공합니다. 모든 PDF 버전과 호환되며, PDF 2.0 (ISO-32000-2)에 대한 지속적인 개선이 이루어지고 있습니다. 이 라이브러리는 포괄적인 범위의 PDF 처리 기능을 제공하려는 것을 목표로 하며, 단순한 사용 사례부터 복잡한 사용 사례까지 적합하도록 설계되었습니다.
주요 기능
- 암호화 지원: pdfcpu는 암호화를 지원하여 개발자가 PDF 문서를 효과적으로 보호할 수 있게 합니다.
- API 및 CLI: 프로그래밍 방식으로 액세스하기 위한 API와 빠른 작업을 위한 커맨드 라인 인터페이스(CLI)를 모두 제공합니다.
- 배치 처리: 풍부한 커맨드 라인을 통한 강력한 배치 처리 지원으로 여러 파일을 한 번에 처리하는 데 효율적입니다.
- 호환성: 모든 PDF 버전과 호환되며, PDF 2.0에 대한 기본 지원 및 지속적인 개선이 포함됩니다.
pdfcpu를 사용하기 시작하려면 Go의 패키지 관리 시스템을 사용하여 설치해야 합니다:
go get github.com/pdfcpu/pdfcpu
기본 커맨드 라인 작업
pdfcpu는 다양한 작업에 대한 여러 명령을 제공합니다. 여기 몇 가지 예제가 있습니다:
이미지에서 PDF 생성
다음 명령을 사용하여 하나 이상의 이미지 파일을 PDF 파일로 변환할 수 있습니다:
pdfcpu img2pdf out.pdf image1.jpg image2.png
이 명령은 각 이미지가 별도의 페이지에 렌더링된 PDF를 생성합니다.
여러 PDF 파일을 하나의 문서로 병합하려면 merge 명령을 사용하십시오:
pdfcpu merge output.pdf file1.pdf file2.pdf
pdfcpu 사용 예제
더 복잡한 작업을 위해 pdfcpu가 제공하는 API를 사용할 수 있습니다. Go 코드를 사용하여 새 PDF를 생성하고 텍스트를 추가하는 방법의 예입니다:
package main
import (
"github.com/pdfcpu/pdfcpu"
"log"
)
func main() {
// Create a new PDF document
doc := pdfcpu.NewPDF(0, 0)
defer doc.Close()
// Add a page to the document
page := doc.AddPage()
page.SetMediaBox(pdfcpu.MediaBox{
LLX: 0,
LLY: 0,
URX: 612,
URY: 792,
})
// Add text to the page
content := "Hello, World!"
font := pdfcpu.NewFont("Helvetica", "")
page.AddText(content, font, 12, 100, 750)
// Save the document
err := doc.Save("output.pdf")
if err != nil {
log.Fatal(err)
}
}
이 예제는 pdfcpu의 API를 사용하여 새 PDF를 생성하고, 페이지를 추가하고, 텍스트를 기록하는 방법을 보여줍니다.
Maroto
- 유지 관리자: go-playground 팀 (https://github.com/go-playground/maroto).
- 사용 사례: 디자인 중심 접근법을 선호하는 개발자 (Bootstrap과 유사).
- Bootstrap에서 영감을 받아; HTML/CSS와 유사한 선언적 스타일로 사용하기 쉽게 설계되었습니다.
- gofpdf 위에 구축되어, 강력한 커스터마이징 옵션을 유지하면서 생성 프로세스를 단순화합니다.
Maroto는 PDF 생성을 위한 또 다른 Go 라이브러리이지만, 저수준 세부 사항을 추상화하여 프로세스를 단순화하는 데 초점을 맞춥니다. gofpdf 라이브러리 위에 구축되어 있으며, 문서 생성을 위한 더 사용자 친화적인 API를 제공합니다.
Maroto 사용 예제
다음은 Maroto를 사용하여 간단한 PDF를 생성하는 방법의 예입니다:
package main
import (
"github.com/andreyhoffmann1103/maroto"
)
func main() {
// Create a new PDF document with specified dimensions
m := maroto.NewPDF(595, 842) // A4 size in points
// Add some text to the first page
m.AddText("Hello, Maroto!", 0, 0)
// Save the PDF to a file
err := m.OutputFileAndClose("example.pdf")
if err != nil {
panic(err)
}
}
이 예제는 Maroto를 사용하여 새 PDF 문서를 생성하고(한 페이지 포함) 텍스트를 추가하는 방법을 보여줍니다.
Unipdf
UniPDF는 Golang(Go)에서 PDF 파일을 생성하고 처리하기 위한 또 다른 강력하고 포괄적인 라이브러리입니다. PDF 문서에서 콘텐츠를 생성, 수정 및 추출해야 하는 개발자들 사이에서 인기 있는 이유인 다양한 기능을 제공합니다.
- 유지 관리자: UnidocLib (https://unidoc.io).
- 사용 사례: 고급 PDF 처리 (암호화, 병합, 스크립팅).
- PDF 생성 및 처리를 위한 강력한 라이브러리 (순수 Go).
- 링크, 북마크, 병합/분할, 암호화 등 인터랙티브 요소를 포함한 광범위한 기능을 제공합니다.
- PDF 개체(사전에(streams) 읽기/쓰기를 위한 포괄적인 API.
- 강력한 PDF 생성 기능이 필요한 애플리케이션에 적합합니다.
UniPDF 설치
UniPDF를 사용하기 시작하려면 라이브러리를 설치해야 합니다. 다음 단계를 따르십시오:
# Create a New Directory:
mkdir go-pdf-generator cd go-pdf-generator
# Initialize the Go Module:
go mod init go-pdf-generator
# Install UniPDF Library:
go get github.com/unidoc/unipdf/v3
이것은 프로젝트를 설정하고 필요한 의존성을 설치합니다.
기본 사용 예제
UniPDF를 사용하여 PDF 문서를 생성하는 간단한 예제는 다음과 같습니다:
package main
import (
"github.com/unidoc/unipdf/v3/core"
"github.com/unidoc/unipdf/v3/model"
"github.com/unidoc/unipdf/v3/creator"
)
func main() {
// Create a new PDF document
pdf := creator.New()
// Add a page to the PDF
page := pdf.NewPage()
// Set up the content stream for the page
contentStream := model.NewContentStream()
page.SetContents(contentStream)
// Add text to the page
text := "Hello, UniPDF!"
font := creator.NewStandardFont(creator.FontHelvetica)
textObject := model.NewText(text, font, 12)
contentStream.Add(textObject)
// Save the PDF document
err := pdf.WriteToFile("example.pdf")
if err != nil {
panic(err)
}
}
이 예제는 새 PDF 문서를 생성하고, 페이지를 추가하고, 텍스트를 기록하는 방법을 보여줍니다. 결과 파일 example.pdf에는 “Hello, UniPDF!“라는 텍스트가 포함되어 있습니다.
wkhtmltopdf Wrapper
- https://github.com/SebastiaanKlippert/go-wkhtmltopdf
- 의존성:
brew또는apt-get을 통해wkhtmltopdf설치 필요. - 사용 사례: 동적 HTML 콘텐츠에서 PDF 생성 (예: 송장, 보고서).
기능:
- HTML 템플릿(Go의
html/template으로 렌더링)을 PDF로 변환합니다. - 여백, 페이지 방향, 헤더/푸터를 사용자 정의할 수 있습니다.
- 문서 디자인이 복잡하고 HTML/CSS 스타일링을 포함할 때 적합합니다.
- HTML 콘텐츠를 PDF 형식으로 변환하기 위해 wkhtmltopdf를 백엔드로 사용합니다.
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 (EndFirstCorp):
- 검증, 최적화, 분할/병합 등 다양한 PDF 작업을 위한 커맨드 라인 도구.
- PDF 문서와 관련된 배치 처리 및 관리 작업에 유용합니다.
pdflib 개요
pdflib 라이브러리는 Go 프로그래밍 언어를 위한 포괄적인 PDF 프로세서로 설계되었습니다. 검증, 최적화, 분할, 병합, 콘텐츠 추출, 트리밍 등 다양한 기능을 지원합니다. 라이브러리는 PDF 32000-1:2008 (PDF 1.7) 표준을 준수하므로 다양한 PDF 문서와 호환성을 보장합니다.
주요 기능
- 검증: PDF 파일이 PDF 1.7 표준을 준수하는지 확인합니다.
- 최적화: 중복된 자원을 제거하여 파일 크기를 줄입니다.
- 분할 및 병합: 다중 페이지 PDF를 단일 페이지 PDF로 분할하거나 여러 PDF를 하나로 병합할 수 있습니다.
- 추출: PDF에서 이미지, 폰트, 콘텐츠, 페이지를 추출합니다.
- 트리밍: PDF 문서의 트리밍된 버전을 생성합니다.
설치
pdflib을 사용하려면 Go의 패키지 관리 시스템을 통해 설치해야 합니다. 다음을 실행하여 수행할 수 있습니다:
go get github.com/EndFirstCorp/pdflib
기본 사용 예제 - PDF 검증
pdflib 라이브러리를 사용하여 기본 PDF 작업을 수행하는 간단한 예제는 다음과 같습니다:
PDF를 PDF 1.7 표준에 대해 검증하려면 다음 코드를 사용할 수 있습니다:
package main
import ( "fmt" "github.com/EndFirstCorp/pdflib/cmd/pdflib" )
func main() {
// Validate a PDF file
err := pdflib.Validate("example.pdf")
if err != nil {
fmt.Println("Validation failed:", err)
} else {
fmt.Println("PDF is valid.")
}
}
결론
Go에서 PDF를 생성할 때 라이브러리 선택은 프로젝트의 복잡성과 특정 요구 사항에 따라 달라집니다. 다음 권장 사항을 제공합니다:
- 간단한 문서:
gofpdf또는Maroto를 사용하십시오. 이러한 라이브러리는 단순한 작업에 대해 단순성과 사용 용이성을 제공합니다. - HTML/CSS가 포함된 복잡한 디자인: 복잡한 HTML 콘텐츠와 스타일링을 처리하기 위해 wkhtmltopdf를 활용하는
wkhtmltopdf Wrapper를 사용하십시오. - 고급 PDF 처리: 애플리케이션이 암호화, 인터랙티브 요소, 자세한 서식 지정 및 포괄적인 조작 기능이 필요할 경우
Unipdf또는pdfcpu를 선택하십시오.
이 라이브러리들은 각각 PDF 생성에 필요한 다양한 요구 사항을 충족시키는 고유한 강점을 제공하며, 개발자가 특정 요구 사항에 따라 선택할 수 있는 다양한 도구를 제공합니다.