Страница 1 из 2
Конвертация отчетов в что-нибудь ...
Добавлено: 17 Декабрь 2009, 11:15
Игорь Столяров
Привет всем !
Хотелось бы вернуться к давнему вопросу, который уже обсуждался.
Идея следующая - есть программа, которая генерит отчеты и рассылает их по e-mail.
Все хорошо, но плохо что страницы листов отчета в WMF.
Хотелось бы их конвертировать во что-то более удобоваримое. Например JPG или GIF.
Есть программы, которые конвертят векторную графику (WMF) в растровую (JPG, BMP, GIF).
В принципе, это делает Explorer - если в нем открыть WMF картинку с отчетом, то можно
сохранить ее в BMP, а потом уже через PaintBrush записать в JPG или GIF ....
Но хотелось бы эту нехитрую операцию встроить в прикладную программу.
Не знает ли кто-нибудь как это можно сделать средствами Clarion, через API Windows
или пусть даже какую-нибудь внешнюю библиотеку ? Особых требований нет ...
Заранее спасибо за любую информацию !

Re: Конвертация отчетов в что-нибудь ...
Добавлено: 17 Декабрь 2009, 14:15
seawolf
Решал подобную задачу но на выходе был заказан Pdf. В этом случае от штатных средств C6 лучше отказаться (очень медленно делает преобразование) и использовать Image2Pdf. Работает очень быстро. Unlimited лицензия 250 $. Если все-таки речь WMF -> Tif,Jpeg или что-нибудь надо копать в сторону программ WMF(EMF)ToBmp или что-то подобное. Для преобразования между растрами однозначно FreeImage.
Re: Конвертация отчетов в что-нибудь ...
Добавлено: 17 Декабрь 2009, 16:07
Игорь Столяров
Да в общем-то с обработкой растровой графики и PDF все понятно и более того есть варианты ...
А вот как конвертнуть WMF в растровый формат .... ?
Re: Конвертация отчетов в что-нибудь ...
Добавлено: 17 Декабрь 2009, 18:36
seawolf
Если нет в природе чего-нибудь типа WmeToTif (BMP) могу предложить после WMF -> PDF крутнуть PDF далее через Gostcript GPL и получить bmp, tif, ppm и так далее.
Re: Конвертация отчетов в что-нибудь ...
Добавлено: 17 Декабрь 2009, 22:12
Дед Пахом
Если кому надо, сделал конвертер WMF -> BMP/GIF/JPG/PNG. Пользоваться так:
1. Зарегистрировать (нужен Framework 2.0 или выше):
c:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe "C:\ImageConverter\ImageConverter.dll" (полный путь к папке, где лежит dll, после этого её нужно класть под ноги к exe).
2. В коде что-то вроде
Код: Выделить всё
OleCtrl=CREATE(0,CREATE:OLE)
OleCtrl{prop:create}='ImageConverter.Converter'
obj"=OleCtrl{prop:object}
IF obj"[1] = '`'
OleCtrl{prop:ReportException}=1
OleCtrl{'Convert("' & CLIP(Src) & '", "' & CLIP(Dest) & '", "' & CLIP(imageFormat) & '")'}
MESSAGE('Done!')
DESTROY(OleCtrl)
ELSE
MESSAGE('ImageConverter не зарегистрирован!')
END
Src - полный путь к wmf, Dest - полный путь к новому файлу, ImageFormat - один из BMP/GIF/JPG/PNG (например 'PNG', регистр букв не важен).
ЗЫ
меня хлебом не корми, дай комок на благо человечества сделать

Re: Конвертация отчетов в что-нибудь ...
Добавлено: 18 Декабрь 2009, 13:14
Игорь Столяров
Я конечно извиняюсь за свою наглость ... но нет ли у Вас "такого же, но без крыльев ?"
Т.е. без regasm.exe и FrameWork ? Например просто DLL из которой можно вызвать функции
конвертации в приложении Win32 ... А в остальном все классно, спасибо !

Re: Конвертация отчетов в что-нибудь ...
Добавлено: 18 Декабрь 2009, 14:46
Дед Пахом
Игорь Столяров писал(а):Я конечно извиняюсь за свою наглость ... но нет ли у Вас "такого же, но без крыльев ?"
Т.е. без regasm.exe и FrameWork ? Например просто DLL из которой можно вызвать функции
конвертации в приложении Win32 ... А в остальном все классно, спасибо !

