Создание, открытие и печать текстового файла из С++

У меня есть три связанных вопроса.

Я хочу создать файл слов с именем из С++. Я хочу, чтобы иметь возможность отправить команду печати в этот файл, чтобы файл печатался без того, чтобы пользователь открывал документ и выполнял его вручную, и я хочу иметь возможность открыть документ. Открытие документа должно только открыть слово, которое затем откроет файл.

Ответы

Ответ 1

Для этой задачи вы можете использовать автоматизацию Office. Вы можете найти ответы на часто задаваемые вопросы о Office Automation с С++ в http://support.microsoft.com/kb/196776 и http://support.microsoft.com/kb/238972.

Имейте в виду, что для автоматизации Office с помощью С++ вам необходимо понять, как использовать COM.

Вот несколько примеров того, как выполнять различные задачи в слове usign С++:

Большинство из этих примеров показывают, как это сделать, используя MFC, но концепции использования COM для управления Word одинаковы, даже если вы используете ATL или COM напрямую.

Ответ 2

Как указано в ответе на аналогичный вопрос, я советую вам посмотреть this страница, где автор объясняет, какое решение он принял для создания документов Word на сервере, без возможности доступа к MsWord, без библиотек автоматизации или третьей стороны.

Ответ 3

Когда у вас есть файл и вы хотите его распечатать, просмотрите эту запись в блоге Raymond Chen. Вы можете использовать глагол "print" для печати. ​​

Подробнее см. shellexecute msdn entry.

Ответ 4

Вы можете использовать автоматизацию для открытия MS Word (в фоновом режиме или переднем плане), а затем отправить необходимые команды.

Хорошим стартовым местом является статья базы знаний Автоматизация Office с использованием Visual С++

Некоторые исходные коды C доступны в Как использовать Visual С++ для доступа к DocumentProperties с помощью автоматизации (название говорит о С++, но оно просто С)

Ответ 5

У меня нет опыта интеграции с Microsoft Office, но я думаю, есть некоторые API, которые вы можете использовать для этого.

Однако, если то, что вы хотите выполнить, является рудиментарным способом печати отформатированного вывода и экспорта его в файл, который можно обрабатывать в Word, вы можете посмотреть в формате RTF. Формат довольно прост в освоении и поддерживается RtfTextBox (или RichTextBox?), Который также имеет некоторые возможности печати. Формат rtf - это тот же формат, который используется в Windows Wordpad (write.exe).

Это также имеет преимущество, не зависящее от MS Office, чтобы работать.

Ответ 6

Мое решение заключается в использовании следующей команды:

start /min winword <filename> /q /n /f /mFilePrint /mFileExit

Это позволяет пользователю указать принтер, нет. копий и т.д.

Замените <filename> на имя файла. Он должен быть заключен в двойные кавычки, если он содержит пробелы. (например, file.rtf, "A File.docx")

Он может быть помещен в системный вызов, как в:

system("start /min winword <filename> /q /n /f /mFilePrint /mFileExit");

Вот заголовочный файл С++ с функциями, которые обрабатывают это, поэтому вам не нужно запоминать все переключатели, если вы его часто используете:

/*winword.h
 *Includes functions to print Word files more easily
 */

#ifndef WINWORD_H_
#define WINWORD_H_

#include <string.h>
#include <stdlib.h>

//Opens Word minimized, shows the user a dialog box to allow them to
//select the printer, number of copies, etc., and then closes Word
void wordprint(char* filename){
   char* command = new char[64 + strlen(filename)];
   strcpy(command, "start /min winword \"");
   strcat(command, filename);
   strcat(command, "\" /q /n /f /mFilePrint /mFileExit");
   system(command);
   delete command;
}

//Opens the document in Word
void wordopen(char* filename){
   char* command = new char[64 + strlen(filename)];
   strcpy(command, "start /max winword \"");
   strcat(command, filename);
   strcat(command, "\" /q /n");
   system(command);
   delete command;
}

//Opens a copy of the document in Word so the user can save a copy
//without seeing or modifying the original
void wordduplicate(char* filename){
   char* command = new char[64 + strlen(filename)];
   strcpy(command, "start /max winword \"");
   strcat(command, filename);
   strcat(command, "\" /q /n /f");
   system(command);
   delete command;
}

#endif