Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вложенные pdf-документы (Access 2003)
 
 автор: Кирилл_Даф   (11.06.2008 в 15:32)   личное сообщение
 
 

Есть необходимость осуществлять пакетную распечатку вложенных документов pdf.
Я разобрался как хранить документы в таблице. Открываю запрос, выбираю из базы документов pdf необходимые записи, на основе выборки строится отчет, который содержит присоединенные рамки объекта. Этот отчет можно посмотреть и распечатать, но если файл pdf содержит более 1 страницы, то отображается и печатается только первая страница, а мне нужно чтобы все печатались. Если не возможно чтобы в отчете все страницы отображались, то хотя бы распечатывались. Может быть можно без отчета сраззу на печать все файлы отправлять в крайнем случае. Подскажите, pls, как реализовать.

  Ответить  
 
 автор: osmor   (11.06.2008 в 15:35)   личное сообщение
 
 

Знаю как через DDE печатать файлы pdf c диска через установленный Acrobar Reader. Как печатать вложенные - не знаю.

  Ответить  
 
 автор: Кирилл_Даф   (11.06.2008 в 15:40)   личное сообщение
 
 

А это может помочь реализовать задуманное. У меня огромная база pdf документов и она растет. В конкретный момент времени нужна небольшая часть из них (например 50-60 документов). Выборка осуществляется по конкретным критериям. 50 документов сложно каждый открывать и распечатывать, поэтому нужна пакетная распечатка. Я пытался сделать через отчет, чтобы у пользователя была возможность хотя бы выборочной проверки-просмотра, но натолкнулся на описанную проблему.

  Ответить  
 
 автор: osmor   (11.06.2008 в 15:47)   личное сообщение
 
 

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

Добавлено.
Есть еще вариант использовать ActiveX
http://hiprog.com/index.php?option=com_content&task=view&id=251661575

  Ответить  
 
 автор: Кирилл_Даф   (11.06.2008 в 16:57)   личное сообщение
 
 

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

  Ответить  
 
 автор: Кирилл_Даф   (11.06.2008 в 17:00)   личное сообщение
 
 

Приложение по ссылке не работает, я его уже ковырял

  Ответить  
 
 автор: osmor   (11.06.2008 в 17:11)   личное сообщение
 
 

в смысле не работает?

Ну вот функция для печати PDF файла:

Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
      

Public Sub PrintPDF(FileName As Variant)

On Error GoTo ErrHandler
  
  Dim Error282Count As Integer  ' Количество ошибок "Can't open DDE channel"
  Dim AcroDDEFailed As Boolean  ' Кстанавливается в true если не удалось установить DDE соединение
  Dim strCmd As String          ' DDE команда
  Dim lStatus As Long           ' Ответ команды ShellExecute
  Const Max282Errors = 6        ' Количество попыток установить DDE соединение, перед тем как будет решено
                                ' что Acrobat Reader не удалось запустить.
                                ' Возможно, что число потребуется изменить для конкретного компьютера
  Dim strAcroPath As String     ' Path to acrobat, determined by FindExecutable
  Dim bCloseAcrobat As Boolean  ' If we open acrobat, we will close it when we are done
  
  '' If acrobat is already running (and hidden), shelling it will cause it to be shown.
  '' We do not want that. So try a DDE connect, which will fail if acrobat is not running
  '' I have looked at other API means of testing this, but it may be running as a process (no window)
  '' and there does not seem to be many graceful ways of testing for this.
  
  Error282Count = Max282Errors '' we only need to try once to see if it is already running.
  AcroDDEFailed = False             '' ErrHandler will set to true if Acro is not running
  
