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, Не требуется никаких регистрационных требований. Источник доступен на сайте: http://www.cd-sysop.com/sourcecode/ github.com/aspose-pdf-foss/asspose - pdf-Foss-for-go (последнее название сайта).