Введение

Aspose.PDF FOSS for Go — это чисто Go библиотека для работы с PDF-документами. Она предоставляет API для создания новых PDF-файлов с нуля, открытия и редактирования существующих файлов, разбиения документов на отдельные страницы, объединения нескольких PDF-файлов и применения шифрования на основе пароля — всё без каких-либо нативных зависимостей C или C++.

Библиотека доступна как Go-модуль по адресу github.com/aspose-pdf-foss/aspose-pdf-foss-for-go и распространяется под лицензией MIT. Требуется Go1.24+.

go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go

В этой статье рассматриваются основные возможности: операции с документами, безопасность, заполнение AcroForm, табличная разметка, закладки и аннотации.


Ключевые особенности

Разделение и объединение документов

Тип Document предоставляет Split() для разделения PDF на документы по отдельным страницам и Append() для слияния внешнего документа на месте. PageRange позволяет работать с подмножеством страниц для выборочного извлечения или экспорта. Metadata открывает поля информации о документе для чтения и записи автора, названия и даты создания.

doc, _ := pdf.Open("report.pdf")

// Split into per-page PDFs
pages, _ := doc.Split()
for i, p := range pages {
	p.Save(fmt.Sprintf("page%03d.pdf", i+1))
}

// Merge a second PDF into doc
doc2, _ := pdf.Open("appendix.pdf")
doc.Append(doc2)
doc.Save("combined.pdf")

Шифрование паролем и разрешения

EncryptionOptions настраивает пользовательский пароль, пароль владельца и разрешённые операции одним вызовом SetEncryption. Поддерживаемые алгоритмы: AES-128 (по умолчанию), AES-256 (ISO 32000-2, генерирует вывод PDF 2.0) и RC4-128 для обратной совместимости. Permissions позволяет разрешать или запрещать отдельные операции — печать, копирование, доступность — независимо. OpenWithPassword открывает зашифрованные файлы; RemoveEncryption удаляет пароль перед сохранением копии в открытом виде.

doc, _ := pdf.Open("contract.pdf")
doc.SetEncryption(pdf.EncryptionOptions{
	UserPassword:  "userpass",
	OwnerPassword: "ownerpass",
	Permissions:   &pdf.Permissions{AllowPrint: true, AllowCopy: false},
})
doc.Save("contract_protected.pdf")

AcroForm обработка полей

Form предоставляет доступ ко всем полям AcroForm в документе. Field является базовым интерфейсом; утверждения типов дают доступ к TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField и ButtonField. Устанавливайте значения полей по их имени — просмотрщик автоматически восстанавливает отображения через /NeedAppearances=true при сохранении.

doc, _ := pdf.Open("application.pdf")
text := doc.Form().Field("full_name").(*pdf.TextBoxField)
text.SetValue("Jane Doe")

check := doc.Form().Field("agree_terms").(*pdf.CheckboxField)
check.SetChecked(true)

combo := doc.Form().Field("country").(*pdf.ComboBoxField)
combo.SetSelected(0)

doc.Save("application_filled.pdf")

Разметка таблицы

Table, Row и Cell создают структурированные сеточные макеты на страницах PDF. BorderInfo настраивает стиль границы для каждой ячейки или для всей таблицы. MarginInfo задаёт отступы ячеек. TextStyle управляет шрифтом, размером, цветом и выравниванием через HAlign и VAlign. Image можно разместить внутри ячеек вместе с текстом.

doc, _ := pdf.Open("invoice_template.pdf")
tbl := pdf.NewTable()
tbl.SetColumnWidths([]float64{120, 80, 80})

row := tbl.AddRow()
row.AddCell("Item")
row.AddCell("Qty")
row.AddCell("Price")

page, _ := doc.Page(1)
page.AddTable(tbl, pdf.Rectangle{LLX: 72, LLY: 100, URX: 540, URY: 700})
doc.Save("invoice.pdf")

Закладки и навигация

OutlineItemCollection представляет отдельный элемент закладки. Используйте SetTitle, SetBold, SetColor и SetDestination для его настройки. DestinationXYZ указывает точную координату страницы; DestinationFit подгоняет страницу под просмотрщик. NamedDestinations регистрирует переиспользуемые цели перехода, доступные по имени.

doc, _ := pdf.Open("manual.pdf")
page, _ := doc.Page(1)

chapter := pdf.NewOutlineItemCollection(doc)
chapter.SetTitle("Chapter 1: Getting Started")
chapter.SetBold(true)
chapter.SetDestination(pdf.NewDestinationXYZ(page, 0, 800, 1.0))
doc.Outlines().Add(chapter)

section := pdf.NewOutlineItemCollection(doc)
section.SetTitle("Installation")
section.SetDestination(pdf.NewDestinationFit(page))
chapter.Add(section)

doc.Save("manual_with_bookmarks.pdf")

Аннотации и штампы

AnnotationCollection содержит все аннотации на странице. TextAnnotation добавляет комментарий-наклейку. StampAnnotation помещает штамп одобрения или информационный штамп, используя одно из предопределённых значений StampName. HighlightAnnotation отмечает текстовые области. RedactAnnotation безвозвратно удаляет конфиденциальный контент. LinkAnnotation присваивает действия URI или перехода к странице кликабельным областям.

doc, _ := pdf.Open("draft.pdf")
page, _ := doc.Page(1)

stamp := pdf.NewStampAnnotation(page, pdf.Rectangle{LLX: 100, LLY: 700, URX: 250, URY: 750}, pdf.StampNameApproved)
page.Annotations().Add(stamp)

doc.Save("draft_approved.pdf")

Быстрый старт

Установите модуль:

go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go

Минимальный рабочий процесс — открыть PDF, зашифровать его паролем и сохранить:

package main

import (
	"fmt"
	pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"
)

func main() {
	doc, err := pdf.Open("input.pdf")
	if err != nil {
		panic(err)
	}

	doc.SetEncryption(pdf.EncryptionOptions{
		UserPassword:  "secret",
		OwnerPassword: "ownerSecret",
		Permissions:   &pdf.Permissions{AllowPrint: true},
	})

	if err := doc.Save("output_encrypted.pdf"); err != nil {
		panic(err)
	}
	fmt.Println("Saved output_encrypted.pdf")
}

Открытый исходный код и лицензирование

Aspose.PDF FOSS для Go распространяется по лицензии MIT. Нет ограничений по использованию, нет платы за выполнение и нет требований к регистрации. Исходный код доступен по адресу github.com/aspose-pdf-foss/aspose-pdf-foss-for-go.

Коммерческое использование разрешено согласно условиям лицензии MIT. Если ваш проект требует корпоративной поддержки, расширенного охвата форматов или облачной интеграции, Aspose.PDF — Enterprise Product Family представляет собой отдельное коммерческое предложение.


Начало работы

Связанные ресурсы