Introduction
У цій статті ви дізнаєтеся, як виконувати основні операції управління документами PDF в Go з використанням Aspose.PDF FOSS: відкриття та збереження документів, створення нових файлів PDF, розділення документа на файли за сторінку, об’єднання декількох файлов PDF , екстракція діапазонів сторінок і читання або написання метаданих документу. Всі операцій доступні без будь-яких корінних залежностей C або C ++.
Бібліотека є модулем Go на github.com/aspose-pdf-foss/aspose-pdf-foss-for-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 записує результат назад до a. шлях файлу. 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 в приймач на місці, додаючи Позвони. Append неодноразово перекидають кілька документів до однорічний Save.Початковий документ не змінюється.
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 повертає a DocumentInfo Структурне експонування Полі для інформаційного словника: 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) відбирає *Page на основі 1-го індексу. 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
Повний приклад, який відкриває документ, витягує сторінки 13 і зберігає результат з оновленими метаданами:
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 is released under the MIT license. There are no usage restrictions, без платіжів за виконання та без вимог до реєстрації. github.com/aspose-pdf-foss/asspose - pdf-Foss-for-go.