Как загрузить документ в Go
Aspose.PDF FOSS для Go загружает PDF из пути к файлу, io.Reader, или любого из этих источников, защищённого паролем, всегда возвращая значение *Document для дальнейшей работы. Библиотека представляет собой модуль Go, устанавливаемый с помощью go get.
Пошаговое руководство
Шаг 1: Установить пакет
Добавьте модуль в ваш проект:
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goПроверьте, что модуль разрешается:
import asposepdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"Шаг 2: Импортировать необходимые классы
import (
pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"
)Шаг 3: Загрузить PDF из пути к файлу
pdf.Open загружает PDF-файл и возвращает *Document и ошибку:
doc, err := pdf.Open("testdata/4pages.pdf")
if err != nil {
panic(err)
}
fmt.Println(doc.PageCount(), "pages")Шаг 4: Загрузить PDF, защищённый паролем
pdf.OpenWithPassword открывает файл, зашифрованный пользовательским паролем:
doc, err := pdf.OpenWithPassword("locked.pdf", "secret")
if err != nil {
panic(err)
}
fmt.Println("opened:", doc.PageCount(), "pages")Шаг 5: Загрузить PDF из потока
pdf.OpenStream читает PDF из любого io.Reader — сетевого ответа, буфера в памяти или файла, открытого отдельно. pdf.OpenStreamWithPassword — это эквивалент защищённого паролем потока:
f, err := os.Open("input.pdf")
if err != nil {
panic(err)
}
defer f.Close()
doc, err := pdf.OpenStream(f)
if err != nil {
panic(err)
}
fmt.Println(doc.PageCount(), "pages")
// For an encrypted stream, open a separate reader and pass a password:
f2, _ := os.Open("locked.pdf")
defer f2.Close()
doc2, err := pdf.OpenStreamWithPassword(f2, "secret")
if err != nil {
panic(err)
}
fmt.Println(doc2.PageCount(), "pages (encrypted)")Шаг 6: Проверить загруженный документ
После загрузки Document.PageCount сообщает общее количество страниц, а Document.Page(n) извлекает отдельную страницу по её индексу, начинающемуся с 1:
doc, err := pdf.Open("testdata/4pages.pdf")
if err != nil {
panic(err)
}
fmt.Printf("Page count: %d\n", doc.PageCount())
page, err := doc.Page(1)
if err != nil {
panic(err)
}
size, err := page.Size()
if err != nil {
panic(err)
}
fmt.Printf("Page 1 size: %.0f x %.0f pt\n", size.Width, size.Height)Распространённые проблемы и решения
OpenWithPassword по-прежнему не удаётся после ввода того, что я считаю правильным паролем
Передача неверного пароля в OpenWithPassword приводит к ошибке, не равной nil. Пароли чувствительны к регистру — проверьте точный пользовательский пароль, установленный в исходном PDF.
OpenStream возвращает ошибку при работе с зашифрованным PDF
OpenStream не может открыть зашифрованные PDF. Вместо этого используйте OpenStreamWithPassword для потоков, защищённых паролем.
Мне нужно OpenWithPassword для PDF, который оказывается незашифрованным?
Нет — открытие незашифрованного файла через OpenWithPassword разрешено и ведёт себя так же, как обычный вызов Open, поэтому безопасно использовать OpenWithPassword, когда вы не уверены, что файл зашифрован.
Document.Page(n) возвращает ошибку после успешного Open
Номер страницы выходит за пределы диапазона. Page использует индексацию, начиная с 1, в диапазоне от 1 до Document.PageCount(); сначала вызовите PageCount(), чтобы проверить диапазон.
Часто задаваемые вопросы
Какие форматы файлов я могу загрузить с помощью Open?
Open, OpenWithPassword, OpenStream и OpenStreamWithPassword принимают только PDF-ввод.
Как загрузить PDF, который уже находится в памяти, а не на диске?
Оберните срез байтов в bytes.Reader (который удовлетворяет io.Reader) и передайте его в pdf.OpenStream, или в pdf.OpenStreamWithPassword, если байты представляют зашифрованный PDF.
Как загрузить PDF, защищённый паролем?
Вызовите pdf.OpenWithPassword(path, password) для пути к файлу, или pdf.OpenStreamWithPassword(r, password) для потока.
Как проверить, сколько страниц было загружено?
Вызовите Document.PageCount() на возвращённом *Document.