Имя: Пароль:
1C
1С v8
v8: Печать файла с картинкой
,
0 Baloven
 
09.08.11
14:34
поискал поиском но ничего не нашел
есть несколько файлов на компе с известным путем... воде все нормально с тем же екселем или вордом, а как отправить на печать допустим картинку формата TIFF???? а если она многостраничная????
PS попутно вопрос: можно ли как-то из свойств файла TIFF получить количество страниц в файле?
1 Baloven
 
10.08.11
03:29
И все же неужели никто не может подсказать хотябы в каком направлении копать?
2 Baloven
 
10.08.11
05:32
странно, но в конфигураторе открывается только первая картинка, ка открыть-то? к тому же нужны все страницы??? открывать на проспотр их нужды нет - необходимо программно отправить файл(-ы) на печать причем все имеющиеся страницы...
3 Wobland
 
10.08.11
06:31
P4N TIFF Viewer v1.0.2
http://p4n.ru/1/
может, она и с командной строкой работать умеет
4 Baloven
 
10.08.11
07:10
может и умеет, а может и нет - только где ключи описаны????
5 Wobland
 
10.08.11
07:18
(4) то есть документацию ты уже почитал. боюсь, более ничем помочь не смогу
6 Baloven
 
10.08.11
07:20
какую документацию??? в папке с программой хелпа нет, на сайте тоже!!!! так о какой докмументации речь???
7 Wobland
 
10.08.11
07:21
(6) я увидел ссылку на несколько минут раньше тебя, совершенно не в курсе ;)
8 Baloven
 
