Страницы и элементы
Узнайте о страницах PDF, нативном исходном содержимом, редактируемых наложениях и системах координат.
Структура документа
IPdfDocument содержит нормализованную модель документа PDF:
pagesхранит порядок, размеры, поворот, слои, метки и нативные поля PDF для страниц.objectsхранит семантические объекты документа.displayListsсохраняет операции PDF на уровне отрисовки и точность исходного документа.textStoriesхранит редактируемый поток текста независимо от нестабильной группировки глифов PDF.assets,stylesиnativeсохраняют повторно используемые и относящиеся к источнику ресурсы.sources,editsиexportPlanзаписывают происхождение и замысел экспорта.
В импортированном PDF не каждая видимая исходная операция становится редактируемым элементом фасада. Нативное содержимое может оставаться в списках отображения, пока действие пользователя не повысит или не заменит его.
Страницы
FPdf читает страницы в материализованном порядке и вставляет пустые страницы:
const pages = pdf.getPages()const firstPage = pdf.getPageByIndex(0)const pageById = firstPage ? pdf.getPageById(firstPage.getId()) : nullconst appendedPage = pdf.insertPage()insertPage(index) принимает целое число от 0 до текущего количества страниц. Новая страница наследует размер, поворот и поля PDF соседней страницы. Если соседней страницы нет, используются размеры A4: 595 на 842 пункта.
Нативное содержимое и редактируемые наложения
FPdfPage.getElements() возвращает сохраняемые редактируемые наложения в z-порядке. Типизированные методы доступа фильтруют тот же слой наложений:
| Метод доступа | Обёртка фасада |
|---|---|
getTextBoxes() | FPdfTextBox |
getParagraphs() | FPdfParagraph |
getLists() | FPdfList |
getTables() | FPdfTable |
getImages() | FPdfImage |
getDividers() | FPdfDivider |
getAnnotations() | FPdfAnnotation |
getTextSpans() работает иначе: он перечисляет снимки видимых операций нативного текста. Вызов replaceText() для диапазона скрывает нативную операцию и создаёт новое редактируемое текстовое поле.
Системы координат
Основная модель и публичный фасад намеренно используют разные единицы:
| Граница | Единицы и начало координат |
|---|---|
| Позиции и размеры фасада, пути аннотаций и ширина штрихов | Пункты PDF, размещение от верхнего левого угла |
| Геометрия страниц и объектов основной модели | EMU, начало координат в верхнем левом углу |
Импортированные pdfBoxes и сопоставления с нативным источником | Пользовательское пространство PDF, начало координат в нижнем левом углу |
В коде приложения используйте getTransform, setPosition, setSize, setRotation и типизированные параметры вставки фасада. Применяйте ptToEmu, emuToPt и связанные средства преобразования, только когда создаёте данные модели более низкого уровня.
Публичные ограничения редактирования
Фасад проверяет несколько ограничений модели:
- Ширина и высота должны быть положительными конечными значениями, а позиции и повороты — конечными.
- Уровни списка находятся в диапазоне от
0до8; начальный номер упорядоченного списка должен быть положительным целым числом. - Размеры таблицы должны быть положительными целыми числами, а количество ячеек не должно превышать 10,000.
- Вставка аннотаций через фасад поддерживает выделение цветом, подчёркивание, зачёркивание, волнистое подчёркивание и рисование от руки.
- Непрозрачность изображения находится в диапазоне от
0до1, а прямоугольник обрезки должен иметь положительную площадь. - Диапазоны текста используют смещения UTF-16 с включённым началом и исключённым концом.
Примеры для конкретных задач см. в разделе Редактирование PDF.
Насколько полезно это руководство?