소개
이 게시물에서는 Aspose.PDF FOSS를 사용하여 Go에서 핵심 PDF 문서 관리 작업을 수행하는 방법을 배웁니다: 문서 열기 및 저장, 새 PDF 만들기, 문서를 페이지별 파일로 분할, 여러 PDF 병합, 페이지 범위 추출, 그리고 문서 메타데이터 읽기 또는 쓰기. 모든 작업은 네이티브 C 또는 C++ 종속성 없이 사용할 수 있습니다.
이 라이브러리는 github.com/aspose-pdf-foss/aspose-pdf-foss-for-go에 있는 Go 모듈이며, MIT 라이선스를 갖고 있고, Go 1.24 이상이 필요합니다.
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go이 게시물에서는 핵심 문서 관리 인터페이스를 구성하는 Document, Page, PageRange, 그리고 DocumentInfo 타입을 다룹니다.
핵심 작업
문서 열기 및 저장
pdf.Open은(는) 디스크에서 PDF를 로드하고 *Document을(를) 반환합니다. OpenWithPassword는 비밀번호로 보호된 파일에 대해 동일하게 수행합니다. Document.Save은(는) 결과를 파일 경로에 다시 씁니다. Document.WriteTo은(는) 인메모리 또는 네트워크 시나리오를 위해 io.Writer에 씁니다.
// Open a standard PDF
doc, err := pdf.Open("input.pdf")
if err != nil {
panic(err)
}
// Open an encrypted PDF
protected, err := pdf.OpenWithPassword("locked.pdf", "userpassword")
if err != nil {
panic(err)
}
// Save to a new path
err = doc.Save("output.pdf")
fmt.Println(protected.PageCount())
새 문서 만들기
pdf.NewDocument은(는) 빈 *Document을(를) 생성합니다. 표준 용지 크기의 빈 페이지를 추가하려면 AddBlankPageFromFormat를 사용하십시오. PageFormat은(는) 명명된 형식 상수(PageFormatA4, PageFormatLetter 등)를 제공합니다.
doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
doc.Save("new_document.pdf")
문서 분할
Document.Split은(는) PDF를 개별 페이지별 *Document 값으로 분할합니다. 반환된 각 문서는 정확히 한 페이지를 포함하며 독립적으로 저장할 수 있습니다. 이는 배치 생성된 보고서를 분할하거나 청구서 페이지를 구분할 때 유용합니다.
doc, _ := pdf.Open("multi_page.pdf")
pages, err := doc.Split()
if err != nil {
panic(err)
}
for i, p := range pages {
filename := fmt.Sprintf("page_%03d.pdf", i+1)
if err := p.Save(filename); err != nil {
fmt.Printf("Failed to save page %d: %v\n", i+1, err)
}
}
fmt.Printf("Split into %d pages\n", len(pages))
다중 PDF 병합
Document.Append은(는) 두 번째 *Document을(를) 수신자에 제자리에서 병합하여 소스의 모든 페이지를 추가합니다. 여러 문서를 하나의 Save 앞에 연결하려면 Append를 반복해서 호출하십시오. 소스 문서는 수정되지 않습니다.
base, _ := pdf.Open("report_intro.pdf")
section1, _ := pdf.Open("section1.pdf")
section2, _ := pdf.Open("section2.pdf")
appendix, _ := pdf.Open("appendix.pdf")
base.Append(section1)
base.Append(section2)
base.Append(appendix)
base.Save("complete_report.pdf")
페이지 범위 추출
PageRange은(는) 포함 범위(1 기반, From/To 필드 사용)를 나타냅니다. 구간을 Document.Extract에 전달하면 선택된 페이지만 포함하는 새 *Document가 생성됩니다. 이는 챕터별 내보내기나 특정 페이지를 제외한 검열된 사본을 만들 때 유용합니다.
doc, _ := pdf.Open("long_report.pdf")
// Extract pages 3 through 7
subset, err := doc.Extract(pdf.PageRange{From: 3, To: 7})
if err != nil {
panic(err)
}
subset.Save("pages_3_to_7.pdf")
문서 메타데이터 읽기 및 쓰기
Document.Info은(는) DocumentInfo 구조체를 반환하며, Info 사전 필드인 Title, Author, Subject, Keywords, Creator, Producer, CreationDate, 및 ModDate를 노출합니다. 필드를 직접 수정한 뒤, Document.SetInfo을 호출하여 업데이트된 구조체를 다시 기록하고, 그 후 Save을 호출합니다.
doc, _ := pdf.Open("report.pdf")
info, _ := doc.Info()
// Read current values
fmt.Printf("Title: %s\nAuthor: %s\n", info.Title, info.Author)
// Update fields
info.Title = "Annual Report 2026"
info.Author = "Finance Team"
info.Keywords = "annual, report, finance, 2026"
doc.SetInfo(info)
doc.Save("report_updated.pdf")
개별 페이지 접근
Document.Page(n)은(는) 1 기반 인덱스로 *Page을(를) 가져옵니다. Document.PageCount는 전체 페이지 수를 반환합니다. 페이지는 페이지 박스와 크기를 읽기 위한 기하학 속성을 노출합니다.
doc, _ := pdf.Open("document.pdf")
fmt.Printf("Page count: %d\n", doc.PageCount())
page, _ := doc.Page(1)
size, err := page.Size()
if err != nil {
panic(err)
}
fmt.Printf("Page 1 size: %.0f x %.0f pt\n", size.Width, size.Height)
빠른 시작
go get을(를) 사용하여 모듈을 설치한 다음, 아래 완전한 예제를 실행합니다. 예제는 원본 문서를 열고, 처음 세 페이지를 새 문서로 추출한 뒤, DocumentInfo 메타데이터 필드를 업데이트하고, 결과를 디스크에 저장합니다.
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go문서를 열고, 페이지 1–3을 추출한 뒤, 업데이트된 메타데이터와 함께 결과를 저장하는 완전한 예제:
package main
import (
"fmt"
pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"
)
func main() {
// Open source document
src, err := pdf.Open("source.pdf")
if err != nil {
panic(err)
}
// Extract pages 1-3
subset, err := src.Extract(pdf.PageRange{From: 1, To: 3})
if err != nil {
panic(err)
}
// Update metadata
info, _ := subset.Info()
info.Title = "Pages 1-3 Extract"
info.Author = "Document Pipeline"
subset.SetInfo(info)
if err := subset.Save("extract_pages_1_3.pdf"); err != nil {
panic(err)
}
fmt.Printf("Saved %d pages\n", subset.PageCount())
}
오픈 소스 및 라이선스
Aspose.PDF FOSS for Go는 MIT 라이선스로 출시되었습니다. 사용 제한이 없으며, 런타임 비용도 없고, 등록 요구사항도 없습니다. 소스 코드는 github.com/aspose-pdf-foss/aspose-pdf-foss-for-go에서 확인할 수 있습니다.