Bonjour,
je cherche à utiliser Ghostscript pour éclater un pdf en images jpeg. J'ai un code C++ qui fonctionne bien, que je souhaite transcrire en Java via JNA. Voici le code de ma lib :
et celui de la classe l'appelant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public interface GhostscriptLibrary extends Library { public GhostscriptLibrary INSTANCE = (GhostscriptLibrary) Native.loadLibrary("gsdll32", GhostscriptLibrary.class); // int gsapi_new_instance (void **pinstance, void *caller_handle); public int gsapi_new_instance(PointerByReference instance, Pointer caller_handler); // void gsapi_delete_instance (void *instance); public void gsapi_delete_instance(Pointer instance); // int gsapi_init_with_args (void *instance, int argc, char **argv); public int gsapi_init_with_args(Pointer instance, int argc, String[] argv); // int gsapi_exit (void *instance); public int gsapi_exit(Pointer instance); }
Lors de l'exécution, j'ai systématiquement un crash lors de l'appel à gsapi_init_with_args, mais je ne comprends pas trop pourquoi (visiblement un problème de pointeur ne sachant pas pointer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public class PdfExtractor { public void extractPdf(String pdfPath) { GhostscriptLibrary gs = GhostscriptLibrary.INSTANCE; PointerByReference instancePointer = new PointerByReference(); gs.gsapi_new_instance(instancePointer, null); String[] argv = { "pdf2ps", "-dNOPAUSE", "-dBATCH", "-dSAFER", "-sDEVICE=jpeg", "-dJPEGQ=100", "-dCOLORSCREEN=true", "-dNOINTERPOLATE", "-dGraphicsAlphaBits=2", "C:\\tmp\\pdf\\test-gs-java-%d.jpg", "-r300x300", pdfPath }; gs.gsapi_init_with_args(instancePointer.getPointer(), argv.length, argv); gs.gsapi_exit(instancePointer.getPointer()); gs.gsapi_delete_instance(instancePointer.getPointer()); } }). Si je supprime les appels à gsapi_init_with_args et gsapi_exit, tout se passe bien.
Bref, si quelqu'un pouvait m'aider...
Merci d'avance !
Partager