Преобразование формата base64 в pdf в java: вывод поврежденного файла - PullRequest
0 голосов
/ 14 июля 2020

Я могу создать файл pdf, но когда я пытаюсь открыть выходной файл pdf, я получаю сообщение об ошибке: «файл поврежден» Вот мой код, пожалуйста, помогите мне.

String  encodedBytes= "QmFzZTY0IGVuY29kaW5nIHNjaGVtZXMgYXJlIHVzZWQgd2hlbiBiaW5hcnkgZGF0YSBuZWVkcyB0byBiZSBzdG9yZWQgb3IgdHJhbnNmZXJyZWQgYXMgdGV4dHVhbCBkYXRh"; 

BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);
File file = new File("C:/Users/istest/Documents/test.pdf");

FileOutputStream fos = new FileOutputStream(file);
fos.write(decodedBytes);

1 Ответ

1 голос
/ 14 июля 2020

Ваша строка не является допустимым файлом PDF. Файл pdf должен начинаться с правильного Magi c числа (см. Раздел Индикаторы формата этой ссылки)

PDF-файлы начинаются с «% PDF» (шестнадцатеричное 25 50 44 46).

или в Base64: JVBERi

, если вы попробуете свой код с допустимой строкой в ​​кодировке PDF например, этот , это может сработать.

Но поскольку вы не предоставили код своего класса BASE64Decoder, трудно быть уверенным, что он будет работать.

По этой причине, вот простая реализация пакета java.util.Base64 (Предупреждение не копируйте / пропускайте этот пример и не пробуйте его перед изменением данной строки base64 здесь с правильным, как указано в предыдущей ссылке ... как указано в нижеследующем комментарии, для того, чтобы быть коротким, правильная строка была заменена поврежденной)


import java.io.File;
import java.io.FileOutputStream;
import java.util.Base64;

class Base64DecodePdf {
  public static void main(String[] args) {
    File file = new File("./test.pdf");

    try ( FileOutputStream fos = new FileOutputStream(file); ) {
      // To be short I use a corrupted PDF string, so make sure to use a valid one if you want to preview the PDF file
      String b64 = "JVBERi0xLjUKJYCBgoMKMSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgMTQxL04gMjAvTGVuZ3==";
      byte[] decoder = Base64.getDecoder().decode(b64);

      fos.write(decoder);
      System.out.println("PDF File Saved");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

Кредит: источник .

...