Въведение
В този пост ще научите как да извършвате основни операции за управление на 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 файл от диска и връща a *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) извлича A. *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 (на английски: GitHub).