0. Spartan 339 24.09.10 17:15 Сейчас в теме

Формирование печатных форм в pdf

Делюсь опытом работы с виртуальными принтерами через COM-интерфейс, а также предлагаю альтернативный вариант создания PDF-файлов с помощью внешней компоненты Yoksel.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. detec 131 24.09.10 17:15 Сейчас в теме
Отдельная благодарность за код: хорошо оформленный визуально и снабжённый подробными комментариями.
3. Spartan 339 24.09.10 17:29 Сейчас в теме
(1) Спасибо, буду рад, если кому-то мой опыт поможет...
(2) Вообще писал для клиента, как видите, в коде присутствуют методы, не используемые на сервере - самый главный из которых Напечатать(). Возможно на сервере можно будет решить другими методами класса, но не уверен.
78. boss_kuz 88 05.08.12 13:12 Сейчас в теме
Предлагаю поменять часть кода определения создания файла типа :

	ФайлPDF = Новый Файл(Путь + "Title.pdf");	
	НовоеПолноеИмя = Путь + ?(ЗначениеЗаполнено(ТабличныйДокумент.ИспользуемоеИмяФайла), ТабличныйДокумент.ИспользуемоеИмяФайла, "Табличный документ " + Строка(1)) + ".pdf";	
	ФайлСформирован = Ложь;
	Порог = ТекущаяДата() + 30;
	Пока ТекущаяДата()<Порог цикл
		ОбработкаПрерыванияПользователя();
		Попытка
			ПереместитьФайл(ФайлPDF.ПолноеИмя, НовоеПолноеИмя);
			ФайлСформирован = Истина;
			Break;
		Исключение
			Продолжить;
		КонецПопытки;
	КонецЦикла;
	
	Если Не ФайлСформирован Тогда
		Сообщить("Ожидание отклика завершено. Файл не создан!",СтатусСообщения.Важное);		
		Попытка
			УтилитаПечати.cClose();
		Исключение
			Сообщить("Нормальное завершение процесса печати невозможно!", СтатусСообщения.ОченьВажное);
		КонецПопытки;
		УтилитаПечати        = Неопределено;
		НастройкиПоУмолчанию = Неопределено;		
		Состояние();		
		Возврат ложь;
	КонецЕсли;
Показать
91. N.Serg 03.12.13 18:55 Сейчас в теме
может кому-то пригодится, т.к. у меня ушла куча времени
Попытка
		ПринтерПДФ = Новый COMОбъект("PDFCreator.clsPDFCreator");
	Исключение
		Сообщить("Не установлен драйвер принтера PDFCreator!", СтатусСообщения.Важное);
		Возврат Неопределено;
	КонецПопытки;
	
	ПринтерыPDF = ПринтерПДФ.cGetPDFCreatorPrinters();
	Если ПринтерыPDF.Count() = 0 Тогда
		ПринтерПДФ.cAddPDFCreatorPrinter("PDFCreator");
		ПринтерыPDF = ПринтерПДФ.cGetPDFCreatorPrinters();
	КонецЕсли;
	ИмяПринтераPDF = ПринтерыPDF.Item(1);
			
	ПринтерПДФ.cStart("/NoProcessingAtStartup"); 
	ПринтерПДФ.cClearcache();
	ПринтерПДФ.cPrinterStop = 1;
	
	НаборОпций = ПринтерПДФ.cOptions();
	НаборОпций.NoConfirmMessageSwitchingDefaultprinter   = 1;
	НаборОпций.UseAutosave                        = 1;
	НаборОпций.UseAutosaveDirectory                  = 1;
	НаборОпций.AutosaveFormat                     = 0; // PDF  
	НаборОпций.AutosaveDirectory                  =  Путь;
	НаборОпций.AutosaveFilename                   = "111.PDF";
	НаборОпций.AutosaveStartStandardProgram       = 0;

	ПринтерПДФ.cOptions = НаборОпций;

	Для Индекс = 0 По ТабличныеДокументы.Количество() - 1 Цикл				
		ТабДок = ТабличныеДокументы[Индекс];
		ТабДок.ИмяПринтера = ИмяПринтераPDF;
		ТабДок.Напечатать();	
    КонецЦикла;;

	ПринтерПДФ.cCombineAll();
	ПринтерПДФ.cPrinterStop = 0;

	Счетчик = 0;
	Пока ПринтерПДФ.cCountOfPrintjobs > 1 Цикл
	   Счетчик = Счетчик + 1;
	   ПринтерПДФ.cCombineAll();
	   Старт = ТекущаяДата();
	   Пока ТекущаяДата() <> Старт + 1 Цикл 
	   КонецЦикла;          
	КонецЦикла;
	         
	Старт = ТекущаяДата();
	Таймаут = 5;

	Пока НЕ ЗначениеЗаполнено(ПринтерПДФ.cOutputFileName) ИЛИ (ТекущаяДата() - Старт < Таймаут) Цикл
	КонецЦикла;
	         
	ПринтерПДФ.cClearcache();
	ПринтерПДФ.cClose();
	ПринтерПДФ = Неопределено;
	
	Возврат Истина;
Показать
sam1975; Spartan; +2 Ответить
2. detec 131 24.09.10 17:18 Сейчас в теме
И ещё вопросик. На сервере приложения обработка работает?
4. Свой 164 24.09.10 19:19 Сейчас в теме
для 1С 7.7 сделайте кто-нибудь аналогичный примерчик
5. ILM 236 24.09.10 19:52 Сейчас в теме
Очень Хорошо! А для PDFForm заполнения примерчика нету?
6. Spartan 339 24.09.10 20:45 Сейчас в теме
(5) К сожалению, нет. :) Остановил свой выбор на PDFCreator, задачу решил - теперь можно отдыхать...
7. rahimov1965 24.09.10 23:21 Сейчас в теме
Решал аналогичную задачу, с помощью BullZip не справился с проблемой прозрачности печатей и факсимиле. Решается ли эта задача при помощи PDF-creator? Мне пришлось использовать платную программу Universal Document Convertor, но там есть смешная затыка: ТабличныйДокумент.Напечатать(Ложь) - только с открытием диалога.
8. Spartan 339 24.09.10 23:43 Сейчас в теме
(7) Честно говоря, не знаю... Мне нужно было формировать просто формы без печатей, поэтому с прозрачностью не разбирался.