Я поддерживаю старое приложение, и мне нужно реализовать функцию, которая генерирует отчеты на основе данных, рассчитанных из базы данных. Пользователь также должен иметь дополнительную опцию печати файла (пользователь должен иметь возможность выбирать принтер и видеть предварительный просмотр).
Чтобы повысить мои шансы на получение удовлетворительного ответа, позвольте мне дополнительно уточнить вопросы с помощью небольшого «примера»:
Пользователь нажимает кнопку -> приложение рассчитывает данные; // Готово
Приложение создает файл и заполняет его результатом; // Готово
Пользователь получает информацию о создании отчета; // Готово
Пользователь нажимает другую кнопку, которая взимается за печать; // Застрял здесь!
Выскакивает предварительный просмотр и возможность запуска диалог печати. // Застрял здесь
Пользователь запускает диалоговое окно печати, выбирает принтер и приложение печатает файл;
Приложение закодировано в C++
используя сырье WinAPI
(нет MFC
). Я работаю на Windows XP.
Я смог успешно использовать OLE Automation генерировать / сохранять слово а также превосходить отчеты, но я не могу создать предварительный просмотр это точно соответствует предварительному просмотру печати Word.
Если я использую OLE Automation показывать в Excel диалог печати / предварительный просмотр, может возникнуть следующая проблема:
Пользователь может просто нажать «Закрыть предварительный просмотр» или просто закрыть распечатать лист свойств (см. рисунок ниже) и вернитесь к документу, который может поставить под угрозу данные документа.
Моим работодателям это не нравится (у них нет опыта разработки программного обеспечения / разработки, поэтому, что бы я ни говорил, это будет «эхом на ветру» …), и они хотят, чтобы мой предварительный просмотр соответствовал именно так Предварительный просмотр Word генерирует.
Поэтому мне нужно решение для создания предварительного просмотра для пользователя, таким образом, который точно соответствует предварительному просмотру печати Word. Кроме того, пользователь должен иметь возможность только чтобы увидеть как это выглядит, но не для возможности открыть файл из моего приложения. Пользователь должен иметь возможность выбрать принтер, который будет печатать файл.
Реализация, подобная той, что на картинке, будет в порядке.
ВСТУПИТЕЛЬНЫЕ ЗАМЕЧАНИЯ:
Вопрос слишком широкий, чтобы отвечать в одном посте, поэтому я должен ограничиться только поиском совет / общая концепция / указание в правильном направлении.
АКТУАЛЬНЫЕ ВОПРОСЫ:
Я сделал все, что мог с OLE Automation а также Excel / Word файлы, но, как вы можете видеть, есть проблемы с генерацией предварительного просмотра, поэтому возникают следующие вопросы:
Поскольку я впервые решаю такую задачу, можете ли вы порекомендовать мне правильный способ ее решения (конечно, общие понятия)?
Есть ли вероятность, что для решения проблемы печати есть обходной путь (например, отправка WM_PRINTCLIENT
сообщение для Word / Excel или что-то типа того )?
ЗАМЕЧАНИЯ:
Опять же, я понимаю, что вопрос слишком широкий, поэтому просто дайте мне общие понятия / указатели, чтобы я мог публиковать отдельные вопросы, если я застряну где-то на пути.
Мне не нужно использовать Word / Excel а также OLE Automation, это был мой выбор на данный момент.
Если вы можете порекомендовать лучшее решение, я с удовольствием приму. Я не хочу использовать библиотеки.
Если потребуется дополнительная информация, спросите, и я отредактирую свой пост.
Вам нужно будет вызвать диалоговое окно, когда пользователь нажимает кнопку печати, диалоговое окно будет содержать элемент управления, который показывает предварительный просмотр для принтера по умолчанию и три кнопки для выбора другого принтера, печати и выхода.
Элемент предварительного просмотра может быть статическим элементом управления, где WM_PAINT
Обработчик будет рисовать предварительный просмотр (альтернативы: элемент управления веб-браузера, который подается в виде HTML-текста, или элемент управления RichText, который подается в виде текста RTF, но тогда вы ограничены функциональностью этих элементов управления).
котировка: Предварительный просмотр
Разве это не особенное. Это просто означает, что вы должны сделать на экране
(или растровое изображение) то, что в противном случае вы бы отобразили на DC принтера. это
в первую очередь означает использование размера страницы и предоставление элемента управления UI для
предыдущая / следующая страница.
Это так ответ подробно описывает работу, которую вы должны сделать, чтобы нарисовать предварительный просмотр.
Эта статья CodeProject имеет простой код для предварительного просмотра; это простой MFC, который не должен быть слишком сложным для перевода на простой C ++ / WinAPI.