Как преобразовать файл .pptx в строку base64? - PullRequest
0 голосов
/ 05 ноября 2019

Так что для проекта, над которым я работаю, я должен сделать дополнение для Office. В этом дополнении мне нужно открыть другие файлы PPTX из дополнения. Я обнаружил, что мне нужно использовать base64 для функции PowerPoint.createPresentation (). Когда я жестко кодирую строку base64, она работает, но мне нужно сгенерировать строку из файла, выбранного пользователем, который извлекается с сервера.

Если честно, я не очень много пробовал. Я все еще довольно плохо знаком с программированием и нашел вещи онлайн. Я нашел что-то в Интернете, но понятия не имею, как это реализовать. Большинство результатов, которые я получил, были с Javascript. Я знаю, что он должен работать внутри Typescript, но, как я уже говорил, я понятия не имею, как реализовать его в виде кода JavaScript или кода машинописи.

Текущая ситуация такова, что я получаю строку Base64 из массива. Когда пользователь выбирает опцию, выбранный pptx открывается. Строка в настоящее время жестко запрограммирована в.

HTML:

<div *ngFor="let template of templates">
  <button (click)="onClickOpenTemplate(template.src)">
    <img src="{{ template.img }}" alt="">
    <h3>{{ template.name }}</h3>
  </button>
</div>

Машинопись:

templates: any[] = [
  {
    src: 'base64string',
    name: 'filename',
    img: 'imgPath'
  },
  {
    src: 'base64string',
    name: 'filename',
    img: 'imgPath'
  },
];

async onCreateOpenPresentation(template) {
    PowerPoint.createPresentation(template);
}

Результат, который я хотел бы получить, заключается в том, что при нажатии кнопки, функция получит файл pptx, преобразует его в base64, а затем откроет его в новом окне powerpoint вместо жестко закодированной строки base64.

Редактировать: я пытался найти какой-то код, найденный где-то

// window.open(template);
    // tslint:disable-next-line: prefer-const
    let ActiveXObject: (type: string) => void;
    try {
      const fso = new ActiveXObject('Scripting.FileSystemObject');
      const file = fso.OpenTextFile(template, 1);
      const fileContent = file.ReadAll();
      file.Close();
      return fileContent;
      } catch (e) {
      if (e.number === -2146827859) {
        alert('Unable to access local files due to browser security settings. ' +
        'To overcome this, go to Tools->Internet Options->Security->Custom Level. ' +
        // tslint:disable-next-line: max-line-length
        'Find the setting for "Initialize and script ActiveX controls not marked as safe" and change it to "Enable" or "Prompt"');
      }
    }
    const templateBase64 = window.btoa(fileContent);
    console.log(templateBase64);
    PowerPoint.createPresentation(templateBase64);

Но, к сожалению, fileContent в window.btao () не распознается. У кого-нибудь сейчас как можно это исправить?

1 Ответ

0 голосов
/ 05 ноября 2019

Если я правильно понял ваш вопрос, вы хотите прочитать файл по нажатию кнопки, преобразовать его в строку base64 и передать его в функцию Powerpoint. Вот ванильное решение Javascript, к которому вы можете обратиться;конвертировать этот код в Typescript не составляет особого труда.

Преобразование входного файла в Base64 в Angular 2 без использования FileReader In Ionic V2

...