Создание, открытие и печать текстового файла из C++
У меня есть три связанных вопроса.
Я хочу создать файл слова с именем из C++. Я хочу иметь возможность отправить команду печати в этот файл, чтобы файл печатался без необходимости открывать документ пользователем и делать это вручную, и я хочу иметь возможность открыть документ. Открытие документа должно просто открыть слово, которое затем открывает файл.
6 ответов
Вы можете использовать Office Automation для этой задачи. Ответы на часто задаваемые вопросы об автоматизации Office с C++ можно найти по адресу http://support.microsoft.com/kb/196776 и http://support.microsoft.com/kb/238972.
Имейте в виду, что для автоматизации Office с C++ необходимо понимать, как использовать COM.
Вот несколько примеров того, как выполнять различные задачи в слове usign C++:
- http://support.microsoft.com/kb/220911/en-us
- http://support.microsoft.com/kb/238393/en-us
- http://support.microsoft.com/kb/238611/en-us
В большинстве этих примеров показано, как это сделать с помощью 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