Мы рады объявить о выпуске GroupDocs.Parser for Java 26.10, доступном с октября 2026. Это выпуск технического обслуживания, ориентированный на корректность: поиск текста снова работает для всех перегрузок, извлечение структуры документа обрабатывает больше Word‑документов, информация о файле точно сообщает о шифровании, а координаты изображений PDF теперь соответствуют остальному API. Лицензирование теперь осуществляется через GroupDocs.Foundation, а встроенные компоненты Aspose обновлены.
Что нового в этом выпуске
| Ключ | Описание | Категория |
|---|---|---|
| PARSERJAVA-491 | Parser.search больше не бросает NullPointerException, когда поиск не ограничен страницей |
Исправление |
| PARSERJAVA-513 | Parser.getStructure() работает с Word‑документами, содержащими таблицы в верхнем или нижнем колонтитулах, и возвращает корректный XML |
Исправление |
| — | Parser.getFileInfo(String) сообщает о зашифрованных файлах DOCX, XLSX и PPTX, защищённых паролем |
Исправление |
| — | FileInfo.isEncrypted() возвращает true только для зашифрованных PDF‑документов |
Исправление |
| — | Прямоугольники изображений PDF измеряются от верхней части страницы, как и остальные области страницы | Исправление |
| PARSERJAVA-154 | Лицензирование выполняется через GroupDocs.Foundation, ядро лицензирования, используемое продуктами GroupDocs | Обновление |
| PARSERJAVA-512 | Обновлены встроенные компоненты Aspose | Обновление |
| PARSERJAVA-509 | Опубликован POM: название продукта, краткое описание, <url>, <organization> и <scm> |
Обновление |
Изменения поведения, которые следует проверить перед обновлением
Два изменения влияют на то, как наблюдает существующий код:
- Координаты изображений PDF. Верхняя координата прямоугольников изображений PDF теперь измеряется от верхней части страницы. Если ваш код преобразовывал её из нижней части страницы, удалите это преобразование.
- XML‑структура Word‑документов. Слова, разделённые символом разрыва Word, теперь разделяются пробелом в XML‑структуре.
Исправления
Поиск текста без ограничения по странице
Начиная с версии 25.5, каждый вызов Parser.search, не ограниченный страницей, завершался NullPointerException. Это затрагивало перегрузку search(String keyword), search(String keyword, SearchOptions options) с параметром searchByPages, установленным в false (по умолчанию), и поиски, запрашивающие подсветку. Поиски с searchByPages, установленным в true, не были затронуты.
В версии 26.10 эти вызовы снова возвращают результаты поиска:
try (Parser parser = new Parser("sample.pdf")) {
Iterable<SearchResult> results = parser.search("lorem");
if (results == null) {
return; // Search isn't supported for this document
}
for (SearchResult result : results) {
System.out.println(result.getPosition() + ": " + result.getText());
}
}
Структура Word‑документов
Parser.getStructure() ранее бросал исключение при обработке документов, содержащих таблицу в верхнем или нижнем колонтитуле, и мог возвращать XML, который не парсился, если текст документа содержал управляющие символы. Оба проблемы исправлены:
- таблицы в верхних и нижних колонтитулах описываются их логической сеткой: индекс строки в таблице, индекс ячейки в строке и охватывают 1;
- символы разрыва Word (конец ячейки, вертикальная табуляция, разрыв страницы, разрыв колонки) заменяются пробелом, поэтому слова, которые они разделяли, больше не сливаются;
- символы, недопустимые в XML 1.0, удаляются;
- значения атрибутов экранируются так же, как и текст.
Информация о файле для документов, защищённых паролем
Перегрузка Parser.getFileInfo(String filePath) не распознавала файлы DOCX, XLSX и PPTX, защищённые паролем: она возвращала размер 0 и isEncrypted(), установленный в false для DOCX и XLSX, а для PPTX не указывала тип файла. Теперь она возвращает тот же результат, что и перегрузка InputStream: реальный размер файла, isEncrypted() установленный в true и FileType.Unknown (формат зашифрованного документа нельзя прочитать без пароля).
Это упрощает обнаружение защищённого файла и его открытие с паролем:
FileInfo info = Parser.getFileInfo("protected.docx");
if (info.isEncrypted()) {
LoadOptions options = new LoadOptions("password");
try (Parser parser = new Parser("protected.docx", options);
TextReader reader = parser.getText()) {
System.out.println(reader.readToEnd());
}
}
Шифрование PDF‑документов
FileInfo.isEncrypted() ранее возвращал true для каждого PDF‑документа. Теперь он возвращает true только для действительно зашифрованных PDF‑документов.
Позиция изображений PDF
Прямоугольники изображений PDF, возвращаемые Parser.getImages(), измерялись от нижней части страницы, тогда как текст, таблицы и другие области страницы измеряются от верхней. Теперь изображения используют те же координаты, основанные на верхней границе, поэтому getImages(PageAreaOptions) находит изображения внутри заданного прямоугольника:
try (Parser parser = new Parser("images.pdf")) {
// Images in the top-left 400 x 400 points of each page
PageAreaOptions options = new PageAreaOptions(new Rectangle(new Point(0, 0), new Size(400, 400)));
for (PageImageArea image : parser.getImages(options)) {
System.out.println(image.getPage().getIndex() + ": " + image.getRectangle());
}
}
Обновления
Лицензирование в GroupDocs.Foundation
Проверка лицензии, лицензирование по потреблению и лицензирование встроенных компонентов Aspose теперь выполняются через GroupDocs.Foundation, то же ядро лицензирования, которое используется другими продуктами GroupDocs. API лицензирования не изменилось: License.setLicense, Metered.setMeteredKey, Metered.getConsumptionQuantity и Metered.getConsumptionCredit вызываются точно так же, как и раньше.
License license = new License();
license.setLicense("GroupDocs.Parser.Java.lic");
try (Parser parser = new Parser("document.docx");
TextReader reader = parser.getText()) {
System.out.println(reader.readToEnd());
}
Встроенные компоненты Aspose
| Компонент | 26.9 | 26.10 |
|---|---|---|
| Aspose.Cells | 26.3 | 26.9 |
| Aspose.Email | 26.1 | 26.8 |
| Aspose.PDF | 26.2 | 26.8.1 |
| Aspose.Slides | 26.2 | 26.9 |
| Aspose.Words | 26.3 | 26.8 |
| Aspose.BarCode | 26.4 | 26.6 |
| Aspose.Imaging | 25.12 | 25.12 |
| Aspose.ZIP | 25.10 | 25.10 |
| Aspose.Note | 23.3 | 23.3 |
Продукт по‑прежнему работает на Java 8.
Метаданные опубликованного артефакта
Опубликованный POM теперь содержит название GroupDocs.Parser for Java, краткое описание того, что извлекает библиотека и какие форматы она читает, страницу продукта в виде <url> и объявляет <organization> и <scm>. Это информация, которую отображают индексы зависимостей, такие как MVNRepository. Код, поведение или API не изменились.
Как получить обновление
Maven
Добавьте репозиторий GroupDocs и зависимость в ваш pom.xml:
<repositories>
<repository>
<id>groupdocs-artifacts-repository</id>
<name>GroupDocs Artifacts Repository</name>
<url>https://releases.groupdocs.com/java/repo/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-parser</artifactId>
<version>26.10</version>
</dependency>
</dependencies>
Прямое скачивание
Скачайте JAR со страницы загрузки GroupDocs.Parser for Java 26.10.