Как показать или прочитать файл docx
Я новичок в рендеринге файлов в android, и я хочу отобразить или отобразить файл docx в моем приложении.
Я уже извлек текст из файла docx, но теперь хочу также извлечь изображения из файла docx.
Я нашел несколько способов отображения изображений в чистой Java, но есть ли хорошие примеры для Android?
Я попробовал этот код для извлечения изображений, но не работал...
public void extractImages(Document xmlDoc)
{
NodeList binDataList = xmlDoc.getElementsByTagName("w:drawings");
String fileName = "";
Node currentNode;
for(int i = 0; i < binDataList.getLength(); i++)
{
currentNode = binDataList.item(i);
if(currentNode.getNodeType() == Node.ELEMENT_NODE && ((Element)currentNode).hasAttribute("w:name"))
{
File newImageFile = new File(picDirectory, ((Element)currentNode).getAttribute("w:name").replaceFirst("wordml://", ""));
if(newImageFile.exists())
{
}
else
{
if(writeImage(newImageFile, currentNode))
{
//Print some success message
}
}
}
}
Ответы
Ответ 1
Посмотрите AndroidDocxToHtml, который я сделал, чтобы продемонстрировать использование docx4j на Android.
Несколько предостережений.
Во-первых, этот проект не включает все зависимости docx4j, только те, которые требуются для преобразования docx в HTML. Поэтому, если вы хотите делать другие вещи, вам могут понадобиться другие зависимости.
Во-вторых, docx4j требует JAXB - см. этот пост в блоге re JAXB на Android - и контекст JAXB контекста при запуске приложения занимает некоторое время, в зависимости от устройство. Есть способы обойти это, но при дополнительных усилиях.
Если все, что вы хотите сделать, это извлечение изображений, и вам все равно, как они относятся к тексту, вы можете просто искать части изображения. Вы можете использовать OpenXML4J для этого и избегать JAXB.
Ответ 2
Вы можете просто разархивировать файл (переименовать в .zip и открыть его), затем вы можете исследовать структуру папок, где расположены изображения и т.д.
Ответ 3
Самый простой способ создать изображение в Android - использовать BitmapFactory
factory методы.
Класс BitmapFactory
имеет методы для создания Bitmap
из массива байтов, файла или InputStream.
Как только у вас есть объект Bitmap
, вы можете его отобразить, установив его на ImageView
в вашем макете, используя setImageBitmap
метод.