Я предполагаю, что разработаю приложение для моего проекта, оно будет загружать экзаменационные / прошлогодние документы (файл слов), соответственно определять разделы, извлекать вопросы и изображения в этом разделе, а затем сохранять вопросы и изображения в базу данных. (Предварительный просмотр вопросника находится внизу этого поста)
Так что мне нужны некоторые предложения о том, как извлечь данные из файла слова, а затем вставить их в базу данных. В настоящее время у меня есть несколько способов сделать это, однако я понятия не имею, как я мог бы реализовать их, когда файл содержит текстовые поля с фоновым изображением. Вопрос должен быть связан с изображением.
Метод Один (Используйте MS Office Interop)
- Загрузить файл слова -> Извлечь изображение,
сохранить в папку -> Извлечь текст,
сохранить как .txt -> Извлечь текст из .txt и сохранить в db
Вопросы:
- Как определить раздел и вопрос?
- Как связать изображение с вопросом?
Извлечение текста из файла слов (рабочий):
private object missing = Type.Missing;
private object sFilename = @"C:\temp\questionpaper.docx";
private object sFilename2 = @"C:\temp\temp.txt";
private object readOnly = true;
object fileFormat = Word.WdSaveFormat.wdFormatText;
private void button1_Click(object sender, EventArgs e)
{
Word.Application wWordApp = new Word.Application();
wWordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
Word.Document dFile = wWordApp.Documents.Open(ref sFilename,
ref missing, ref readOnly, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing);
dFile.SaveAs(ref sFilename2, ref fileFormat, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing,ref missing,
ref missing,ref missing,ref missing,ref missing,ref missing,
ref missing,ref missing);
dFile.Close(ref missing, ref missing, ref missing);
}
Извлечение изображения из файла слова (не работает с изображением внутри текстового поля):
private Word.Application wWordApp;
private int m_i;
private object missing = Type.Missing;
private object filename = @"C:\temp\questionpaper.docx";
private object readOnly = true;
private void CopyFromClipbordInlineShape(String imageIndex)
{
Word.InlineShape inlineShape = wWordApp.ActiveDocument.InlineShapes[m_i];
inlineShape.Select();
wWordApp.Selection.Copy();
Computer computer = new Computer();
if (computer.Clipboard.GetDataObject() != null)
{
System.Windows.Forms.IDataObject data = computer.Clipboard.GetDataObject();
if (data.GetDataPresent(System.Windows.Forms.DataFormats.Bitmap))
{
Image image = (Image)data.GetData(System.Windows.Forms.DataFormats.Bitmap, true);
image.Save("C:\\temp\\DoCremoveImage" + imageIndex + ".png", System.Drawing.Imaging.ImageFormat.Png);
}
}
}
private void button1_Click(object sender, EventArgs e)
{
wWordApp = new Word.Application();
wWordApp.Documents.Open(ref filename,
ref missing, ref readOnly, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing);
try
{
for (int i = 1; i <= wWordApp.ActiveDocument.InlineShapes.Count; i++)
{
m_i = i;
CopyFromClipbordInlineShape(Convert.ToString(i));
}
}
finally
{
object save = false;
wWordApp.Quit(ref save, ref missing, ref missing);
wWordApp = null;
}
}
Метод второй
- Разархивируйте файл слова (.docx) -> Скопируйте папку с медиа (изображением), сохраните где-нибудь -> Разбор XML-файла -> Сохраните текст в db
Любое предложение / помощь будет принята с благодарностью: D
Предварительный просмотр файла слова:
(резервная ссылка: http://i.stack.imgur.com/YF1Ap.png)