Создание, открытие и печать текстового файла из С++
У меня есть три связанных вопроса.
Я хочу создать файл слов с именем из С++. Я хочу, чтобы иметь возможность отправить команду печати в этот файл, чтобы файл печатался без того, чтобы пользователь открывал документ и выполнял его вручную, и я хочу иметь возможность открыть документ. Открытие документа должно только открыть слово, которое затем откроет файл.
Ответы
Ответ 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