Управление документами
Управление документами
Document является корневым объектом в Aspose.PDF FOSS для .NET. Он представляет
целый PDF‑файл и предоставляет доступ к страницам, метаданным, полям формы и всем
другим структурам PDF. Откройте существующие файлы с помощью Document.Open и создайте новые
с конструктором Document.
Открытие и создание документов
// Open from a byte array
using var doc = Document.Open(File.ReadAllBytes("input.pdf"));
// Open from a file path
using var doc2 = new Document("input.pdf");
// Create a new empty document
using var newDoc = new Document();
newDoc.Pages.Add();
newDoc.Save("new.pdf");Работа со страницами
PageCollection управляет страницами документа. Доступ к страницам осуществляется по индексу, начинающемуся с 1, добавляйте новые страницы или удаляйте существующие.
using var doc = Document.Open(pdfBytes);
// Access first page
var page = doc.Pages[1];
// Add a blank page
var newPage = doc.Pages.Add();
// Get page count
int count = doc.Pages.Count;Геометрия страницы
Каждая страница определяет несколько ограничительных рамок. Используйте методы‑установщики на Page, чтобы скорректировать их.
var page = doc.Pages[1];
page.SetMediaBox(new Rectangle(0, 0, 612, 792));
page.SetCropBox(new Rectangle(36, 36, 576, 756));
page.SetRotation(90);Сохранение документов
Сохранить в путь к файлу, поток или массив байтов.
// Save to file
doc.Save("output.pdf");
// Save to stream
using var ms = new MemoryStream();
doc.Save(ms);Вложения файлов
FileSpecification представляет встроенные вложения файлов в PDF.
var spec = new FileSpecification("data.csv", "Embedded data file");
doc.EmbeddedFiles.Add(spec);Изображения штампов
ImageStamp накладывает растровое изображение на страницу в указанной позиции.
var stamp = new ImageStamp("logo.png");
stamp.Put(doc.Pages[1]);
doc.Save("stamped.pdf");Коллекции операторов
OperatorCollection на каждой странице содержит необработанные операторы контент‑потока. Используйте его для низкоуровневой проверки или манипуляции содержимым.
var ops = doc.Pages[1].Contents;
foreach (var op in ops)
{
// Inspect each operator
}Советы и лучшие практики
- Оберните
Documentв операторusing, чтобы своевременно освобождать дескрипторы файлов. - Используйте
Document.Open(byte[])для потоков обработки в памяти, чтобы избежать проблем с блокировкой файлов. - Изменяйте коробки страниц (MediaBox, CropBox) перед добавлением содержимого, чтобы обеспечить правильное координатное пространство.
- Вызовите
Saveтолько один раз после всех изменений — повторные сохранения медленнее, но безопасны. - Используйте
PageCollection.Accept(AnnotationSelector)для пакетной обработки аннотаций на всех страницах.
Общие проблемы
| Issue | Cause | Fix |
|---|---|---|
Document.Open выдает ошибку при корректном PDF | Файл зашифрован паролем | Передайте параметр пароля в конструктор |
| Количество страниц равно 0 после создания | Новый Document() начинается пустым | Вызовите doc.Pages.Add() для добавления пустой страницы |
| Сохранённый файл больше, чем ожидалось | Изображения или шрифты внедрены несколько раз | Используйте оптимизацию (см. руководство Conversion and Optimization) |
Pages[0] выдает ошибку индекса | Страницы нумеруются с 1, а не с 0 | Используйте Pages[1] для первой страницы |
Часто задаваемые вопросы
Как объединить два PDF‑документа?
Используйте PdfFileEditor.Concatenate из Facades API, или вручную копируйте страницы из одного документа в другой, используя PageCollection.
Могу ли я открыть PDF из URL или потока?
Да. Сначала прочитайте содержимое URL в byte[], затем передайте его в
Document.Open(byte[]).
Как удалить страницу?
Вызов doc.Pages.Delete(pageNumber), где pageNumber начинается с 1.
Является ли Document потокобезопасным?
Нет. Каждый поток должен работать со своим собственным экземпляром Document.
Сводка справочника API
| Class / Method | Description |
|---|---|
Document | Корневой объект PDF; содержит страницы, метаданные и поля формы |
Document.Open | Статическая фабрика для открытия PDF из массива байтов |
Document.Save | Сериализовать документ в файл или поток |
Page | Отдельная страница PDF с содержимым, аннотациями и геометрией |
Page.SetMediaBox | Определить медиабокс страницы |
Page.SetCropBox | Определить видимую область обрезки |
Page.SetRotation | Повернуть страницу на 0, 90, 180 или 270 градусов |
PageCollection | Упорядоченная коллекция страниц в документе |
PageCollection.Add | Добавить пустую страницу |
OperatorCollection | Операторы необработанного потока содержимого для страницы |
FileSpecification | Дескриптор вложенного файла вложения |
ImageStamp | Наложение изображения‑штампа на страницы |
XFormCollection | Повторно используемые XObject формы в документе |