![]() |
|
преобразование типов файлов: PDF в PNG | ☑ | ||
---|---|---|---|---|
0
Алекс587444
14.05.25
✎
14:46
|
здравствуйте, подскажите пожалуйста у меня есть присоединенный файл в формате pdf при печати хочу его выводить в форме картинки png, накидайте пожалуйста идей как сделать, пока есть вариант ImageMagick но просит в параметры запуска путь к файлу а он у меня присоединенный, не понимаю как получить путь
|
|||
1
Алекс587444
14.05.25
✎
14:48
|
через РаботаСФайлами.ДанныеФайла получаю его данные
|
|||
2
Гипервизор
14.05.25
✎
14:48
|
"при печати выводить в форме картинки png" куда?
|
|||
3
Asmody
14.05.25
✎
14:48
|
Сохранить присоединенный файл на диск
|
|||
4
maxab72
14.05.25
✎
14:49
|
у вас на бумаге так и будет png? Или хотите просто конвертнуть и хранить в формате png?
|
|||
5
Алекс587444
14.05.25
✎
14:50
|
(3) сориентируйте пожалуйста как
|
|||
6
Asmody
14.05.25
✎
14:51
|
(5) через РаботаСФайлами
|
|||
7
Алекс587444
14.05.25
✎
14:51
|
(4) просто при выводе хочу конвертировать т.к. он не выводится как картинка, а просто как двоичные данные выбивает в ворде
|
|||
8
Волшебник
14.05.25
✎
14:52
|
(5) Методом Записать()
|
|||
9
Гипервизор
14.05.25
✎
14:53
|
(0) А если попадётся вам многостраничный pdf и ваши действия? Многостраничных именно png не бывает.
|
|||
10
Алекс587444
14.05.25
✎
14:55
|
(9) на это будут условия, думаю над их перечнем
|
|||
11
Алекс587444
14.05.25
✎
14:58
|
(8) спасибо, ищу как, у меня сейчас спровочникссылка.мойсправойчникПрисоединенныефайлы так записи вроде у его нет
|
|||
12
Алекс587444
14.05.25
✎
14:59
|
(6) пересмотрел все процедуры и функции, не нашёл никакой связанной с сохранением на диск, мб она не явно называется?
|
|||
13
maxab72
14.05.25
✎
15:02
|
"а просто как двоичные данные выбивает в ворде" это понятно. Вы получили двоичные данные из хранилища и без обработки запихнули в несчастный ворд. А надо их было сперва представить как файл определенного типа, например как pdf, через метод записать(). После этого можно с этим файлом делать что угодно.
|
|||
14
Алекс587444
14.05.25
✎
15:03
|
(13) а почему тогда картинки png без проблем отображаются?
|
|||
15
Алекс587444
14.05.25
✎
15:05
|
(13) я заполняю двоичные данные в параметр и потом параметры заливаю в область через УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры
|
|||
16
maxab72
14.05.25
✎
15:07
|
(14) потому что pdf не картинка. у картинок другие сигнатуры и 1с их распознает.
|
|||
17
Алекс587444
14.05.25
✎
15:11
|
(16) бл сложно, подскажите пожалуйста что почитать
|
|||
18
Алекс587444
14.05.25
✎
15:12
|
(13) спасибо, проанализирую что вы написали и вернусь
|
|||
19
Мультук
гуру
14.05.25
✎
15:14
|
(0)
1) Сохраняем присоединенный PDF файл в временный файл (см ниже) 2) С помощью ImageMagick конвертируем PDF в картинки (см ниже) 3) Вставляем картинки в табличный документ (как-нибудь сами) 4) Не забывайте удалять после себя временные файлы и картинки Функция КонвертироватьПрисоединенныйФайл_2_JPG(СсылкаПрисоединенныйФайл) Экспорт пСтр = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаПрисоединенныйФайл, "ИндексКартинки, Расширение, Наименование"); //Сохранием файл //!ПолноеИмяФайлаPDF = ПутьКФайлам() + пСтр.Наименование + ".pdf"; //ПолноеИмяФайлаPDF = ПутьКФайлам() + ПолучитьИмяВременногоФайла("pdf"); ПолноеИмяФайлаPDF = ПолучитьИмяВременногоФайла("pdf"); ДанныеФайла = РаботаСФайлами.ДвоичныеДанныеФайла(СсылкаПрисоединенныйФайл); Если ДанныеФайла <> Неопределено Тогда Попытка ДанныеФайла.Записать(ПолноеИмяФайлаPDF); Исключение Комментарий = СтрШаблон("Ошибка записи файла <%1> : %2", ПолноеИмяФайлаPDF, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖР("КонвертироватьПрисоединенныйФайл_2_JPG", Комментарий, СсылкаПрисоединенныйФайл, Истина); КонецПопытки КонецЕсли; //Конвертируем файл масФайлы = КонвертироватьФайл_PDF_TO_JPG(ПолноеИмяФайлаPDF); Возврат масФайлы; КонецФункции Функция КонвертироватьФайл_PDF_TO_JPG(ПолноеИмяФайлаPDF, ИмяФайла = "") Экспорт пФайл = Новый Файл(ПолноеИмяФайлаPDF); ПутьКФайлам = пФайл.Путь; ИмяФайла = пФайл.ИмяБезРасширения; пФайл = Неопределено; СтрокаВыполнить = ПутьImageMagic() + "convert -density 250 " + """" + ПолноеИмяФайлаPDF + """" +" -quality 120 " + """" + ИмяФайла + "-%02d.jpg" + """"; //СтрокаВыполнить = ПутьImageMagic() + "convert -density 150 " + """" + ПолноеИмяФайлаPDF + """" +" -quality 90 " + "123-%02d.jpg"; //СтрокаВыполнить = ПутьImageMagic() + "convert -density 150 " + ПолноеИмяФайлаPDF +" -quality 90 " + "123-%02d.jpg"; //todo //!Сообщить(СтрокаВыполнить); КодВозврата = 0; ЗапуститьПриложение(СтрокаВыполнить, ПутьКФайлам, Истина, КодВозврата); //todo //!Сообщить("КодВозврата = " + Строка(КодВозврата)); МаскаДляПоиска = ИмяФайла + "-??.jpg"; массивИменJPG = НайтиФайлы(ПутьКФайлам, МаскаДляПоиска); мас = Новый Массив; Для каждого строка из массивИменJPG Цикл мас.Добавить(строка.ПолноеИмя); КонецЦикла; Возврат мас; КонецФункции Ну и https://infostart.ru/1c/articles/1573726/ |
|||
20
АгентБезопасной Нацио
14.05.25
✎
17:15
|
//Сохраняет конвертируемый файл в каталоге временных файлов, // конвертирует GhostScript'ом в jpg с разрешением 150 точек, // возвращает сконвертированную первую страницу в хранилище // или неопределено, если не смог сконвертировать Функция КонверторPDFtoJPG_двоичные(СсылкаНаДвоичныеДанныеФайла, УникальныйИдентификаторФормы=Неопределено, РазмерКонвертации = "r150") Экспорт Путь_ВТ_КаталогаРаспознаванияPDF=КаталогВременныхФайлов(); ПутьПриложенияКонвекторPDFtoJPG =ПутьККонвертеруPDFtoJPG(); ФайлКонвертирования = СтрЗаменить(новый УникальныйИдентификатор, "-",""); ИмяФайлКонвертирования = ФайлКонвертирования+".pdf"; ИмяФайлКонвертированияJPG = ФайлКонвертирования+"_p%%02d"+".jpg"; ПутьФайлКонвертированияPDF=Путь_ВТ_КаталогаРаспознаванияPDF+"\"+ИмяФайлКонвертирования; ПутьФайлКонвертированияJPG=Путь_ВТ_КаталогаРаспознаванияPDF+"\"+ИмяФайлКонвертированияJPG; ДвоичныеДанныеФайла=ПолучитьИзВременногоХранилища(СсылкаНаДвоичныеДанныеФайла); ДвоичныеДанныеФайла.Записать(ПутьФайлКонвертированияPDF); ИмяКомандногоФайлаКонвертирования = СтрЗаменить(новый УникальныйИдентификатор, "-",""); ПутьКомандногоФайлаКонвертирования= Путь_ВТ_КаталогаРаспознаванияPDF+"\" + ИмяКомандногоФайлаКонвертирования + ".cmd"; //----------------------------------------------- СтрокаЗапуска = "@""" + ПутьПриложенияКонвекторPDFtoJPG +"""" +" -q -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -"+РазмерКонвертации+" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dMaxStripSize=8192 -sOutputFile=" +""""+ПутьФайлКонвертированияJPG+""""+" " +""""+ПутьФайлКонвертированияPDF+""""; //----------------------------------------------- WshShell = Новый COMОбъект("Wscript.Shell"); WshShell.CurrentDirectory =Путь_ВТ_КаталогаРаспознаванияPDF; КомандныйФайл = Новый ЗаписьТекста(ПутьКомандногоФайлаКонвертирования, КодировкаТекста.ANSI); КомандныйФайл.ЗаписатьСтроку(СтрокаЗапуска); КомандныйФайл.Закрыть(); WshShell.Run(ПутьКомандногоФайлаКонвертирования,0,Истина); //------------------------------------------------ //ЗапуститьПриложение(ПутьФайлаБатКонвектор, ,Истина); МассивФайлов = НайтиФайлы(Путь_ВТ_КаталогаРаспознаванияPDF ,ФайлКонвертирования+"*.jpg");//"*.txt"); Если МассивФайлов.Количество()>0 Тогда НовыеДвоичныеДанныеФайла = Новый ДвоичныеДанные(МассивФайлов[0].ПолноеИмя); СсылкаНаДвоичныеДанныеФайла =ПоместитьВоВременноеХранилище(НовыеДвоичныеДанныеФайла,УникальныйИдентификаторФормы); Иначе // можно закомментировать, чтоб возвращался неконвертированный СсылкаНаДвоичныеДанныеФайла = Неопределено; КонецЕсли; Возврат СсылкаНаДвоичныеДанныеФайла; КонецФункции //КонверторPDFtoJPG |
|||
21
Алекс587444
14.05.25
✎
15:17
|
(19) благодарю, пошёл пробовать
|
|||
22
maxab72
14.05.25
✎
15:17
|
(17) по тому как 1с распознает, что есть картинка а что нет? хз, на инфорстарте были в комментах какие-то указания на перечень файлов, gif bpm png точно распознает. PDF надо сохранять с типом pdf и выводить на печать как файл (1с может сама выводить pdf без обращения к адобе), а не вставлять в ворд. Если вставить в ворд, там вставится только иконка с типом файла, но без ссылки на него (если он не сохранен нигде). А как в ворд присоединять кодом данные файла - я сейчас не помню, надо документацию по vba освежить в памяти.
|
|||
23
АгентБезопасной Нацио
14.05.25
✎
15:20
|
(22) pdf - в платформах старше какой-то (вроде 23)
|
|||
24
АгентБезопасной Нацио
14.05.25
✎
15:26
|
(22) распознает по сигнатуре в начале файла
|
|||
25
maxab72
14.05.25
✎
15:29
|
(23) 8.3.21
(22) это понятно, просто я перечень этих файлов не помню где видел. svg вроде не распознает. |
|||
26
Fish
гуру
14.05.25
✎
15:30
|
"файл в формате pdf при печати хочу его выводить в форме картинки png"
Извините, что вмешиваюсь, но какой в этом смысл? Почему нельзя перед печатью показывать файл, как pdf? |
|||
27
Fish
гуру
14.05.25
✎
15:34
|
+(26) И кстати, если ПДФ многостраничный, то как надо конвертить? Всё равно в одну картинку (что будет не очень удобно для просмотра) или каждая страница отдельной картинкой?
|
|||
28
Fish
гуру
14.05.25
✎
15:37
|
(20) "WshShell = Новый COMОбъект("Wscript.Shell");
WshShell.CurrentDirectory =Путь_ВТ_КаталогаРаспознаванияPDF;" Фу-фу. На Линуксе не взлетит. Сейчас уже модно и молодёжно кроссплатформенный код писать. |
|||
29
Garykom
гуру
14.05.25
✎
16:05
|
Имхо сложность задачи превышает знания и возможности ТС
Использование ImageMagick + GhostScript хороший путь, но куча тонкостей |
|||
30
Hmster
15.05.25
✎
10:54
|
(26) а может надо неинтерактивно, а пдф так не дает печатать
|
|||
31
Мультук
гуру
15.05.25
✎
11:03
|
(26)
Например Нужно в один табличный документ добавить некие данные по товару, а затем в этот же табличный документ спецификации по этому товару. А спецификации могут быть как картинками, так и PDF, так и многостраничным PDF. Затем этот единый табличный документ отправить почтой. И менять тех.задание - нельзя. :-) |
|||
32
Rovan
гуру
15.05.25
✎
12:39
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |