Масштабирование изображений при печати

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Масштабирование изображений при печати

Сообщение Padre_Mortius » 19.06.2013 19:05:19

Возникла задача реализовать автоматическую печать документов, которые приходят от клиентов. Все работает, но уперся в ситуацию, что от клиента может прийти картинка как в формате А4, так и Letter (сканы документов). Есть ли у кого мысли как можно маштабировать такие картинки до нормального А4 размера без взаимодействия с пользователем?

Свой просмотрщик картинок писать не вариант.
Все это пишется под винду.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Масштабирование изображений при печати

Сообщение Little_Roo » 19.06.2013 21:06:43

Приходит именно картинка ? jpg, bmp etc. ? Или форма отчета?
Печать через что - image, printdialog ?
Требуется пояснение
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Масштабирование изображений при печати

Сообщение Padre_Mortius » 19.06.2013 21:11:06

Приходит именно картинка (*.jpg, *.jpeg, *.png, *.tiff). Сейчас печатается через ShellExecute с опцией print.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Масштабирование изображений при печати

Сообщение Little_Roo » 19.06.2013 21:37:50

Печать с лету, или идет сначала сохранение/открытие файла на диск/с диска?
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Масштабирование изображений при печати

Сообщение Padre_Mortius » 19.06.2013 21:41:14

Печать идет после сохранения файлов на диск, иногда даже после распаковки архивов.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Масштабирование изображений при печати

Сообщение Little_Roo » 19.06.2013 22:12:42

Не приведете ли кусочек кода, КАК это у Вас реализуется? Видимо, и у меня подобная проблема скоро возникнет - так, может, помолясь великому Вирту, вместе и решим ? :shock:
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Масштабирование изображений при печати

Сообщение Padre_Mortius » 19.06.2013 22:58:22

Код: Выделить всё
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. исправил слеши
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Масштабирование изображений при печати

Сообщение Little_Roo » 19.06.2013 23:40:57

Padre_Mortius писал(а):Cmd := 'rundll32.exe c:windowssystem32shimgvw.dll,


Ы ?
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Масштабирование изображений при печати

Сообщение Padre_Mortius » 19.06.2013 23:43:20

Little_Roo писал(а):
Padre_Mortius писал(а):Cmd := 'rundll32.exe c:windowssystem32shimgvw.dll,


Ы ?

Это косяки движка форума
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Масштабирование изображений при печати

Сообщение Little_Roo » 19.06.2013 23:47:24

В качестве смотрелки/печаталки Акробат используете ??? ... Может косяки с версиями у пользователей ???
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Масштабирование изображений при печати

Сообщение Padre_Mortius » 19.06.2013 23:53:45

с версиями чего?
Там выборочно не печатаются документы, например, из 12 документов не распечатался 1,5 и 10. Из которых все три могут быть картинки в формате jpg, а может быть и солянка в форматах. Есть подозрение, что все-таки проблема с руками у пользователей, т.к. у меня нет такой проблемы. В связи с этим пришел к выводу, что чем меньше нажатий на кнопки при автоматической печати будет у пользователей, тем стабильней все работает. На данный момент проблема только в масштабировании изображений с размером отличным от А4.

Добавлено спустя 2 минуты 8 секунд:
В качестве смотрелки/печаталки Акробат используете ???

А почему нет? В организации он рассматривается в качестве разрешенного стандартного приложения. К тому же позволяет запускать печать указанного файла из консоли. В данном случае не вижу причины городить собственный велосипед.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Масштабирование изображений при печати

Сообщение Little_Roo » 20.06.2013 00:01:10

Padre_Mortius писал(а):с версиями чего?

дык акробата же.... :( Были у меня в гимназии такие косяки - акробаты 6-10 ну ОЧЕНЬ по-разному отображали (или не отображали), к примеру, формулы...

Добавлено спустя 4 минуты 7 секунд:
Мозг уже в отпуске :D
Да, 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
....
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Масштабирование изображений при печати

Сообщение Padre_Mortius » 20.06.2013 00:11:16

Little_Roo, с акробатом все более или менее хорошо, тут все зависит от того как/чем тот или иной файл был сделан. PDF-ки из оргтехники, PDFCreator, FineReader как правило в Adobe Reader отображаются без проблем, чего нельзя сказать про тот же Foxit Reader.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Масштабирование изображений при печати

Сообщение Little_Roo » 20.06.2013 00:23:12

Padre_Mortius писал(а)://проходимся по записям запроса Query
for i:=0 to Query.RecordCount - 1 do
begin
aFileName = Query.FieldByName('File').AsString; //имя файла
Ext := LowerCase(ExtractFileExt(aFileName)); //получаем расширение файла для удобства работы

Начинаем дуть на воду... :(
AsString в имени файла ?
А если юзверь поганый сохрант его в виде секретный ДОКУмент.pdf.вот тебе.фиг.~
Таки и фиг вам будет :(
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Масштабирование изображений при печати

Сообщение Padre_Mortius » 20.06.2013 09:35:47

Little_Roo писал(а):AsString в имени файла ?

В этой строке читается запись из БД, которая содержит имя файла

Little_Roo писал(а):А если юзверь поганый сохрант его в виде секретный ДОКУмент.pdf.вот тебе.фиг.~
Таки и фиг вам будет :(

а теперь попробуйте запустить тот код, что я привел для данного типа файла и система скажет, что не может его открыть. В худшем случае можно явно прописать необходимые расширения, а все остальное оставлять в стороне.

P.S. я привел всего-лишь кусок кода, который показывает принцип печати документов.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

След.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

Рейтинг@Mail.ru