Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2015, 14:57   #1
Stat_ya
Пользователь
 
Аватар для Stat_ya
 
Регистрация: 31.05.2009
Сообщений: 30
По умолчанию Печать pdf ShellEx,CreateProcess

Здравствуйте,знатоки!

Существует ряд проблем с печатью pdf в Delphi. Имеется чужая удаленная сессия, в которую отсылается печать(перенаправления и тд).
Необходимо осуществить корректную печать без диалоговых окон,без открытия самого файла на выбранный/указанный принтер, без использования принтера по умолчанию. (драйвера на принтера установлены у обеих сторон)

Пробовались варианты:

1) ShellExecute с 'printto', 'open' через acrord32 с параметрами PChar('/N /T ' + File_Name + ' ' + printerinfo).
На 7ой винде печать проходит с редким успехом. На более поздних версиях ShellExecute возвращает код 42 и файл отправляется на печать в небытие. Причем,если даже использовать команду 'print',то печати на принтер по умолчанию не произойдет.

2) Всячески пыталась вызвать печать через CreateProcess также через акробат. Ничего не выходит с правильным заполнением параметров. Если имеется пример печати,можно ли Вас просить об услуге показать.

3) Единственный вариант работающей печати по удаленке на определнный принтер есть не для pdf,а для команд на принтер штрикодов, но модифицировать его вряд ли возможно под печать файла:
Код:
function ToriPrintDOS ( aMemo: TMemo ): Boolean;    //для печати штрихкода
var I         : Integer ;
    TmpCursor : TCursor ;
    fPrinterHandle: THandle ;
    fDevice, fDriver, fPort:array [0..80] of char;
    {$IFDEF WIN32}
    fDocInfo : PDocInfo1A;
    plen:dword;
    {$ENDIF}
    fNamePr : String ;
begin
  {$IFDEF WIN32}
  fNamePr :=  PRCODEINV; //на принтер инвитро
  GetMem(fDocInfo,SizeOf(TDocInfo1A));
  TmpCursor    := Screen.Cursor ;
  Screen.Cursor := crHourGlass    ;
  try
    Printer.GetPrinter ( fDevice,
                         fDriver,
                         fPort ,
                         fPrinterHandle ) ;
    OpenPrinter ( fDevice, fPrinterHandle, nil ) ;
    try
      fDocInfo^.pDocName    := PChar ( fNamePr ) ;
      fDocInfo^.pOutPutFile := nil ;
      fDocInfo^.pDatatype   := nil ;
      StartDocPrinter ( fPrinterHandle, 1, fDocInfo ) ;
      for I := 0 to aMemo.Lines.Count - 1 do
      begin
       WritePrinter ( fPrinterHandle,
                      PChar(aMemo.Lines[I]),
                      Length(aMemo.Lines[I]),
                      plen ) ;
       WritePrinter ( fPrinterHandle,
                      PChar(#13#10),
                      2,
                      plen ) ;
      end ;
      WritePrinter ( fPrinterHandle,
                     PChar(#13#10),
                     2,
                     plen ) ;
      EndDocPrinter ( fPrinterHandle ) ;
    finally
      ClosePrinter ( fPrinterHandle ) ;
    end ;
  finally
    FreeMem(fDocInfo);
    Screen.Cursor := TmpCursor ;
  end ;
  {$ENDIF}
end ;

Найдется ли у Вас совет или решение?
1)почти блондинка
2)почти программист
3)мало знаю, но, к счастью, обозреваю то, чего не знаю.
Stat_ya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод на печать в pdf- проблема madace Microsoft Office Excel 0 26.02.2013 19:18
Печать в *.pdf выбранных листов Eugmai86 Microsoft Office Excel 11 26.03.2012 01:09
PDF двухсторонняя печать VladimirVB Microsoft Office Word 3 23.11.2010 12:23
печать на PDF принтере Frost.sapr Мультимедиа в Delphi 1 12.10.2008 23:17