# GraphicsMagick & Java auf dem MAC



## jhartlep (13. Januar 2011)

Moin,
wir erstellen über graphicsmagick in Java aus PDF-Dateien GIF-Bilder.

Unter Windows XP bzw. Linux funktioniert es auch alles ohne Probleme. Aber auf unseren Mac-Systemen tut sich leider nix...
Hier ein Auszug aus unserem Quellcode:


```
String cmd = "gm convert -resize 200% -border 1x1 -bordercolor 'red' test.pdf test.gif";
//String[] cmd = { path + "/gm.sh", "200%", "1x1", "red", "test.pdf", "test.gif" };
try
{
   Process gmProcess = Runtime.getRuntime().exec(cmd);
   gmProcess.waitFor();
}
catch ...
```

Ich habe auch schon versucht, das ganze über ein shell-Skript aufzurufen. Dazu habe ich mir den o.g. Befehl in ein entsprechendes Skript kopiert.
Egal was ich ausprobiere, das GIF-Bild wird nicht erstellt. Wenn ich das ganze über die Konsole ausführe, funktioniert alles prima.
Ich habe auch schon von der im4java - Bibliothek gehört aber wir würden lieber ohne zusätzliche Bibliothek auskommen...

Könnt Ihr mir hier weiterhelfen?


----------



## benjamin10 (13. Januar 2011)

Hallo,

hast du es schonmal mit dem ProcessBuilder probiert?


```
new ProcessBuilder("gm", "convert", "-resize", "200%", "-border", "1x1", "-bordercolor", "'red'", "test.pdf", "test.gif").start().waitFor();
```

Gruß
Ben


----------



## jhartlep (13. Januar 2011)

Hi Ben,
danke für den Tipp - leider hat es nicht geholfen...



> java.io.IOException: Cannot run program "gm": error=2, No such file or directory



Selbst mit dem absoluten Pfad anstelle von "gm" bekomme ich die selbe Exception - dann allerdings mit dem Pfad... :S


----------



## benjamin10 (13. Januar 2011)

Hallo,

anstelle von gm.sh, könntest du auch mal /usr/bin/convert aufrufen. Wird das Programm gefunden?
(ich weiß halt nicht, wohin du deinen ImageMagick installiert hast) 

Gruß Ben


----------



## jhartlep (13. Januar 2011)

Ob ich nun ImageMagick mit convert benutze, oder GraphicsMagick mit gm, ist von der Shell egal... Installiert ist beides... In der gm.sh habe ich nur den "gm convert" - Befehl eingebaut...

Mich wundert es, daß ich aus der Konsole ohne absolute Pfadangaben die PDFs konvertieren kann, es aber in Java die Exception gibt...


----------



## benjamin10 (13. Januar 2011)

Also ich habe den Befehl erfolgreich testen können:


```
new ProcessBuilder("<Pfad/zu/convert>", "-resize", "200%", "-border", "1x1", "-bordercolor", "'red'", "test.pdf", "test.gif").start().waitFor();
```

Wenn du nicht mit absoluten Pfadangaben hantieren möchtest, ist die Seite eventuell empfehlenswert:

http://weblog.dangertree.net/2007/04/13/changing-path-and-environment-in-java-processbuilder/

Gruß
Ben


----------



## jhartlep (13. Januar 2011)

Habe jetzt grad nochmal den Befehl getestet:

```
new ProcessBuilder("/opt/local/bin/convert", ...).start().waitFor();
```
Ich bekomme zwar keine Exception mehr, aber das GIF-Bild wird auch nicht erstellt...
Wieso muß der Mac hier so rumzicken :S

//EDIT:
*narf* ok, der absolute convert-path geht... hatte nen "/" vergessen....
allerdings habe ich jetzt ein anderes Problem:

Das PDF wird mit der PDFlib im ersten Schritt mit einigen Texten aufgefüllt. Das klappt auch bestens. Das PDF enthält alle Texte. Nach der Konvertierung sind diese, mit der PDFlib im PDF nachträglich eingefügten Texte nicht mehr vorhanden...


----------



## benjamin10 (13. Januar 2011)

Hallo,

hier kann ich leider nur vermuten: Hast du sichergestellt, dass die Konvertierung erst startet, nachdem die PDF mit Texten aufgefüllt wurde? Greifst du eventuell auf eine andere/veraltete PDF zurück?
Hast du mal probiert, ob du dir ImageMagick einen Fehler/eine Warnung wirft?

Z.B. so:


```
ProcessBuilder pb = new ProcessBuilder("<Pfad/zu/convert", "-resize", "200%", "-border", "1x1", "-bordercolor", "red", "<Pfad/zu/test.pdf>", "<Pfad/zu/test.gif>");
Process p = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line;
while ((line=br.readLine())!=null)
  System.out.println(line);
```

Gruß
Ben


----------



## jhartlep (13. Januar 2011)

Ja, ich habe geprüft, daß die Konvertierung erst nach der PDF-Erstellung startet.
Der Fehler tritt auch auf, wenn ich das erstellte PDF gesondert speichere und irgendwann später mit diesen Daten die Konvertierung durchführe...
Interessanterweise tritt NICHT auf, wenn ich den Befehl direkt aus der Console ausführe... Da muß also irgendetwas innerhalb von Java passieren...

//EDIT
Einen Fehler bekomme ich nicht ausgegeben...

//EDIT, die 2.
So, ich habe jetzt nochmal was anderes getestet:
Ich habe mir das PDF, welches ich auf dem Mac mit der PDFlib erstellt habe, auf meinen UbuntuVM gezogen und dort via Java mal die Konvertierung mit dem o.g. Befehl durchgeführt... Keine Fehler - Alles ist lesbar.
Starte ich die selbe Konvertierung mit der selben Datei auf dem Mac mit Java, sind die nachträglichen Texte nicht lesbar...
Ich hatte anfangs fehlende Schriftarten in Verdacht, aber dann dürfte der Text im PDF schon nicht lesbar sein...


----------



## zerix (14. Januar 2011)

Kommt immer noch dieser Fehler?


> java.io.IOException: Cannot run program "gm": error=2, No such file or directory



Gruß

Sascha


----------



## jhartlep (14. Januar 2011)

Nein, die Exception bekomme ich nicht mehr - ich habe jetzt "nur noch" den Fehler aus Antwort #9 Edit2... und das macht mir durchaus sorgen, da wir demnächst auf Mac-Server umstellen :S


----------

