Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Corba";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Вниз

Печать многих документов в Word   Найти похожие ветки 

 
AndDem   (2005-11-30 16:59) [0]

Всем доброго дня!
Возникла задача распечатать несколько однотипных документов Word по заданному шаблону, различие которых состоит в некоторых данных (напр, имя и адрес человека). В шаблоне проставлены закладки.
В цикле по нескольким записям (выборка из БД) кидаю в закладки данные и пытаюсь печатать. Проблема в том, что на печать выходит только первый лист, а остальные зависают в очереди принтера и не печатаются...
Сначала делал по принципу

открыть экземпляр Word
 цикл
   открыть файл шаблона
   подставить значения
   распечатать
   закрыть активный документ
 конец цикла
закрыть экземпляр Word

Потом от отчаяния решил включить в цикл запуск и завершение работы экземпляра Word

цикл
 открыть экземпляр Word
 открыть файл шаблона
 подставить значения
 распечатать
 закрыть активный документ
 закрыть экземпляр Word
конец цикла

Но ничего не помогло... Есть мысль воспользоваться механизмом процессов (чтобы отследить окончание печати), но, если честно, мне кажется это нелогичным...
Может, кто поделится свежей идейкой? Вот код:

     for i := 1 to SelectedRows.Count do
        begin
           try
              MSWord := GetActiveOleObject("Word.Application")
           except
              MSWord := CreateOleObject("Word.Application")
           end;
           DataSource.DataSet.GotoBookmark(pointer(SelectedRows.Items[i-1]));
           Document := MSWord.Documents.Open(FileName := template, ReadOnly:=False);
           Document.Bookmarks.Item("cus_name").Range.InsertAfter(Fields[0].AsString);
           Document.Bookmarks.Item("cus_addr").Range.InsertAfter(Fields[1].AsString);
                       Document.PrintOut;//(NumCopies:="1");
           Document.Close(SaveChanges := FALSE);
           MSWord.Application.Quit;
           VarClear(MSWord)
        end;

Заранее спасибо!


 
AndDem   (2005-11-30 18:35) [1]

Уточнение...
Я неверно выразился... Я сказал "Проблема в том, что на печать выходит только первый лист, а остальные зависают в очереди принтера и не печатаются", а правильно "Проблема в том, что на печать выходит документ только по первой итерации (по первой записи из выборки), а остальные зависают в очереди принтера и не печатаются..."


 
umbra ©   (2005-11-30 19:57) [2]

не стоит на каждой итерации создавать и уничтожать вордовское приложение.
Лучше сделать так:

try
    MSWord := GetActiveOleObject("Word.Application")
except
   MSWord := CreateOleObject("Word.Application")
end;
for i := 1 to SelectedRows.Count do
       begin
          DataSource.DataSet.GotoBookmark(pointer(SelectedRows.Items[i-1]));
          Document := MSWord.Documents.Open(FileName := template, ReadOnly:=False);
          Document.Bookmarks.Item("cus_name").Range.InsertAfter(Fields[0].AsString);
          Document.Bookmarks.Item("cus_addr").Range.InsertAfter(Fields[1].AsString);
                      Document.PrintOut;//(NumCopies:="1");
          Document.Close(SaveChanges := FALSE);
       end;
MSWord.Application.Quit;
VarClear(MSWord);


 
YurikGL ©   (2005-11-30 21:12) [3]


> Возникла задача распечатать несколько однотипных документов
> Word по заданному шаблону, различие которых состоит в некоторых
> данных (напр, имя и адрес человека). В шаблоне проставлены
> закладки.
> В цикле по нескольким записям (выборка из БД) кидаю в закладки
> данные и пытаюсь печатать. Проблема в том, что на печать
> выходит только первый лист, а остальные зависают в очереди
> принтера и не печатаются...

Совет:
Открываем ворд с шаблоном... берем текст шаблона в буфер (хотя это не есть хорошо, но другого выхода не вижу). Заполняем шаблон. Идем в конец, ставим разрыв страницы, за разрывом вставляем текст шаблона из буфера. Заполняем его. И т.д.

Можно шаблон держать в одном документе и много раз вставлять его в другой.


 
AndDem   (2005-12-01 13:09) [4]

2 umbra

  Согласен. Именно так я и делал (случай я описал самым первым в своем вопросе)....

2 YurikGL

  У меня создалось впечатление, что при стандартном копировании через буфер обмена закладки не копируются...

2 All
  Может, надо не Document.PrintOut использовать, а что-то другое? Подскажите!


 
YurikGL ©   (2005-12-01 17:32) [5]


>   У меня создалось впечатление, что при стандартном копировании
> через буфер обмена закладки не копируются...

тогда можно:
Создали пустой документ1
Скопировали файл шаблона
Открыли копию шаблона
Заполнили
Скопировали через буфер в документ1+разрыв страницы
Закрыли копию шаблона(без сохранения)->открыли копию шаблона. В крайнем случае - перезаписали копию шаблона...


 
Virgo_Style ©   (2005-12-02 03:37) [6]

Если не решишь, напиши мне, у меня валяется старый проект на эту тему... правда, я там как-то не очень оптимально с вордом работал, но все равно получалось быстрее, чем принтер печатал -)


 
AndDem   (2005-12-02 13:14) [7]

Решил методом, предложенным YurikGL... Спасибо за ответы всем отозвавшимся!



Страницы: 1 вся ветка

Форум: "Corba";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.043 c
15-1179175926
raqy.style
2007-05-15 00:52
2007.06.10
Протокол с нулевой передачей информации


2-1179831748
Lera
2007-05-22 15:02
2007.06.10
Печать bmp переменной


2-1179826689
ММК
2007-05-22 13:38
2007.06.10
Мастера, помогите!


2-1179393807
koha
2007-05-17 13:23
2007.06.10
TCompressionStream не возвращает поток в TMemoryStream - почему?


11-1160673450
ANTPro
2006-10-12 21:17
2007.06.10
Easy Debug





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский