PHP SDK: Документ: текст, страницы и таблицы
Объект возвращают $ctx->documents()->fromUrl(), fromBytes() и $ctx->mail()->document(). В примерах $document сначала создаётся из небольшого CSV.
text
text(): string
Текст документа, включая доступные колонтитулы и примечания Office. В PDF сохраняется разбиение текста по страницам. Структура и форматирование DOCX дополнительно доступны через blocks().
$document = $ctx->documents()->fromBytes("Артикул;Остаток\nTEST-001;17", 'report.csv');
$text = $document->text();
format
format(): string
Определённый формат: например xlsx, docx, pdf или csv.
$document = $ctx->documents()->fromBytes('Остаток: 17', 'report.txt');
$ctx->log($document->format());
tables
tables(): array
Листы Excel или таблицы Word: массив объектов name, rows. Числа Excel остаются числами. Поддерживаемые формулы XLSX пересчитываются локально через xlcalculator. Внешние ссылки и макросы не выполняются. rows() и cell() возвращают результат, formula() исходное выражение, cachedValue() сохранённое автором значение. Ошибки доступны через error()/calculation().
$document = $ctx->documents()->fromBytes("Артикул;Остаток\nTEST-001;17", 'report.csv');
$tables = $document->tables();
rows
rows(int|string $sheet = 0): array
Строки листа по индексу или имени, включая первую строку с заголовками. Отсутствующий лист даёт пустой массив. PDF возвращает текст страниц, распознавание табличной структуры PDF не выполняется.
$document = $ctx->documents()->fromBytes("Артикул;Остаток\nTEST-001;17", 'report.csv');
foreach ($document->rows() as $index => $row) {
if ($index === 0) continue;
$ctx->emit(['sku' => $row[0], 'stock' => (int) $row[1]]);
}
pages
pages(): array
Страницы PDF: number, text, ocr. Сканированные страницы распознаются локально на русском и английском. Не более пяти страниц с изображениями и 100 текстовых страниц за один разбор.
$document = $ctx->documents()->fromUrl('https://example.com/files/report.pdf');
foreach ($document->pages() as $page) {
$ctx->log('Страница '.$page['number'].': '.$page['text']);
}
links
links(): array
Найденные ссылки. Обработчик не переходит по ним и не загружает внешние изображения. При необходимости выберите допустимую ссылку явно через сетевой SDK.
$document = $ctx->documents()->fromBytes('Отчёт по остаткам', 'report.txt');
$links = $document->links();
complete
complete(): bool
false, если достигнут предел извлечения. Перед сохранением полного отчёта проверьте этот признак. Предел таблиц: 20 листов/таблиц, 5000 строк, 100 столбцов, 50 000 ячеек суммарно; текст до 1 MiB.
$document = $ctx->documents()->fromBytes('Отчёт по остаткам', 'report.txt');
if (!$document->complete()) $ctx->fail('Документ слишком большой: разделите его на части');
warnings
warnings(): array
Коды особенностей разбора: сохранённые значения формул, старый формат Office, изображения внутри Word/Excel, предел OCR. Для старых DOC/XLS доступно ограниченное извлечение, встроенные объекты не исполняются.
$document = $ctx->documents()->fromBytes('Отчёт по остаткам', 'report.txt');
foreach ($document->warnings() as $warning) $ctx->log($warning);
sheetNames
sheetNames(): array
Названия извлечённых листов/таблиц в исходном порядке. Для PDF и изображений список пустой.
$document = $ctx->documents()->fromBytes("Артикул;Остаток\nTEST-001;17", 'report.csv');
$names = $document->sheetNames();
sheet
sheet(int|string $sheet = 0): Worksheet
Лист по индексу с нуля или точному имени. Возвращает Worksheet. При отсутствии листа вызывает понятную ошибку; rows() сохраняет прежнее поведение с пустым массивом. Методы листа работают локально без повторного чтения файла.
$document = $ctx->documents()->fromBytes("Артикул;Остаток\nTEST-001;17", 'report.csv');
$sheet = $document->sheet(0);
$stock = $sheet->cell('B2');
page
page(int $number): string
Текст страницы PDF или растрового изображения по номеру с единицы. Отсутствующая страница даёт пустую строку, неправильный номер вызывает ошибку. Для Word используйте text().
$document = $ctx->documents()->fromBytes("Артикул;Остаток\nTEST-001;17", 'report.csv');
$pdf = $ctx->documents()->fromUrl('https://example.com/report.pdf');
$text = $pdf->page(1);
matches
matches(string $pattern, int $limit = 100): array
Локальный поиск регулярным выражением в извлечённом тексте. Возвращает совпадение и группы, максимум limit (1–1000). Выражение до 2048 байт; неверное выражение вызывает ошибку. Значения не отправляются модели.
$document = $ctx->documents()->fromBytes("Артикул;Остаток\nTEST-001;17", 'report.csv');
$text = $ctx->documents()->fromBytes('Итого: 1250', 'report.txt');
$matches = $text->matches('/Итого: (\d+)/u');
chunks
chunks(int $characters = 4000, int $overlap = 200): array
Фрагменты текста в символах Unicode. characters от 100 до 16000, overlap от 0 до characters−1. Метод не отправляет фрагменты во внешние сервисы. Нельзя передавать приватные фрагменты в analyze/transform без отдельной политики обработки.
$document = $ctx->documents()->fromBytes("Артикул;Остаток\nTEST-001;17", 'report.csv');
$chunks = $document->chunks(4000, 200);
blocks
blocks(): array
Абзацы и ссылки на таблицы DOCX в порядке исходного документа. Абзац содержит kind=paragraph, level заголовка, align, indent, before, after, marker, depth и runs. У каждого фрагмента runs есть text, bold, italic, underline, size в пунктах. Блок kind=table содержит индекс table в tables(). Для остальных форматов возвращает пустой массив. Значения не отправляются во внешнюю модель.
$document = $ctx->documents()->fromUrl('https://example.com/report.docx');
foreach ($document->blocks() as $block) {
if ($block['kind'] === 'paragraph') {
foreach ($block['runs'] as $run) $ctx->log($run['text']);
}
}