Получить метаданные из файлов Open Office

Мне нужно изменить только метаданные файла Open Office. Как мне это сделать, не загружая в память весь файл (file.odt)? Мне нужно работать только с файлом: meta.xml и label:...metadata...

Я использую Apache ODF Toolkit 0.5-incubating. Мой код загружает файл meta.xml, но я не могу получить метаданные:

OdfPackage pkg = OdfPackage.loadPackage(new File("file.odt"));
Node d = pkg.getDom("meta.xml").getElementsByTagName("office:document-meta").item(0);

for(int i =0; i<d.getAttributes().getLength();i++) {
  String nombre = d.getAttributes().item(i).getNodeName();
  String valor = d.getAttributes().item(i).getNodeValue();
  System.out.println("Clave: " + nombre + " valor: " + valor);
} 

person user2671914    schedule 10.09.2013    source источник
comment
Что вы хотите — формат Open Office (OOXML) или формат Open Document (ODF)? Только вы упоминаете оба в своем вопросе!   -  person Gagravarr    schedule 10.09.2013
comment
Я работаю с файлами Open Document Format (*.odt, *.ods, *.odp). Единственный инструмент, который я видел для работы с ними, — это Apache ODF Toolkit.   -  person user2671914    schedule 10.09.2013


Ответы (2)


Если вы хотите работать с различными форматами файлов, лучше всего подойдет Apache Tika. Tika предоставляет общий интерфейс для извлечения текста и метаданных из большого количества форматов и скрывает от вас сложность различных типов и форматов.

В командной строке, чтобы извлечь метаданные из этот пример файла вы бы сделали

java -jar tika-app-1.4.jar --metadata quick.odt

И вы получите огромное количество метаданных:

Author: Jesper Steen Møller
Character Count: 43
Content-Length: 7042
Content-Type: application/vnd.oasis.opendocument.text
Creation-Date: 2005-09-06T23:34:00
Edit-Time: PT2M0S
Image-Count: 0
Keywords: Pangram, fox, dog
Last-Modified: 2005-09-06T23:49:00
Last-Save-Date: 2005-09-06T23:49:00
Object-Count: 0
Page-Count: 1
Paragraph-Count: 1
Table-Count: 0
Word-Count: 9
cp:subject: Gym class featuring a brown fox and lazy dog
creator: Jesper Steen Møller
date: 2005-09-06T23:49:00
dc:creator: Jesper Steen Møller
dc:description: Gym class featuring a brown fox and lazy dog
dc:language: en-US
dc:subject: Pangram, fox, dog
dc:title: The quick brown fox jumps over the lazy dog
dcterms:created: 2005-09-06T23:34:00
dcterms:modified: 2005-09-06T23:49:00
description: Gym class featuring a brown fox and lazy dog
editing-cycles: 5
generator: OpenOffice.org/1.9.125$Win32 OpenOffice.org_project/680m125$Build-8947
initial-creator: Nevin Nollop
language: en-US
meta:author: Jesper Steen Møller
meta:character-count: 43
meta:creation-date: 2005-09-06T23:34:00
meta:image-count: 0
meta:initial-author: Nevin Nollop
meta:object-count: 0
meta:page-count: 1
meta:paragraph-count: 1
meta:save-date: 2005-09-06T23:49:00
meta:table-count: 0
meta:word-count: 9
modified: 2005-09-06T23:49:00
nbCharacter: 43
nbImg: 0
nbObject: 0
nbPage: 1
nbPara: 1
nbTab: 0
nbWord: 9
resourceName: quick.odt
subject: Gym class featuring a brown fox and lazy dog
title: The quick brown fox jumps over the lazy dog
xmpTPg:NPages: 1

Из Java вы можете получить то же самое с чем-то простым, например

TikaConfig tika = TikaConfig.getDefaultConfig();
Metadata metadata = new Metadata();
ParseContext context = new ParseContext();

InputStream input = TikaInputStream.get(new File("test.ods"));

tika.getParser().parse(input, null, metadata, context);

И вы получите метаданные в объекте метаданных

person Gagravarr    schedule 10.09.2013
comment
Можно ли подсчитать количество листов с помощью Apache Tika для xls, xlsx, ods, ots, xlsm и sxc? - person Goldbones; 23.04.2015
comment
@Goldbones Думаю, да, но задайте новый вопрос, если по какой-то причине он не работает! - person Gagravarr; 23.04.2015

Вы можете использовать пакет OdfDocument, предоставленный org.odftoolkit. Вы можете получить зависимость здесь => https://mvnrepository.com/artifact/org.odftoolkit/odfdom-java

Вы можете разобрать документ

OdfDocument odfDocument = OdfDocument.loadDocument(new URL(URLPath).openStream());

И получить метаданные, например,

wordCount = odfDocument.getOfficeMetadata().getDocumentStatistic().getWordCount();
person Keshavram Kuduwa    schedule 10.01.2020