Dim lngChanel As Long
'создаем DDE канал
lngChanel = DDEInitiate("acroview", "control")
  
  If AcroDDEFailed = True Then
   
    '' Use the FindExecutable API function to grab the path to our PDF handler.
    '' This should be Acrobat Reader or Acrobat, but it might be something else.
    '' When we try to DDE link to it, non-acrobat will error out. This is ok.
    strAcroPath = String(128, 32)
    lStatus = FindExecutable(FileName, vbNullString, strAcroPath)
    If lStatus <= 32 Then
      MsgBox "Acrobat could not be found on this computer. Printing cancelled", vbCritical, "Problem"
      Exit Sub
    End If
    '' Launch the PDF handler
    lStatus = Shell(strAcroPath, vbHide)
    If (lStatus >= 0) And (lStatus <= 32) Then
      MsgBox "An error occured launching Acrobat. Printing cancelled", vbCritical, "Problem"
      Exit Sub
    End If
    bCloseAcrobat = True  '' We will try to close Acrobat when we are done
  End If
  PauseFor 2  '' Lets take a break here to let Acrobat finish loading
  Error282Count = 0       '' This time, we will allow all acceptable tries, as
  AcroDDEFailed = False   '' Acrobat is running, but may be busy loading its modules
  'создаем DDE канал
  lngChanel = DDEInitiate("acroview", "control")
  If AcroDDEFailed = True Then
    MsgBox "An error occured connecting to Acrobat. Printing cancelled", vbCritical, "Problem"
    Exit Sub
  End If
    strCmd = "[FilePrintSilent(" & Chr(34) & FileName & Chr(34) & ")]"
   DDEExecute lngChanel, strCmd

  If bCloseAcrobat = True Then
    ' нашел в инете что 6.0 6.1, вылетают с ошибкой при  DDE команде [AppExit()]
    ' проверял на  5.0.5 работает нормально

    If InStr(strAcroPath, "6.0") = 0 Then
      strCmd = "[AppExit()]"
      DDEExecute lngChanel, strCmd
    End If
  End If
  
  'Закрываем все DDE
  DDETerminateAll
Exit Sub

ErrHandler:
  If Err.Number = 282 Then 'Невозможно открыть DDE канал
    ' Эта ошибка может возникать когда Acrobat загружился не польностью
    ' делаем Max282Errors попыток перез тем как вернуть AcroDDEFailed = True
    Error282Count = Error282Count + 1
    If Error282Count <= Max282Errors Then
      PauseFor 3
      Resume
    Else
      AcroDDEFailed = True
      Resume Next
    End If
  End If
  
  MsgBox "Error in PrintPDF sub Error# " & Err.Number & " " & Err.Description & "."
End Sub

Private Sub PauseFor(iSeconds As Integer)
'Пауза iSecond секунд
  Dim sngTimer As Single
  
  sngTimer = Timer
  While Timer - sngTimer < iSeconds
    DoEvents
  Wend

End Sub

  Ответить  
 
 автор: Кирилл_Даф   (11.06.2008 в 20:55)   личное сообщение
 
 

File does not begin with '%PDF-'. - такое сообщение выдается при нажатии на единственную активную кнопку формы скаченного файла по Вашей ссылке. Поскольку мои познания весьма скромны, то думаю, если бы указанное Вами приложение работало, то я бы разобрался и использовал нужный фрагмент.

  Ответить  
 
 автор: osmor   (13.06.2008 в 21:01)   личное сообщение
 
 

Какая версия Acrobat Reader у вас установлена?
Этот пример работает ТОЛЬКО с версией 7.0 (это написано в описании)
поищите у себя на компьютере в папке где установлен AR файл AcroPDF.dll
есть?
Если его нет, то нужно скачать его с сайта ADOBE, и зарегистрировать, без него работать не будет.

  Ответить  
 
 автор: Промка   (26.06.2008 в 16:12)   личное сообщение
 
 

У кого - нибудь получилось печатать pdf-файлы Мне нужна пакетная печать по гиперссылки на pdf-файлы в таблице.Возможно ли это? Осветите путь слегка

  Ответить  
 
 автор: osmor   (26.06.2008 в 16:31)   личное сообщение
 
 

вы этой же ветке чуть выше код, который позволяет это делать

  Ответить  
 
 автор: промка   (27.06.2008 в 17:18)   личное сообщение
 
 

Я взяла указанную программу Выдает ошибку "acrobat could not be found on this computer ....... acrobat 7.0 стоит Подскажите , пож как это пройти Ответьте пожалуйста

  Ответить  
 
 автор: промка   (01.07.2008 в 10:09)   личное сообщение
 
 

Ответьте пожалуйста на мой вопрос Очень надо

  Ответить  
 
 автор: osmor   (01.07.2008 в 10:39)   личное сообщение
 
 

Вариантов несколько.
1. AR неверно зарегистрирован в системе из за этого FindExecutable не находит путь к нему
2. AR 7.0 как-то не так регистрируется (с 7.0 не пробовал, этот код тестировался на 5.0.5)

попробуйте переустановить акробат и посмотрите что возвращает FindExecutable в строке
  lStatus = FindExecutable(FileName, vbNullString, strAcroPath)

  Ответить  
 
 автор: промка   (01.07.2008 в 17:14)   личное сообщение
 
 

переустановила - все тоже самое FindExecutable возвращает код 2 Что это значит? поставила 505 тоже самое Какой Ассess, Какой window? Может в этом дело

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList