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

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

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

6 ответов

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

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

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

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

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

Если у вас есть файл, и вы хотите просто распечатать его, посмотрите на эту запись в блоге Рэймонда Чена. Вы можете использовать глагол "печать" для печати.

Подробности смотрите в записи shellexecute msdn.

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

Хорошей отправной точкой является статья базы знаний Office Automation Using Visual C++

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

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

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

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

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

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");

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

/*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
Другие вопросы по тегам