Как решить проблему с поврежденным файлом pdf, если pdf сгенерирован из java-кода?

Я использую язык java для функции создания отчета в формате pdf, но мой отчет из jasper. Код Java будет запускаться через планировщик, а мой отчет в формате PDF будет автоматически сгенерирован планировщиком сервера рано утром. Проблема в том, что некоторые из моих сгенерированных PDF-файлов не удалось открыть. Это коррумпировано. Не все PDF-файлы сталкиваются с этой проблемой, только один или два PDF-файла будут повреждены.

Приведенный ниже код - это часть, в которой будет сгенерирован мой PDF-файл.

public static void saveFileFromUrlWithJavaIO(String fileName, String fileUrl)
        throws MalformedURLException, IOException {
    BufferedInputStream in = null;
    FileOutputStream fout = null;

    try {
        in = new BufferedInputStream(new URL(fileUrl).openStream());
        fout = new FileOutputStream(fileName);

        byte data[] = new byte[1024];
        int count;
        while ((count = in.read(data, 0, 1024)) != -1) {
            fout.write(data, 0, count);

        }
        fout.flush();
        logger.debug("ADD FLUSH");
    }catch(IOException e) {

        logger.debug("For exception: {}", e);
    }catch(Exception e) {
        logger.debug("For exception 123: {}", e);
    }  finally {
        if (in != null) {
            in.close();
        }
        if (fout != null) {
            fout.close();
        }
    }
}

Для информации, я уже вставил флеш в код, но файл все еще поврежден. Кто угодно может мне помочь, я очень признателен. Спасибо


person Nur    schedule 11.03.2020    source источник
comment
Пожалуйста, поделитесь таким битым pdf файлом для анализа.   -  person mkl    schedule 11.03.2020
comment
Я не знаю, как поделиться файлом здесь, но я могу сказать об ошибке при открытии pdf. Ошибка показывает: «Adobe Reader не может открыть файл, потому что это либо неподдерживаемый тип файла, либо файл был поврежден». Только несколько файлов будут повреждены. Но когда я запускаю его вручную, файл pdf будет сгенерирован и не поврежден в соответствии с запуском планировщика. Есть ли идея исправить мой код, чтобы предотвратить повреждение моего файла во время генерации? Таким образом, после запуска планировщика для создания PDF-файла его можно будет открыть.   -  person Nur    schedule 12.03.2020
comment
Первое, что нужно сделать, это проверить, каким образом они повреждены. Это может помочь в определении причины их повреждения, чтобы в конечном итоге исправить это. Вы делитесь файлами здесь, помещая их в общедоступный файловый ресурс (например, в googledrive или dropbox, пожалуйста, не используйте платформы для обмена файлами, которые заглушают загрузчик в рекламе или троянах) и размещая здесь URL-адрес.   -  person mkl    schedule 12.03.2020
comment
Привет уже вставляю в gdrive. вот ссылка: drive.google.com/file/d/1JA16LVTZB03/file/d/1JA16LXT0BZ1   -  person Nur    schedule 13.03.2020


Ответы (1)


Причина, по которой вы не можете открыть эти файлы PDF в средстве просмотра PDF (по крайней мере, в случае вашего примера файла), заключается в том, что файл не является файлом PDF для начала, он это файл HTML!

Точнее, TIBCO Jaspersoft: страница ошибок сервера JasperReports показывает

Сообщение об ошибке

На сервере произошла ошибка. Попробуйте еще раз или обратитесь к администраторам сайта. (UID ошибки: fcefabf1-6158-4549-969c-25c9ec4f9ba2)

Поэтому очень вероятно, что иногда создание ваших запланированных отчетов либо не выполняется, либо просто еще не завершено, когда ваш код Java пытается получить отчет.

person mkl    schedule 13.03.2020
comment
Ооо, я вижу. Значит, из моего Java-кода мне не нужно было его менять? Так мне нужно изменить свой код яшмы, не так ли? - person Nur; 13.03.2020
comment
Я не знаю, что именно вызвало ошибку на сервере. Но на самом деле, очевидно, вам не нужно изменять приведенный выше Java-код, а изменять расписание или что-то еще на стороне Jasper. Тем не менее, вы, конечно, можете добавить проверку работоспособности в Java-код: если загруженный вами файл отчета начинается с% PDF-, скорее всего, все в порядке; в противном случае, скорее всего, была проблема. В последнем случае вы, вероятно, можете вызвать для себя какой-то сигнал. - person mkl; 13.03.2020
comment
Привет, не могли бы вы мне помочь: stackoverflow.com/questions/60738068/ - person Butani Vijay; 19.03.2020
comment
@Nur Разрешил ли мой ответ ваш вопрос? В этом случае отметьте ответ как принятый (т. Е. Щелкните галочку в верхнем левом углу). - person mkl; 19.03.2020