java.io.IOException: Impossible d'exécuter le programme “...”: java.io.IOException: erreur=2, Aucun fichier ou répertoire
J'ai besoin de convertir un fodt fichier à pdf. Après des jours gaspillé à essayer d'utiliser une variété de convertisseurs j'ai réalisé que l'utilisation de libreoffice pourrait faire l'affaire.
/usr/bin/libreoffice --headless --convert-to pdf:'writer_pdf_Export' --outdir /home/develop/tomcat/mf/ROOT/private/docs/0/ /home/develop/tomcat/mf/ROOT/private/docs/0/35_invoice.fodt
Mais ce qui fonctionne parfaitement à partir de la ligne de commande ne fonctionne pas en java...
java.io.IOException: Cannot run program "/usr/bin/libreoffice --headless --convert-to pdf:'writer_pdf_Export' --outdir /home/develop/tomcat/mf/ROOT/private/docs/0 /home/develop/tomcat/mf/ROOT/private/docs/0/35_invoice.fodt": java.io.IOException: error=2, No such file or directory
J'ai suivi de nombreux howtos et des approches différentes, mais les résultats sont toujours les mêmes.
La commande:
"/usr/bin/libreoffice --headless --convert-to pdf:'writer_pdf_Export' --outdir "+ getDestinationDirectory(order)+" "+getInvoiceFilename()+".fodt");
J'ai essayé tous dans une seule Chaîne et diviser en String[] trop. Dans le dernier cas, il se plaint du paramètre:
Unknown option: --convert-to pdf:'writer_pdf_Export' --outdir /home/develop/tomcat/mf/ROOT/private/docs/0 /home/develop/tomcat/mf/ROOT/private/docs/0/35_invoice.fodt
Voici un échantillon de la dernière épreuve
List<String> command = new ArrayList<String>();
command.add("/usr/bin/libreoffice");
command.add("--headless");
command.add("--convert-to pdf:'writer_pdf_Export' --outdir " + getDestinationDirectory(order) + " " + getInvoiceFilename() + ".fodt");
ProcessBuilder builder = new ProcessBuilder(command);
Process process = null;
try {
process = builder.start();
} catch (IOException ex) {
Logger.getLogger(Documents.class.getName()).log(Level.SEVERE, null, ex);
}
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
try {
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException ex) {
Logger.getLogger(Documents.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("Program terminated!");
Cette erreur est typique lorsque le fichier ou le répertoire que vous essayez de déplacer ou de faire quelque chose n'existe pas. Votre commande, est probablement correct, mais, votre fichier ou le chemin d'accès n'est pas arrivé de l'autre côté (chemin d'accès, par exemple).
OriginalL'auteur Azathoth | 2013-05-10
Vous devez vous connecter pour publier un commentaire.
Essayez ceci (keep it simple) ...
...
Il fonctionne à partir de la ligne de commande? J'ai trouvé ce bugs.freedesktop.org/show_bug.cgi?id=44486
Obtenez-vous le même message d'erreur lorsque vous lisez le processus de
InputStream
et le processusErrorStream
? VoirgetInputStream
etgetErrorStream
.Pouvez-vous
cd
ici/home/develop/tomcat/mf/ROOT/private/docs/0
? Quelles sont les autorisations sur le répertoire? ... et le fichier de sortie?Oui, via le shell fonctionne comme un charme. Supprimé les traits de soulignement, mais rien ne change. Mon utilisateur a r/w autorisations, oui. En fait, ce projet s'exécute localement avec netbeans+tomcat et ceux appartenant au même utilisateur
OriginalL'auteur xagyg
Au lieu de
essayez de diviser chacune des argv dans son propre appel pour ajouter
Noter qu'il n'y a pas d'apostrophes autour de "writer_pdf_Export" car ceux-ci sont shell méta-caractères et ne sont pas nécessaires lorsque vous êtes à la construction d'un tableau de passer à
exec
sans interposée shell.débarrassez-vous de vos apostrophes. Ceux-ci sont shell méta-caractères qui ne devrait pas être vu par l'libreoffice exécutable.
fait: option Inconnue: - convertir-pdf:writer_pdf_Export
Êtes-vous à l'aide de deux ajoute pour
--convert-to
et de l'extension:filtre argument? Avez-vous desfilters/writer_pdf_Export.xcu
sur votre système?Ce qui se passe quand vous remplacez ce
command.add("pdf:writer_pdf_Export");
aveccommand.add("pdf");
OriginalL'auteur Mike Samuel
J'ai essayé toutes les solutions proposées dans ce fil et il ne fonctionne pas.
Dans mon application (java application web à l'aide de TOMCAT sous linux) il ne fonctionne qu'à créer un script shell à exécuter le script. Mais vous devez mettre le chemin absolu du script, si non, il ne fonctionne pas ($HOME ne fonctionne pas). En outre, vous pouvez passer des arguments.
Exemple:
OriginalL'auteur er_benji