Не-а. Крылья как раз всю работу и выполняют, а моего кода там 3 строчки.
Re: Конвертация отчетов в что-нибудь ...
Добавлено: 20 Декабрь 2009, 16:01
Игорь Столяров
Помогите пожалуйста !
Не получается сформировать файл манифеста, для того, что бы получить программу, которая бы работала с ImageConverter.dll без регистрации DLL в реестре. Все сделал по описанию - но либо программа с полученным манифестом вообще не запускается, либо не видит Net DLL ... Заранее спасибо !
Re: Конвертация отчетов в что-нибудь ...
Добавлено: 20 Декабрь 2009, 16:05
lsgsoftware
В свое время много этим занимался.Лучший результат получал
путем "печати" отчета в файл на PDF-принтер.Клашин PDF сложные
табличные отчеты искажает, да с кирилицей бывают проблемы.
А дальше FineReader с версии 8. Легко переводит сложные табличные
PDF-репорты хоть в Ворд и без искажений.Более раннии версии файнридера
у меня сложные табличные репорты искажали.
Re: Конвертация отчетов в что-нибудь ...
Добавлено: 20 Декабрь 2009, 21:10
Дед Пахом
Игорь Столяров писал(а):Помогите пожалуйста !
Не получается сформировать файл манифеста, для того, что бы получить программу, которая бы работала с ImageConverter.dll без регистрации DLL в реестре. Все сделал по описанию - но либо программа с полученным манифестом вообще не запускается, либо не видит Net DLL ... Заранее спасибо !
Игорь, можно "на ты"? OK
Я ж подробно всё в статье описал
http://www.clarionlife.net/content/view/325/29/, не читал? Вот сейчас повторил всё по шагам, и работает!
По ходу ты:
- не создал манифест для dll и не внедрил его в dll:
GenMan32.exe mynetdll.dll /out
GenMan32.exe mynetdll.dll /add /manifest:mynetdll.dll.manifest
- не включил в манифест exe секцию
<dependentAssembly>
<assemblyIdentity
name="mynetdll"
version="1.0.0.0"
processorArchitecture="MSIL" />
</dependentAssembly>
</dependency>
- неудачно назвал приложение так же, как и dll (для .NET нет разницы exe или dll - это всё сборки, и не известно, какой файл она будет брать)
- и наконец OLE control должен работать в окне, так что нужна процедура типа Window, а код конвертации выполнять после открытия окна.
Я в архив включил работающий вариант со всеми исходниками. Там я заменил пути к файлам c:\test.wmf и c:\test.jpg на просто test.wmf и test.jpg, потому что под Вистой при включённом UAC это не работает (нет прав на корневой каталог c:\). ImageConverter.dll уже с манифестом внутри (не нужен GenMan32).
Удачи!
Re: Конвертация отчетов в что-нибудь ...
Добавлено: 21 Декабрь 2009, 10:16
Игорь Столяров
Спасибо !
Конечно я читал описание - иначе бы мне такой способ регистрации DLL
через манифест просто не пришел бы голову ...
Да, действительно я сделал несколько ошибок, спасибо за уточнение по внедрению манифеста в DLL ...
Но главного я так и понял. Куда включить секцию
<dependentAssembly>
<assemblyIdentity
name="ImageConverter"
version="1.0.0.0"
processorArchitecture="MSIL" />
</dependentAssembly>
</dependency>
в манифест TEST.EXE ? Куда бы я ее вставлял - получаю сообщение "Приложние не было запущено, потому что некорректно настроено". Удаляю манифест с исправлением или создаю заново - программа TEST.EXE запускается,
но есстественно не работает вызов ImageConverter ....
Вопрос - можно получить для TEXT.EXE манифест с исправлением (c корректно сделанной этой вставкой) ?
Заранее спасибо !

Re: Конвертация отчетов в что-нибудь ...
Добавлено: 21 Декабрь 2009, 10:41
Дед Пахом
Привет!
Я тут поигрался с этим манифестом и доигрался до того, что какие бы манифесты не подсовывал и настройки в Global/App settings не включал/выключал, test.exe запускается и конвертит wmf! Даже удалял все obj, clw, lib и вообще всё, кроме app, всё равно результат один - работает... хотя не должно.
А манифест делается так - добавляем
<dependency>
<dependentAssembly>
<assemblyIdentity
name="ImageConverter"
version="1.0.0.0"
processorArchitecture="MSIL" />
</dependentAssembly>
</dependency>
после последнего </dependency> (т.е. внутри элемента <assembly>), сохраняем, дальше отключаем в app settings его генерацию, чтобы не перезаписал нашу вставку. Вот так у меня:
Код: Выделить всё
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="SoftVelocity.Clarion7.Application"
type="win32"
/>
<description>Clarion application.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity
name="ImageConverter"
version="1.0.0.0"
processorArchitecture="MSIL" />
</dependentAssembly>
</dependency>
</assembly>
Попробуй всё это проделать с совсем новым app (другое имя, другой каталог). Т.е. сначала убедиться, что со стандартным манифестом запускается, но dll не зарегистрирована, потом с новым манифестом убедиться, что всё OK (ну или не OK).
В предыдущем архиве манифеста нет, т.к. я включил крыжик "Линковать manifest в проект"
Re: Конвертация отчетов в что-нибудь ...
Добавлено: 21 Декабрь 2009, 11:54
Игорь Столяров
Есть подозрение что "безотказность" связана с тем, DLL (или ее копия в другой папке) зарегистрирована REGASM на твоем компьютере ....
Теперь (после корректного добавления секции в манифест) программа запускается.
Но ImageConverter не видет по любому и с манифестом и без ....

Re: Конвертация отчетов в что-нибудь ...
Добавлено: 21 Декабрь 2009, 12:29
Дед Пахом
Игорь Столяров писал(а):Есть подозрение что "безотказность" связана с тем, DLL (или ее копия в другой папке) зарегистрирована REGASM на твоем компьютере ....
Специально перед тестами выполнял разрегистрацию, и test.exe честно говорил "Не зарегистрирована". regasm руками не вызывал, но сейчас посмотрел - есть ImageConverter в реестре!
Что сказать... Надо провести ещё испытания.
Re: Конвертация отчетов в что-нибудь ...
Добавлено: 21 Декабрь 2009, 14:09
Дед Пахом
Вот такой вариант работает железобетонно, без окон, без OLE. Добавлены 3 api-функции в глобальный эмбед. В архиве рабочий манифест и манифест первоначальный (сгенерённый IDE).