|
|
|
преобразование типов файлов: 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
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |