Я хочу открыть PDF с помощью PDF-XChange Viewer через WINE. Как указать имя файла pdf в строке «Пользовательская команда», чтобы я мог открыть файл PDF с помощью PDF-XChange Viewer, дважды щелкнув по нему? Я попытался использовать \ "z:% f \", следуя предложению здесь для использования Foxit reader. Но мой PDF-XChange Viewer запускается только с пустым окном.
wine "c:/Program Files/Tracker Software/PDF Viewer/PDFXCview.exe" \"z:%f\"
Я использую Ubuntu 10.04 и WINE 1.2.2. PDF-XChange Viewer версия 2.5.
Если сценарий работает, вы должны принять этот ответ, даже если он был вашим.
То, что здесь работало для других приложений, поскольку пользовательская команда была близка к тому, что вы пытались, с некоторыми небольшими отличиями.
wine "C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe" Z:%f
Ссылка здесь для фотошопа с доп. информация об изменении отображаемого имени при желании для использования правой кнопкой мыши - http://ubuntuforums.org/showpost.php?p=9193687&postcount=9
Если эта программа уже установлена с использованием Wine, я не думаю, что ей нужен абсолютный путь. Я думаю, что только
wine pdfxcview filename
откроет файл.
Хорошо, возможно, мой ответ глупый. Что на самом деле вы пытаетесь сделать? Вы пытаетесь исправить ошибку запуска программы?
Я понимаю, что это старый вопрос, но я хочу поделиться своим решением, которое я вычислил после того, как начал использовать PDFXchangeEditor (преемник PDFXchangeViewer), а затем столкнулся с проблемой, чтобы заставить его принимать несколько входных файлов от хост-компьютера. Прежде всего, принятый ответ и все остальные ответы, которые были опубликованы, предполагают, что программа будет обрабатывать только один файл. Вы можете на самом деле бросить в него несколько файловых аргументов одновременно, и он откроет их все нормально, с небольшим фокусом.
Хитрость заключается в использовании расширения кода %F
в поле Exec
в модуле запуска .desktop приложения и предшествует всем развернутым локальным аргументам файла в поле с помощью Z:
, что можно сделать с помощью следующего скрипта
wine-env
. Это идет в /usr/local/bin
и обязательно дайте ему chmod +x
#!/bin/bash
allargs=("$@")
fixpath=0
for idx in "${!allargs[@]}"; do
arg="${allargs[$idx]}"
if [[ $fixpath -eq 0 ]]; then
# fix file paths only after the first executable is found in arg
if [[ "$arg" == *.exe ]]; then
fixpath=1
fi
continue
elif [[ $fixpath -eq 1 ]]; then
# if arg starts with '/' and it's a path that exists on host
# precede the path with drive 'Z:'
if [[ "${arg:0:1}" == '/' && -e "$arg" ]]; then
allargs[$idx]="Z:$arg"
fi
fi
done
exec env "${allargs[@]}"
А для файла приложения .desktop назовите его pdfxce.desktop
и поместите в ~/.local/share/applications/
, и его содержимое должно выглядеть следующим образом this
[Desktop Entry]
Name=PDF-XChange Editor
Type=Application
Terminal=false
Exec=wine-env WINEDEBUG=-all WINEPREFIX=/home/<user>/.local/share/bottles/pdfxce wine PDFXEdit.exe %F
Icon=/home/<user>/.local/share/icons/bottles/pdfxce-pdfxedit.png
Path=/home/<user>/.local/share/bottles/pdfxce/drive_c/Program Files/Tracker Software/PDF Editor
StartupNotify=true
StartupWMClass=PDFXEdit.exe
Вам необходимо изменить деталь со своим именем пользователя. Я храню все мои каталоги с винными префиксами в папке под названием «бутылки». Вы можете по-своему организовать винные префиксы, поэтому измените все части, которые содержат «бутылки», соответственно
И последний шаг, назначьте PDF-файлы приложению, как обычно (щелкните правой кнопкой мыши на pdf -> Properties
-> вкладка Open With
)
Найдены записи в блоге об этой же проблеме для Foxit reader и для PDF-XChange Viewer . Никто из них не работал для меня. Поэтому я отредактировал их и получил один специально для моего случая:
#!/bin/bash
Filename="z:${1//\//\\}"
wine "C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe" $Filename
Сохраните этот скрипт bash и откройте pdf, используя этот скрипт. Теперь дважды щелкните pdf файлы, чтобы открыть их с помощью PDF-XChange Viewer.
Я перешел по этой ссылке, чтобы установить 32-битное средство просмотра PDF XChange в Ubuntu 64 Bit 14.04. Затем по ссылке показан скрипт для открытия средства просмотра PDF Xchange с именем файла в качестве аргумента. Я сделал этот сценарий и сохранил его в /bin
. Затем я отредактировал ~/.local/share/applications/wine-extension-pdf.desktop
так:
[Desktop Entry]
Type=Application
Name=PDF-XChangeViewer
MimeType=application/pdf;
Exec=PDFXCview %f
NoDisplay=true
StartupNotify=true
Мой сценарий получил название PDFXCview
Это основано на превосходном сценарии @ Flint.
Сначала я попробовал переменную "Z:"%U
в конце поля рабочего стола Exec=
для программ Wine. Он работал нормально, пока я не открыл программу без указанного файла. Программы Wine жаловались на отсутствие файла, потому что строка Exec=
указывала на диск Z: это явно не файл, а абсолютный путь к файлу. File not found: Z:
или похожие сообщения, появляющиеся в программе Wine. Немного раздражает.
Проблема с "Z:"%U
заключается в том, что это не условная переменная, если там используется Z :. Однако Wine абсолютно требует Z: иначе он не может найти правильные пути к файлам.
Ваш сценарий делает все "Z:"%U
условным предложением. Сценарий выполняет работу именно так, как я хотел.
Однако, скрипт должен учитывать все исполняемые файлы, написанные также заглавными буквами. В настоящее время он не может указывать какие-либо файлы MS Office (docx, pptx ...) на MS Office 2010, потому что все исполняемые файлы программы написаны как WINWORD.EXE
или POWERPNT.EXE
. Конечно, исполняемые файлы можно переименовать в нижний регистр, но я предпочитаю более универсальное решение, чем переименование отдельных исполняемых файлов для каждой программы.
Грязное и универсальное решение состоит в том, чтобы изменить код скрипта, например:
#!/bin/bash
allargs=("$@")
fixpath=0
for idx in "${!allargs[@]}"; do
arg="${allargs[$idx]}"
if [[ $fixpath -eq 0 ]]; then
# fix file paths only after the first executable is found in arg
if [[ "$arg" == *.exe ]]; then
fixpath=1
fi
if [[ "$arg" == *.EXE ]]; then
fixpath=1
fi
continue
elif [[ $fixpath -eq 1 ]]; then
# if arg starts with '/' and it's a path that exists on host
# precede the path with drive 'Z:'
if [[ "${arg:0:1}" == '/' && -e "$arg" ]]; then
allargs[$idx]="z:${arg//\//\\}"
fi
fi
done
exec env "${allargs[@]}"
Оператор or
по какой-то причине не работал. В любом случае, я уверен, что есть более элегантный способ добиться того же результата.