Страница 1 из 2
Масштабирование изображений при печати
Добавлено:
19.06.2013 19:05:19
Padre_Mortius
Возникла задача реализовать автоматическую печать документов, которые приходят от клиентов. Все работает, но уперся в ситуацию, что от клиента может прийти картинка как в формате А4, так и Letter (сканы документов). Есть ли у кого мысли как можно маштабировать такие картинки до нормального А4 размера без взаимодействия с пользователем?
Свой просмотрщик картинок писать не вариант.
Все это пишется под винду.
Re: Масштабирование изображений при печати
Добавлено:
19.06.2013 21:06:43
Little_Roo
Приходит именно картинка ? jpg, bmp etc. ? Или форма отчета?
Печать через что - image, printdialog ?
Требуется пояснение
Re: Масштабирование изображений при печати
Добавлено:
19.06.2013 21:11:06
Padre_Mortius
Приходит именно картинка (*.jpg, *.jpeg, *.png, *.tiff). Сейчас печатается через ShellExecute с опцией print.
Re: Масштабирование изображений при печати
Добавлено:
19.06.2013 21:37:50
Little_Roo
Печать с лету, или идет сначала сохранение/открытие файла на диск/с диска?
Re: Масштабирование изображений при печати
Добавлено:
19.06.2013 21:41:14
Padre_Mortius
Печать идет после сохранения файлов на диск, иногда даже после распаковки архивов.
Re: Масштабирование изображений при печати
Добавлено:
19.06.2013 22:12:42
Little_Roo
Не приведете ли кусочек кода, КАК это у Вас реализуется? Видимо, и у меня подобная проблема скоро возникнет - так, может, помолясь великому Вирту, вместе и решим ?
Re: Масштабирование изображений при печати
Добавлено:
19.06.2013 22:58:22
Padre_Mortius
- Код: Выделить всё
var
aFileName: AnsiString; //имя файла
DefaultPrinterName: AnsiString; //имя принтера по-умолчанию, у меня получается через GetDeviceName и обрезаются все символы после первой запятой
begin
//проходимся по записям запроса Query
for i:=0 to Query.RecordCount - 1 do
begin
aFileName = Query.FieldByName('File').AsString; //имя файла
Ext := LowerCase(ExtractFileExt(aFileName)); //получаем расширение файла для удобства работы
//проверяем, что это не архив
if (FileExists(aFileName) and (Ext<>'.zip') and (Ext<>'.rar') and (Ext<>'.arj') then
begin
if Ext='.pdf' then
begin
Cmd := 'AcroRd32.exe /p ' + aFileName;
ShellExecute(nil, 'open', Cmd, nil, nil, SW_HIDE);
end
else
if (Ext='jpg') or (Ext='jpeg') or (Ext='png') or (Ext='tiff') then
begin
Cmd := 'rundll32.exe c:\windows\system32\shimgvw.dll,ImageView_PrintTo /pt '
+ QuotedStr(aFileName) + ' ' + QuotedStr(DefaultPrinterName);
Winexec(Cmd, SW_HIDE);
end
else
ShellExecute(nil, 'print', aFileName, nil, nil, SW_HIDE);
end;
end;
end;
В коде могут быть ошибки, т.к. переводил с C++ Builder сразу сюда. Переменные вроде бы названы понятными названиями.
Добавлено спустя 7 минут 47 секунд:Добавлю еще, что если печатать картинки через
- Код: Выделить всё
ShellExecute(nil, 'print', aFileName, nil, nil, SW_HIDE);
то вызывается окно печати из мастера печати факсов и фотографий, в котором можно выбрать масштабирование, но в данном случае пользователи жалуются на то, что на печать уходят не все файлы.
P.S. исправил слеши
Re: Масштабирование изображений при печати
Добавлено:
19.06.2013 23:40:57
Little_Roo
Padre_Mortius писал(а):Cmd := 'rundll32.exe c:windowssystem32shimgvw.dll,
Ы ?
Re: Масштабирование изображений при печати
Добавлено:
19.06.2013 23:43:20
Padre_Mortius
Little_Roo писал(а):Padre_Mortius писал(а):Cmd := 'rundll32.exe c:windowssystem32shimgvw.dll,
Ы ?
Это косяки движка форума
Re: Масштабирование изображений при печати
Добавлено:
19.06.2013 23:47:24
Little_Roo
В качестве смотрелки/печаталки Акробат используете ??? ... Может косяки с версиями у пользователей ???
Re: Масштабирование изображений при печати
Добавлено:
19.06.2013 23:53:45
Padre_Mortius
с версиями чего?
Там выборочно не печатаются документы, например, из 12 документов не распечатался 1,5 и 10. Из которых все три могут быть картинки в формате jpg, а может быть и солянка в форматах. Есть подозрение, что все-таки проблема с руками у пользователей, т.к. у меня нет такой проблемы. В связи с этим пришел к выводу, что чем меньше нажатий на кнопки при автоматической печати будет у пользователей, тем стабильней все работает. На данный момент проблема только в масштабировании изображений с размером отличным от А4.
Добавлено спустя 2 минуты 8 секунд:В качестве смотрелки/печаталки Акробат используете ???
А почему нет? В организации он рассматривается в качестве разрешенного стандартного приложения. К тому же позволяет запускать печать указанного файла из консоли. В данном случае не вижу причины городить собственный велосипед.
Re: Масштабирование изображений при печати
Добавлено:
20.06.2013 00:01:10
Little_Roo
Padre_Mortius писал(а):с версиями чего?
дык акробата же....
Были у меня в гимназии такие косяки - акробаты 6-10 ну ОЧЕНЬ по-разному отображали (или не отображали), к примеру, формулы...
Добавлено спустя 4 минуты 7 секунд:Мозг уже в отпуске
Да, ExtractFileExt возвращает расширение С ведущей точкой или БЕЗ ?
- Код: Выделить всё
Ext := LowerCase(ExtractFileExt(aFileName)); //получаем расширение файла для удобства работы
....
if (FileExists(aFileName) and (Ext<>'.zip') and (Ext<>'.rar') and (Ext<>'.arj')then
.....
if (Ext='jpg') or (Ext='jpeg') or (Ext='png') or (Ext='tiff') then
....
Re: Масштабирование изображений при печати
Добавлено:
20.06.2013 00:11:16
Padre_Mortius
Little_Roo, с акробатом все более или менее хорошо, тут все зависит от того как/чем тот или иной файл был сделан. PDF-ки из оргтехники, PDFCreator, FineReader как правило в Adobe Reader отображаются без проблем, чего нельзя сказать про тот же Foxit Reader.
Re: Масштабирование изображений при печати
Добавлено:
20.06.2013 00:23:12
Little_Roo
Padre_Mortius писал(а)://проходимся по записям запроса Query
for i:=0 to Query.RecordCount - 1 do
begin
aFileName = Query.FieldByName('File').AsString; //имя файла
Ext := LowerCase(ExtractFileExt(aFileName)); //получаем расширение файла для удобства работы
Начинаем дуть на воду...
AsString в имени файла ?
А если юзверь поганый сохрант его в виде
секретный ДОКУмент.pdf.вот тебе.фиг.~Таки и фиг вам будет
Re: Масштабирование изображений при печати
Добавлено:
20.06.2013 09:35:47
Padre_Mortius
Little_Roo писал(а):AsString в имени файла ?
В этой строке читается запись из БД, которая содержит имя файла
Little_Roo писал(а):А если юзверь поганый сохрант его в виде секретный ДОКУмент.pdf.вот тебе.фиг.~
Таки и фиг вам будет
а теперь попробуйте запустить тот код, что я привел для данного типа файла и система скажет, что не может его открыть. В худшем случае можно явно прописать необходимые расширения, а все остальное оставлять в стороне.
P.S. я привел всего-лишь кусок кода, который показывает принцип печати документов.