Wprowadzenie
W tym poście dowiesz się, jak wykonywać podstawowe operacje zarządzania dokumentami PDF w Go przy użyciu Aspose.PDF FOSS: otwieranie i zapisywanie dokumentów, tworzenie nowych plików PDF, dzielenie dokumentu na pliki pojedynczych stron, łączenie wielu plików PDF, wyodrębnianie zakresów stron oraz odczytywanie lub zapisywanie metadanych dokumentu. Wszystkie operacje są dostępne bez żadnych natywnych zależności C lub C++.
Biblioteka jest modułem Go pod adresem github.com/aspose-pdf-foss/aspose-pdf-foss-for-go, licencjonowana na licencji MIT i wymaga Go 1.24 lub nowszej.
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goTen post obejmuje typy Document, Page, PageRange i DocumentInfo, które tworzą podstawowy interfejs zarządzania dokumentami.
Podstawowe operacje
Otwieranie i zapisywanie dokumentów
pdf.Open ładuje PDF z dysku i zwraca *Document. OpenWithPassword robi to samo dla plików zabezpieczonych hasłem. Document.Save zapisuje wynik z powrotem do ścieżki pliku. Document.WriteTo zapisuje do io.Writer w scenariuszach pamięciowych lub sieciowych.
// 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())
Tworzenie nowego dokumentu
pdf.NewDocument tworzy pusty *Document. Użyj AddBlankPageFromFormat, aby dodać pustą stronę o standardowym rozmiarze papieru. PageFormat udostępnia nazwane stałe formatów (PageFormatA4, PageFormatLetter, itp.).
doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
doc.Save("new_document.pdf")
Dzielenie dokumentu
Document.Split dzieli PDF na indywidualne wartości *Document dla każdej strony. Każdy zwrócony dokument zawiera dokładnie jedną stronę i może być zapisywany niezależnie. Jest to przydatne przy dzieleniu raportów generowanych w partiach lub rozdzielaniu stron faktur.
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))
Łączenie wielu plików PDF
Document.Append łączy drugi *Document z odbiorcą w miejscu, dołączając wszystkie strony ze źródła. Wywołuj Append wielokrotnie, aby łączyć wiele dokumentów przed pojedynczym Save. Dokument źródłowy nie jest modyfikowany.
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")
Wyodrębnianie zakresu stron
PageRange reprezentuje zakres inkluzywny (liczony od 1, przy użyciu pól From/To). Przekaż zakresy do Document.Extract, aby utworzyć nowy *Document zawierający tylko wybrane strony. Jest to przydatne przy tworzeniu eksportów rozdział po rozdziale lub redagowanych kopii, które pomijają określone strony.
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")
Odczytywanie i zapisywanie metadanych dokumentu
Document.Info zwraca strukturę DocumentInfo udostępniającą pola słownika Info: Title, Author, Subject, Keywords, Creator, Producer, CreationDate i ModDate. Zmodyfikuj pola bezpośrednio, a następnie wywołaj Document.SetInfo, aby zapisać zaktualizowaną strukturę, przed wywołaniem 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")
Dostęp do poszczególnych stron
Document.Page(n) pobiera *Page według indeksu liczonego od 1. Document.PageCount zwraca łączną liczbę stron. Strony udostępniają właściwości geometrii do odczytu ramek strony i rozmiaru.
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)
Szybki start
Zainstaluj moduł za pomocą go get, a następnie uruchom poniższy kompletny przykład. Przykład otwiera dokument źródłowy, wyodrębnia jego pierwsze trzy strony do nowego dokumentu, aktualizuje pola metadanych DocumentInfo i zapisuje wynik na dysku.
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goPełny przykład, który otwiera dokument, wyodrębnia strony 1–3 i zapisuje wynik z zaktualizowanymi metadanymi:
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())
}
Open Source i licencjonowanie
Aspose.PDF FOSS dla Go jest udostępniony na licencji MIT. Nie ma ograniczeń użytkowania, opłat za uruchomienie ani wymagań rejestracji. Kod źródłowy jest dostępny pod adresem github.com/aspose-pdf-foss/aspose-pdf-foss-for-go.