Часто задаваемые вопросы

Часто задаваемые вопросы

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

Какая лицензия у Aspose.PDF FOSS for Go?

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

Могу ли я использовать Aspose.PDF FOSS for Go в коммерческом продукте?

Да. MIT license разрешает неограниченное коммерческое использование, модификацию, распространение и частное использование. Вы должны включать уведомление об авторском праве и текст MIT license во все копии или значительные части программного обеспечения.

Существует ли корпоративная версия?

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


Установка и требования

Как установить Aspose.PDF FOSS для Go?

Добавьте модуль в ваш проект Go:

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

Импортируйте его с псевдонимом в ваших исходных файлах:

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

Какая версия Go требуется?

Требуется Go 1.24 или новее. Проверьте вашу версию с помощью go version.

Есть ли нативные или системные зависимости библиотек?

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


API Usage

Как открыть существующий PDF?

Используйте pdf.Open для обычных PDF и pdf.OpenWithPassword для файлов, защищённых паролем:

doc, err := pdf.Open("document.pdf")
if err != nil {
    panic(err)
}
fmt.Println(doc.PageCount())

Как разделить PDF на отдельные страницы?

Document.Split возвращает []*Document, по одному на страницу:

doc, _ := pdf.Open("report.pdf")
pages, _ := doc.Split()
for i, p := range pages {
    p.Save(fmt.Sprintf("page_%03d.pdf", i+1))
}

Как объединить несколько PDF?

Document.Append объединяет исходный документ на месте:

base, _ := pdf.Open("part1.pdf")
part2, _ := pdf.Open("part2.pdf")
base.Append(part2)
base.Save("combined.pdf")

Как заполнить поле AcroForm?

Используйте Document.Form().Field(name) и проверьте конкретный тип:

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

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

doc.Save("form_filled.pdf")

Поддерживаемые типы полей: TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ButtonField.

Как добавить закладки?

Создайте OutlineItemCollection и установите Destination:

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

bm := pdf.NewOutlineItemCollection(doc)
bm.SetTitle("Chapter 1")
bm.SetDestination(pdf.NewDestinationXYZ(page, 0, 800, 1.0))
doc.Outlines().Add(bm)
doc.Save("manual_with_bookmarks.pdf")

Безопасность и шифрование

Как защитить PDF паролем?

Используйте Document.SetEncryption со структурой EncryptionOptions для применения защиты паролем и флагов разрешений. Укажите пользовательский пароль для открытия файла и пароль владельца для прав на изменение:

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

Какие алгоритмы шифрования поддерживаются?

Три алгоритма доступны через EncryptionOptions.Algorithm:

AlgorithmConstantStandard
AES-128EncryptionAlgAES128 (default)ISO 32000-1
AES-256EncryptionAlgAES256ISO 32000-2 (вывод PDF 2.0)
RC4-128EncryptionAlgRC4_128Legacy

Как открыть файл, защищённый паролем?

Используйте pdf.OpenWithPassword, когда файл требует аутентификации. Передайте пароль пользователя вторым аргументом; после успешного расшифрования он возвращает обычный *Document:

doc, err := pdf.OpenWithPassword("protected.pdf", "userpass")
if err != nil {
    panic(err)
}
fmt.Println(doc.PageCount())

Как удалить шифрование из PDF?

Вызовите Document.RemoveEncryption после открытия файла с правильным паролем. Сохраните результат, чтобы записать некриптованную копию:

doc, _ := pdf.OpenWithPassword("protected.pdf", "userpass")
doc.RemoveEncryption()
doc.Save("decrypted.pdf")

Отображение и текст

Как отобразить страницу PDF в виде изображения?

Используйте один из типов устройств: BmpDevice, PngDevice, JpegDevice, TiffDevice или GifDevice. Создайте устройство со значением Resolution и вызовите соответствующий метод Render* с io.Writer и RenderOptions:

doc, _ := pdf.Open("report.pdf")
page, _ := doc.Page(1)
f, _ := os.Create("page1.png")
defer f.Close()
page.RenderPNG(f, pdf.RenderOptions{DPI: 150})

Как выполнить поиск текста в PDF?

Вызовите Document.SearchText с строкой запроса и SearchOptions. Результатом будет срез значений TextMatch— каждый содержит найденный текст, индекс страницы и ограничивающий прямоугольник.

doc, _ := pdf.Open("doc.pdf")
matches, _ := doc.SearchText("total", pdf.SearchOptions{CaseInsensitive: true})
for _, m := range matches {
    fmt.Printf("page %d: %q\n", m.PageNumber, m.Text)
}

Как сплющить форму?

Вызовите Document.Flatten после заполнения или проверки формы. Метод «запекает» все значения полей в графику страницы и удаляет интерактивные поля формы:

doc, _ := pdf.Open("filled.pdf")
doc.Flatten()
doc.Save("flat.pdf")

Известные ограничения

Поддерживаются ли все функции PDF?

Библиотека охватывает наиболее распространённые операции управления документами: открытие, создание, сохранение, разбиение, объединение, извлечение страниц, шифрование, AcroForms, таблицы, закладки, аннотации, рендеринг в изображение, поиск текста и уплощение форм. Расширенные функции, такие как цифровые подписи, 3D-контент и конверсия PDF/A, могут быть не полностью реализованы в текущем выпуске. См. README репозитория для получения актуального статуса функций.

Что происходит, если я использую проверку типа поля, которая не совпадает?

Утверждение типа для Field, которое не соответствует реальному типу поля, вызовет панику. Используйте pdf.FieldType(f), чтобы проверить тип перед утверждением, либо используйте переключатель типов:

doc, _ := pdf.Open("form.pdf")
for _, f := range doc.Form().Fields() {
    switch v := f.(type) {
    case *pdf.TextBoxField:
        fmt.Println("text:", v.Value())
    case *pdf.CheckboxField:
        fmt.Println("checked:", v.Checked())
    }
}

См. также:

 Русский