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

mike

Well-Known Member
25.04.2005
45
0
#1
подскажите, пож, надо, чтобы в форме при нажатии на кнопку (или ссылку) открывался файл pdf по заранее сгенерированному маршруту
не могу понять, какую использовать команду?
файл должен открываться внешним ридером
спасибо!
 

Dragon108

Well-Known Member
19.01.2010
265
0
#2
подскажите, пож, надо, чтобы в форме при нажатии на кнопку (или ссылку) открывался файл pdf по заранее сгенерированному маршруту
не могу понять, какую использовать команду?
файл должен открываться внешним ридером
спасибо!

@Command([Execute])

Ссылка
 

savl

Well-Known Member
Lotus team
28.10.2011
2 126
163
#3
если файл существует или лежит уже на диске, то можно на java открыть.
Открывает тем приложением, которое привязано к данному типу файла: #3.
 

mike

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

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 490
366
#6
Можно создать новую форму, выставить ей свойство "launch first attachment", приаттачить файл во временный документ и открыть док по указанной
у меня так факсы открываются (факсбокс сделал на Hylafax->mail->LDN)
 

Ruslan280

Well-Known Member
18.04.2013
50
0
#7
<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
проверил-работает. но только на винде.
 

mike

Well-Known Member
25.04.2005
45
0
#8
Можно создать новую форму, выставить ей свойство "launch first attachment", приаттачить файл во временный документ и открыть док по указанной форме: http://codeby.net/ipb.html?s=&sh...st&p=171290
спасибо, вариант интересный, но не подходит, т.к. задача немного другая-атаченных файлов нет.
Есть многогигабайтный упорядоченный файловый архив сканов (договоров) в pdf-формате.
Ключом к архиву будет являться лотус база. Юзер находит нужный документ в базе и по кнопке открывает его скан из файлового архива, путь к которому известен.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 490
366
#9
спасибо, вариант интересный, но не подходит, т.к. задача немного другая-атаченных файлов нет.
Есть многогигабайтный упорядоченный файловый архив сканов (договоров) в pdf-формате.
Ключом к архиву будет являться лотус база. Юзер находит нужный документ в базе и по кнопке открывает его скан из файлового архива, путь к которому известен.
запланировать миграцию в LDN + DAOS
т.е. по ключу же из нотуса в негоже и аттачить, БД подрубить к ДАОС
и схема вполне подойдет :)
 

Ruslan280

Well-Known Member
18.04.2013
50
0
#11
Странно... С чего бы это?


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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 490
366
#12
если запускаем ср-вами шела - дык зачем юзать винапи?

Добавлено:
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

Well-Known Member
Lotus team
26.10.2009
879
78
#13
если запускаем ср-вами шела - дык зачем юзать винапи?
Если запускаем через Shell надо знать какой программой открыть файл и где она расположена, через ShellExecute WinAPI "запускаем" только файл, который откроется в приложении, связанном с расширением этого файла. Как я уже "упоминал" выше, самый простой платформеннонезависимый способ URLOpen.
 

garrick

Well-Known Member
Lotus team
26.10.2009
879
78
#14
яж написал - "не нужно знать" запускаем комнндный просессор (cmd.exe или bash), а в нем:
-винда - просто имя файла (а оно запустит приладу его исполняющую)
По-моему, не прокатит... или я ошибаюсь?
Код:
Shell ("cmd.exe myfile.pdf")
Так?

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

savl

Well-Known Member
Lotus team
28.10.2011
2 126
163
#15
Это потому, что в FireFox вживлена смотрелка PDF файлов, в Chrome тоже, вот он её и пытается запустить. Если отключить эту надстройку в браузере, то будет открываться в другой программе (Acrobat Reader, Foxit, Evince и пр.)
Это уже из придирок, но: не всегда можно донести это до конечного пользователя, поэтому я выбрал java.
 

garrick

Well-Known Member
Lotus team
26.10.2009
879
78
#17
Это уже из придирок, но: не всегда можно донести это до конечного пользователя, поэтому я выбрал java.
Сегодня как раз у одного пользователя с 9-ой Desktop.getDesktop().open(filename) выскочило с ошибкой AccessControlException. Файл java.policy такой же как и на 8-ке. Правда у него Foxit стоит вместо Acrobat Reader, но не думаю что из-за этого. А из-за чего непонятно.
 

savl

Well-Known Member
Lotus team
28.10.2011
2 126
163
#18
а вот так: Process p = Runtime.getRuntime().exec(***);
не пробовали?
9ки нет, хотелось бы узнать на будущее
 

mike

Well-Known Member
25.04.2005
45
0
#19
filename = ПОЛНЫЙ_ПУТЬ_И_ИМЯ_ВАШЕГО_PDF_ФАЙЛА

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