2014-10-13 4 views
0

Я работаю над инструментом на основе Java, который должен искать файлы PDF в выбранных каталогах и которые должны искать специальные слова/предложения в этих файлах PDF. После этого JList показывает файлы, которые подходят и с двойным щелчком на одной из этих записей PDF Reader (Adobe Reader) должен открыть этот файл непосредственно на странице, где появляется слово/предложение.открыть PDF-файл с параметрами

Я пробовал две разные вещи.

Runtime.exec:

try{ 
    Runtime.getRuntime().exec("rundll32" + " " + "url.dll,FileProtocolHandler /A page=4" + " " + o.toString()); 
}catch(IOException ex) { 
    ex.printStackTrace(); 
} 

Desktop открыто:

if(Desktop.isDesktopSupported()) { 
    try{ 
     Desktop d = Desktop.getDesktop(); 
     d.open(new File(o.toString())); 
    }catch(IOException ex) { 
     ex.printStackTrace(); 
    } 
} 

Есть ли способ, чтобы начать чтение PDF с параметрами, как "страница = 4", чтобы перейти непосредственно на нужную страницу?

Заранее спасибо

+0

Пробовал 'Desktop.getDesktop(). Просматривать (новый URI (file.toURI(). ToString() +"? Page = 2 & zoom = 100 "));' бесполезно. КСТАТИ. есть '& search = aaa + bbb'. –

+0

благодарит за ответ, но ваше предложение также не работает для меня:/ похоже, что параметры были просто проигнорированы – Lukas

ответ

2

Одна из проблем вы можете столкнуться не имея возможности напрямую позвонить акробата, если не на Пути компьютера. В решении используются две команды Windows: assoc and ftype для извлечения исполняемого файла acrobat.

Найдя, вы просто должны построить командную строку, как ожидается, в документации акробата:

<Acrobat path> /A "<parameter>=<value>" "<PDF path>" 

Я пришел со следующим раствором:

public void openPdfWithParams(File pdfFile, String params){ 

    try { 
     //find the file type of the pdf extension using assoc command 
     Process p = Runtime.getRuntime().exec("cmd /c assoc .pdf"); 
     p.waitFor(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line = reader.readLine(); 
     String type = line.substring(line.indexOf("=")+1); //keeping only the file type 
     reader.close(); 

     //find the executable associated with the file type usng ftype command 
     p = Runtime.getRuntime().exec("cmd /c ftype "+type); 
     p.waitFor(); 
     reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     line = reader.readLine(); 
     reader.close(); 
     String exec = line.substring(line.indexOf("=")+1); //keeping only the command line 


     //building and executing the final command 
     //the command line ends with "%1" to pass parameters - replacing it by our parameters and file path 
     String commandParams= String.format("/A \"%s\" \"%s\"", params ,pdfFile.getAbsolutePath()); 
     String command = exec.replace("\"%1\"", commandParams); 
     p = Runtime.getRuntime().exec(command); 


    } catch (Exception e) { 
     logger.log(Level.SEVERE, "Error while trying to open PDF file",e); 
     e.printStackTrace(); 
    } 
} 

Берегись, код является весьма оптимистично для удобства чтения необходимо выполнить несколько тестов, чтобы команды вернули ожидаемый результат. Кроме того, этот код имеет синтаксис Java6, который, безусловно, может принести пользу обновлению Java7 «попробуйте с ресурсами» и nio.

Смежные вопросы