Как запустить pdf-файл?

  • Автор темы mike
  • Дата начала
M

mike

подскажите, пож, надо, чтобы в форме при нажатии на кнопку (или ссылку) открывался файл pdf по заранее сгенерированному маршруту
не могу понять, какую использовать команду?
файл должен открываться внешним ридером
спасибо!
 
D

Dragon108

подскажите, пож, надо, чтобы в форме при нажатии на кнопку (или ссылку) открывался файл pdf по заранее сгенерированному маршруту
не могу понять, какую использовать команду?
файл должен открываться внешним ридером
спасибо!


@Command([Execute])

 

savl

Lotus Team
28.10.2011
2 624
314
BIT
542
если файл существует или лежит уже на диске, то можно на java открыть.
Открывает тем приложением, которое привязано к данному типу файла: #3.
 
M

mike

@Command([Execute])


спасибо за помощь!
команда открывает файл и как вариант может быть использована, одно из очевидных неудобств - необходимость прописывать маршрут к приложению:
@Command( [Execute]; "C:\\Program Files (x86)\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe"; "file.pdf" )
при различных виндах и версиях акробат-ридера - может стать проблемой

буду пробовать второй вариант с java (никогда не пользовался ею в лотусе)
 
T

turumbay

Можно создать новую форму, выставить ей свойство "launch first attachment", приаттачить файл во временный документ и открыть док по указанной форме: link removed
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
Можно создать новую форму, выставить ей свойство "launch first attachment", приаттачить файл во временный документ и открыть док по указанной
у меня так факсы открываются (факсбокс сделал на Hylafax->mail->LDN)
 
R

Ruslan280

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">на WinAPI</div></div><div class="sp-body"><div class="sp-content">
Код:
Sub Click(Source As Button)
Dim info As SHELLEXECUTEINFO
info.cbSize	= Len(info)
info.fMask	 = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_FLAG_NO_UI
info.lpVerb	 = "open"
info.lpFile	  = "c:\test\1.pdf"
info.nShow	= 5
info.hInstApp = 0
info.lpIDList  = 0
openex = ShellExecuteEX(info)
End Sub
и в Declarations
Код:
Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type
Const SEE_MASK_INVOKEIDLIST = &HC
Const SEE_MASK_NOCLOSEPROCESS = &H40
Const SEE_MASK_FLAG_NO_UI = &H400 
Declare Private Function ShellExecuteEX Lib "shell32" Alias "ShellExecuteEx" (lpExecInfo As SHELLEXECUTEINFO) As Long
проверил-работает. но только на винде.
 
M

mike

Можно создать новую форму, выставить ей свойство "launch first attachment", приаттачить файл во временный документ и открыть док по указанной форме: link removed

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
спасибо, вариант интересный, но не подходит, т.к. задача немного другая-атаченных файлов нет.
Есть многогигабайтный упорядоченный файловый архив сканов (договоров) в pdf-формате.
Ключом к архиву будет являться лотус база. Юзер находит нужный документ в базе и по кнопке открывает его скан из файлового архива, путь к которому известен.
запланировать миграцию в LDN + DAOS
т.е. по ключу же из нотуса в негоже и аттачить, БД подрубить к ДАОС
и схема вполне подойдет :)
 
R

Ruslan280

Странно... С чего бы это?


я в том смысле что будет работать только на винде )
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
если запускаем ср-вами шела - дык зачем юзать винапи?

Добавлено:
Starts another program.
Syntax
Shell ( program [ , windowStyle ] )
Elements
program
A string expression whose value is the name of the program to run, including arguments. program can be the name of an executable file that uses a file name extension of BAT, COM, PIF, or EXE. You can omit the file name extension, and you can optionally include a complete path specification.
Using an internal DOS command name generates an error.
windowStyle
Optional. A number designating a valid window style, as specified in the following table.

Добавлено: в винде - cmd.exe, в никсах (к коим и мак относится) - bash (в линухах еще gvfs-open)
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
364
если запускаем ср-вами шела - дык зачем юзать винапи?
Если запускаем через Shell надо знать какой программой открыть файл и где она расположена, через ShellExecute WinAPI "запускаем" только файл, который откроется в приложении, связанном с расширением этого файла. Как я уже "упоминал" выше, самый простой платформеннонезависимый способ URLOpen.
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
364
яж написал - "не нужно знать" запускаем комнндный просессор (cmd.exe или bash), а в нем:
-винда - просто имя файла (а оно запустит приладу его исполняющую)

По-моему, не прокатит... или я ошибаюсь?
Код:
Shell ("cmd.exe myfile.pdf")
Так?

Добавлено:
@URLOpen у меня всегда пытается открыть через FireFox.
Это потому, что в FireFox вживлена смотрелка PDF файлов, в Chrome тоже, вот он её и пытается запустить. Если отключить эту надстройку в браузере, то будет открываться в другой программе (Acrobat Reader, Foxit, Evince и пр.)
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
542
Это потому, что в FireFox вживлена смотрелка PDF файлов, в Chrome тоже, вот он её и пытается запустить. Если отключить эту надстройку в браузере, то будет открываться в другой программе (Acrobat Reader, Foxit, Evince и пр.)
Это уже из придирок, но: не всегда можно донести это до конечного пользователя, поэтому я выбрал java.
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
364
Это уже из придирок, но: не всегда можно донести это до конечного пользователя, поэтому я выбрал java.
Сегодня как раз у одного пользователя с 9-ой Desktop.getDesktop().open(filename) выскочило с ошибкой AccessControlException. Файл java.policy такой же как и на 8-ке. Правда у него Foxit стоит вместо Acrobat Reader, но не думаю что из-за этого. А из-за чего непонятно.
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
542
а вот так: Process p = Runtime.getRuntime().exec(***);
не пробовали?
9ки нет, хотелось бы узнать на будущее
 
M

mike

filename = ПОЛНЫЙ_ПУТЬ_И_ИМЯ_ВАШЕГО_PDF_ФАЙЛА

1. LS и @фомулы - URLopen "file:///filename"

1. @URLOpen (полныйпутькфайлу) - виснет лотус с ошибкой, мол не может открыть ресурс
2. Call ws.URLOpen("file:////C:\\insidenotes.pdf",,,,,,,,True) - тоже не проходит:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!