Kłopot z wywołaniem Ghostscript'a

0

Witam,
Korzystając z GhostScript'a chcę zmniejszyć rozmiar plików pdf.
Poniżej wklejam procedurę którą do tego wykorzystuje. Jednak mam następujący problem - gdy przetwarzam "małe" pliki pdf o rozmiarze ok. 5mb wszytko działa prawidłowo, natomiast gdy przetwarzam plik o rozmiarze 70mb program się "zawiesza" tzn. wywoływany jest Ghostscript, tworzony jest plik w lokalizacji docelowej o rozmiarze 0 i ten rozmiar nie przyrasta. Dopiero gdy zamknę okno z programem java plik jest dalej przetwarzany. Skąd bierze się ten przestój i konieczność zamknięcia okna programu?
Dla małych plików jest wszystko OK.

 public  void compres(File file, String pathOut) {
        StringBuilder sb = new StringBuilder();
        String ls = System.getProperty("line.separator");
        System.setProperty("jna.debug_load", "true");
        System.setProperty("jna.debug_load.jna", "true");
        
        String path = System.getProperty("user.dir")+"\\dll";
        System.setProperty("jna.library.path", path);
        System.out.println(path);
       
        String fileGS = null;
        
        if (System.getProperty("os.arch").equals("amd64")) {
            fileGS = "gswin64c.exe"; 
        }else{
            fileGS = "gswin32c.exe"; 
        };
        String inFile = file.getAbsolutePath();
        String name = file.getName();
        if(name.endsWith(".pdf")){
            System.out.println ("Kompresuje " + inFile);
            sb.append("Kompresuje ").append(inFile).append(ls);
       
            try {
               
                String outFile = pathOut+"out_"+name;
          
                System.out.println("Zapisuje plik: " + outFile);
                sb.append("Zapisuje plik: ").append(outFile).append(ls);
               
                String argum    = " -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dOverrideICC -dNOPAUSE -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=";
                
                String inFileName   = " " + inFile;
                String[] commands   = {"cmd", "/c", "start", "\"Kompresor\"",fileGS,argum,outFile,inFileName};
                String test = fileGS+argum+outFile+inFileName;
       
                Process p = Runtime.getRuntime().exec(test);
  
                sb.append("Zaczynam przetwarzac plik: ").append(outFile).append(ls);
                p.waitFor();
                sb.append("Koniec przetwarzania pliku plik: ").append(outFile).append(ls);
            
            } catch (IOException | InterruptedException e) {
                System.out.println("ERROR: " + e.getMessage());
                sb.append("ERROR: ").append(e.getMessage()).append(ls);
            } 
        }
        this.log = sb.toString();
    } 
0

70mb plik pdf przetwarzany w pamięci będzie zajmował kilka-kilkanaście razy więcej więc może javie brakować miejsca. Sprawdź ustawienia JVM i ewentualnie zwiększ limity pamięci.

1 użytkowników online, w tym zalogowanych: 0, gości: 1