Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Excel + PrintPreview, настройка принтера и предпросмотра 
:(
    Опции темы
lowolf
Дата 18.11.2010, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



День добрый! Народ, нужен способ вывода файла сохраненного на винте на предпросмотр и на печать.
Есть приложение, в котором перед печатью генерится Excel? ложится в Temp,  а уже потом открывается с помощью jacob и печатается.
Вот код: 
Код

public synchronized void printTempFile(String tempFile) {
        ActiveXComponent excel = null;
        Dispatch workbooks;
        Variant workbook;
        try {
            excel = new ActiveXComponent("Excel.Application");
            excel.setProperty("Visible", new Variant(false));
            workbooks = excel.getProperty("WorkBooks").toDispatch();
            workbook = Dispatch.callN(workbooks, "Open", new Object[]{printTempFile});
            Dispatch.call(Dispatch.get(workbook.toDispatch(), "ActiveSheet").toDispatch(), "PrintOut");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        finally {
            excel.invoke("Quit", new Variant[]{});
            ComThread.Release();
        }
        LOG.info("Temp file print...done");
  }


необходимо сделать предпросмотр и выбор принтера. пробывал через 
Код

PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.printDialog();

но не понятно как засетить jacob-у принтер выбранный и как убрать в настройках PrinterJob  колличество копий и диапазон печати.

Есть у кого нить идеи?
PM MAIL   Вверх
aleksandy
Дата 19.11.2010, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 4
Всего: 5



Решение тупо "в лоб". Создавай excel видимым.
1. 
Код
excel.setProperty("Visible", Variant.VT_TRUE);
 
Вызывай предпросмотр у excel.
2. 
Код
Dispatch.call(Dispatch.get(workbook.toDispatch(), "ActiveSheet").toDispatch(), "PrintPreview");


Только в таком случае нужно убрать 
Код
excel.invoke("Quit", new Variant[]{});
, иначе приложение закроется, а пользователь ничего не успеет нажать.

Это сообщение отредактировал(а) aleksandy - 19.11.2010, 10:21
PM   Вверх
lowolf
Дата 19.11.2010, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



а есть ли способ не открывая Excel реализовать предпросмотр из файла в самом приложении и настройкой принтера?
PM MAIL   Вверх
aleksandy
Дата 22.11.2010, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 4
Всего: 5



Есть smile. Но придется реализовывать все руками, оно тебе надо? Тем более, что печатаешь ты все равно из excel-я.

Указать принтер для печати из своей программы можно, установив свойство "ActivePrinter" объекту excel. Только тут одна тонкость есть: jacob почему-то и принтер по умолчанию, установленный в системе, меняет на указанный, поэтому перед тем, как сменить "ActivePrinter" его надо сохранить, отправить задание на печать и вернуть предыдущее значение "ActivePrinter" назад.

Это сообщение отредактировал(а) aleksandy - 22.11.2010, 06:39
PM   Вверх
lowolf
Дата 22.11.2010, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



благодарю за помощь и объяснение smile
PM MAIL   Вверх
lowolf
Дата 22.11.2010, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



2aleksandy Обдумал идею того что после распечатки, мне необходимо затирать файл с винта. Пришел к следующему:

Цитата

Только в таком случае нужно убрать 
Код

excel.invoke("Quit", new Variant[]{});

, иначе приложение закроется, а пользователь ничего не успеет нажать.


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

Код

    private final String EXCEL_COM = "Excel.Application";
    private final String EXCEL_VISIBLE = "Visible";
    private final String EXCEL_WORK_BOOKS = "WorkBooks";
    private final String EXCEL_OPEN = "Open";
    private final String EXCEL_ACTIVE_SHEET = "ActiveSheet";
    private final String EXCEL_PRINT_PREVIEW = "PrintPreview";
    private final String EXCEL_QUIT = "Quit";

 /**
     * Calling Jacob com. Opening a file in print preview mode.
     * After closing, the temporary file is deleted.
     * 
     * @param tempFile - temp file
     */
    public synchronized void printTempFile(String tempFile) {
        ActiveXComponent excel = null;
        Dispatch workbooks;
        Variant workbook;
        try {
            excel = new ActiveXComponent(EXCEL_COM);
            excel.setProperty(EXCEL_VISIBLE, Variant.VT_TRUE);
            workbooks = excel.getProperty(EXCEL_WORK_BOOKS).toDispatch();
            workbook = Dispatch.callN(workbooks, EXCEL_OPEN, new Object[]{tempFile});
            Dispatch.call(Dispatch.get(workbook.toDispatch(), EXCEL_ACTIVE_SHEET).toDispatch(), EXCEL_PRINT_PREVIEW);
        } finally {
            excel.invoke(EXCEL_QUIT, new Variant[]{});
            ComThread.Release();
        }

        //Ну а здесь творим с файлом всё, что душе захочется.
        
    }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0731 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.