10.08.11
07:23
:( ясно...
9 Baloven
 
10.08.11
09:22
может тогда кто-нибудь подскажет как обратится из 1с-ки напечатать список файлов на принтере??? ведь встроенные в систему проги все открывают и печатают - но нужно не вызывать стандартные диалоги а напрямую отпечатать....????
10 Baloven
 
10.08.11
12:01
в ветке PDF отправить на печать наткнулся вот на это "СоздатьОбъект("shell.application") и метод .Verb() для выбранных элементов" и появился вопрос а как выбрать файлы и ка их все же распечатать?????
11 Wobland
 
10.08.11
12:12
(10) может, не в тему, но НайтиФайлы() в СП найди
12 Kom-off
 
10.08.11
12:19
(0) Могу предложить Microsoft office document imaging (MODI)- пакет входящий в состав Microsoft office предназначенный для работы tif файлами. У этого пакета есть одна очень хорошая особенность - он имеет объектную модель к которой можно обратиться из других программ, т.е. использовать его как внешнюю компоненту. Ну, а недостатком является наличие Microsoft Office на компьютере на котором будет производиться обработка (печать) tif файлов.
13 Baloven
 
10.08.11
13:45
блин, ну не умею я особо работать с сом объектами :( подскажите как????
14 Baloven
 
10.08.11
13:46
про него я как раз и думал и инфу вроде нарыл, но примеры использования именно в 1С не могу найти :(
15 Baloven
 
10.08.11
13:47
... дополнение...  именно MODI мне я так понимаю как раз и нужно, потому как в дальнейшем я хочу организовать сканирование через него в файлы....
16 Baloven
 
10.08.11
15:05
в конвигураторе по строке:

МойОбъект = Новый COMОбъект("shell.application");

МойЮбеъкт емеет лишь свойства, причем цикличные :(

Application и Parent :( а что с ними дальше делать чтобы распечатьть док?
17 IVT_2009
 
10.08.11
15:38
Долго пробовал всякие решения , сделал вот это:


Процедура ПечатьС3о(БазаФайлов)
   //****Вариант с 2мя очередями печати****
   БазаФайлов.Свернуть("Имя,Гтд","");
   БазаФайлов.Сортировать("Гтд");
   //ИмяХранилища     =O:\сертификаты\
   //ПутьКпрограмме_=C:\Program Files\IrfanView\
   
   ИмяХранилища    = Константы.ПутьКбазеСертификатов.Получить();
   ПутьКпрограмме_ = СокрЛп(Константы.ПутьКПрограммеПросмотра.Получить());
   КомандаСистемы("del.bat","c:\print");
   К        =  Лев("""",1);
   Цепочка = "";
   Для ЕЕ = 0 По БазаФайлов.Количество()-1 Цикл
       Цепочка    = "i_view32.exe /multitif=(c:\print\"+СокрЛп(БазаФайлов[ее].Имя)+","+СокрЛп(ИмяХранилища)+СокрЛп(БазаФайлов[ее].Имя) +") /killmesoftly";
       КомандаСистемы(Цепочка,ПутьКпрограмме_);
   КонецЦикла;    
   Принтер_ = "02";
   Для ЕЕ = 0 По БазаФайлов.Количество()-1 Цикл
       Если БазаФайлов[ее].ГТД = "Да" Тогда
           Принтер_ = Константы.ИмяПринтераНа2.Получить();
       Иначе
           Принтер_ = Константы.ИмяПринтераНа4.Получить();
       КонецЕсли;    
       Цепочка    ="rundll32.exe C:\WINDOWS\System32\shimgvw.dll,ImageView_PrintTo /pt c:\print\"+СокрЛп(БазаФайлов[ее].Имя)+" "+к+Принтер_+к;
       КомандаСистемы(Цепочка,"C:\WINDOWS\System32\");
   КонецЦикла;
   КомандаСистемы("del.bat","c:\print");
КонецПроцедуры


где:

БазаФайлов =Новый ТаблицаЗначений;
   БазаФайлов.Колонки.Добавить("Имя");
   БазаФайлов.Колонки.Добавить("ГТД");
в переменную ИМЯ ложим имя файла
18 IVT_2009
 
10.08.11
15:41
Печатает многостраничные tiff документы содержащие сертификаты. Инфравью нужен для приведения к более понятному системой виду. Мои файлы кушать не захотел без доп преобразования. Принтер 02 это копия принтера с одной предустановкой двухсторонней печати, 04 с другой. DEL.bat просто чистит временный каталог перед обработкой.
19 Vadim_37
 
10.08.11
15:52
Можно так: (на форме ТЧ, в ней реквизит типа строка путь к файлу и еще картинка на форме как объект Adobe, ну так для развлечения пользователей, печатать долго - пущай смотрят.

Для Каждого СтрокаТЧ из КачественныеУдостоверения Цикл
       
ЭлементыФормы.КартинкаPDF.LoadFile(СтрокаТЧ.Путь);
ЭлементыФормы.КартинкаPDF.printAll();              WShell=Новый COMОбъект("WScript.Network");
ПользовательОС=WShell.UserDomain+"\"+WShell.UserName;       objShell = Новый COMОбъект("WScript.Shell") ;
objScriptExec = objShell.Exec("taskkill /F /fi" + """Username eq """ + ПользовательОС + "/IM AcroRd32.exe") ;
Предупреждение("Идет печать! Не нажимаейте кнопки и не двигайте мышью!", 5);
               
КонецЦикла;
20 smaharbA
 
10.08.11
16:05
модидок вполне справляется с задачей, он и распознает если чо
21 smaharbA
 
10.08.11
16:07
(12) моди имеет одну неприятную особенность - его нет после офиса 2003
22 Kom-off
 
10.08.11
18:59
(21) Блин, не знал! Вот эта новость ближе к печальным...
23 Baloven
 
11.08.11
05:06
(21) моди нет начиная с 2010 версии в 2007 еще есть... так что небольшая ошибочка :)
с другой стороны... TIFF прекрасно печатается и просматривается системой без вообще какого бы то нибыло доп софта... потому и спрашивал как обратится к системным функциям, дабы не проверять наличия софта, трабл еще и в том, что при печати через интерфейс вылазит гид печати виндовый - потому и был задан вопрос касательно обращения к шеллу, но я с ним не умею работать :( пока попробую предложенный вариант... но вопрос предлагаю рассмотреть через стандартные функции
24 Baloven
 
11.08.11
11:09
вроде бы процесс двигается в нужном мне направлении:
1. все же решил использовать MODI (дока на него здесь) http://www.microsoft.com/downloads/details.aspx?familyid=7B6D9193-A1C8-4934-8007-47089FDE37DE&displaylang=en

информацию почерпнул здесь (да простят меня модераторы) http://www.sql.ru/forum/actualthread.aspx?bid=4&tid=438069&pg=1 в теме обсуждается несолько иная ситуация и вопросы, оданако, очень силько переплетающиеся с моей темой, к тому же для целей обработки изображений в том числе и сделано сканирование с помощью этого
http://www.microsoft.com/downloads/details.aspx?FamilyID=a332a77a-01b8-4de6-91c2-b7ea32537e29&DisplayLang=en
25 Baloven
 
11.08.11
12:56
вроде все идет по плану вот так:
Попытка
      MODI = новый COMОбъект("MODI.Document");
  Исключение
      Сообщить("MODI не найден");
      Возврат;
  КонецПопытки;
MODI.Create("путь и имя файла.tif");
MODI.PrintOut(2,3,1,"мой принтер");
где 2 первая страница с которой печатать,
3 - последняя страница
1 - количество экземпляров
"мой принтер" имя принтера
вот полные параметры печати:
Prints the active document to a specified printer or file.

expression.PrintOut(From, To, Copies, PrinterName, PrintToFileName, PrintAnnotation, FitMode)
expression    Required. An expression that returns a Document object.

From    Optional Long. The first page to print.

To    Optional Long. The last page to print. Default is -1 (prints all pages).

Copies    Optional Long. The number of copies to print. Default is 1.

PrinterName    Optional String. The name of the optional destination printer.

PrintToFileName    Optional String. The name of the optional destination file.

PrintAnnotation    Optional Boolean. Specifies whether the printout includes user annotations.

FitMode    Optional MiPRINT_FITMODES. Specifies how to scale the document to the page. Default is miPRINT_PAGE.

FitMode can be one of the following MiPRINT_FITMODES constants.
miPRINT_ACTUALSIZE (0)
miPRINT_PAGE (1)

завтра попробую выложить универсальную процедуру печати....
и все же остается вопрос как печатать в случае если отсутствует MODI т.е. стандартными средствами ОС????
26 Baloven
 
11.08.11
13:13
для незнающих инглиш MODI.PrintOut(); отправит весь документ на печать 1 экземпляр :)
27 smaharbA
 
11.08.11
13:22
(24)(25) зачем далеко ходил, все есть в пределах форума
28 Baloven
 
11.08.11
13:40
(27) поиском не нашел :( потому пришлось ходить "далеко" :(
29 Baloven
 
11.08.11
13:42
завтра все же попробую сделать универсальную (как минимум под MODI) процедуру, чтобы далеко не ходили и было в KB :) заодно сделаю для себя и других сканирование
30 IVT_2009
 
11.08.11
15:07
rundll32.exe C:\WINDOWS\System32\shimgvw.dll,ImageView_PrintTo /pt c:\print\"+СокрЛп(БазаФайлов[ее].Имя)+" "+к+Принтер_+к;

Это стандартная процедура виндовс. ТОлько не все TIFF понимает , мне пришлось его пересобирать.  Печатает правда очень быстро
31 Baloven
 
11.08.11
16:24
(30) что такое "к" в Вашем примере?
а через COM не будет быстрее? и я так понимаю отправляется все же по одному файлу, т.е. сразу массив нельзя передать... хотя перебрать массив в процедуре-то не составляет труда :)?
32 Stepa86
 
11.08.11
16:28
я изображения вот так печатаю: http://infostart.ru/public/76108/
33 smaharbA
 
11.08.11
16:34
(30) и это было )
34 Baloven
 
12.08.11
08:40
вот код процедуры... пока не проверенный, если что-то не так выложу корректировку. у меня есть сомнения по поводу проверки постоянной на наличие софта, возможно необходимо проверку провести при переборе файлов, вот так перебираем файлы, можно единожды при запуске обработки проверить и занести в переменные и в коде ниже проверить переменные:

Процедура РаспечататьНажатие(Элемент)
                                                                     
   //Читаем из ТЗ (элемент формы) пути к файлам, у меня в ТЗ стоит в строке чекбокс я его проверяю нужно ли печатать
   Для Каждого СтрокаТаблицы Из ЭлементыФормы.ТаблицаПриложенияКИску.Значение Цикл
       Если СтрокаТаблицы.Использовать Тогда
           ПечатьФайла(СтрокаТаблицы.Файл);
       КонецЕсли;
       
   КонецЦикла;
   
КонецПроцедуры

дальше код процедуры печати

Процедура ПечатьФайла(Файл,Количество=1) Экспорт
   Файл = СокрЛП(Файл);
   ВыбФайл = Новый Файл(Файл);

   Если Не ВыбФайл.Существует() И Не ВыбФайл.ЭтоФайл() Тогда
       Предупреждение("Файл не найден или это каталог!");
       Возврат;
   КонецЕсли;
   
   Если ВыбФайл.Расширение = ".tif" Или ВыбФайл.Расширение = ".mdi" Тогда
       Попытка
           doc = новый COMОбъект("MODI.Document");
       Исключение
           Сообщить("Microsoft Office Document Imaging не найден");
           Возврат;
       КонецПопытки;
       doc.Create(Файл);
       doc.PrintOut(,,Количество);
   ИначеЕсли ВыбФайл.Расширение = ".doc" Или ВыбФайл.Расширение = ".docx" Тогда
       Попытка
           doc = новый COMОбъект("Word.Application");
       Исключение
           Сообщить("Microsoft Word не найден");
           Возврат;
       КонецПопытки;
       doc.Create(Файл);
       doc.PrintOut(,,Количество);
       doc.Application.Quit;
       
   ИначеЕсли ВыбФайл.Расширение = ".xls" Или ВыбФайл.Расширение = ".xlsx" Тогда
       Попытка
           doc = новый COMОбъект("Excel.Application");
       Исключение
           Сообщить("Microsoft Excel не найден");
           Возврат;
       КонецПопытки;
       doc.Workbooks.Open(Файл);
       doc.ActiveSheet.PrintOut(,,Количество);
       doc.ActiveWorkbook.Close;
       doc.Application.Quit;
   Иначе
       Сообщить("Неизвестное расширение файла");
   КонецЕсли;
       
КонецПроцедуры