Имя файла становится неправильным, когда в pdfmake есть специальные символы - PullRequest
0 голосов
/ 09 мая 2019

Я хочу скачать файл PDF с помощью библиотеки pdfmake. Но у меня есть случай, когда имя файла может содержать специальные символы (",?, <,>, *). В Edge Browser, когда я загружаю pdf-файл, он загружается с неправильным именем. Пример,

function downloadPdf () {
    pdfMake.fonts = {
        ArialUnicode: {normal: "arialunicode.ttf"}
    };

    var docDefinition = {
        content: [
            {text:"This is a sample text."}
        ],
        defaultStyle: {font: "ArialUnicode"}
    };

    pdfMake.createPdf(docDefinition).download('"sample".pdf');
}

В этом примере Chrome и Firefox загружают pdf с именем _sample_.pdf, но в браузере MS Edge он загружается с 6c94f320-8f12-4722-8f44-23da34d663c1.pdf.

Это проблема с браузером или pdfmake? Я думаю, что pdfmake внутренне использует filesaver.js для загрузки данных BLOB-объектов на стороне клиента. Так какое исправление мне нужно сделать?

Заранее спасибо.

1 Ответ

0 голосов
/ 09 мая 2019

Я создал демо для вас, используя ваш код. В этой демонстрации есть 2 кнопки. На первой кнопке находится точно такой же код JavaScript, который вы упомянули в своем вопросе в ответе. Я только что удалил двойные кавычки из имени.

Другими словами, я изменил download('"sample".pdf') с download('sample.pdf'), и он отлично работает в Edge для меня. Вы можете попробовать это сами.

function downloadPdf() {
//    pdfMake.fonts = {
//        ArialUnicode: {normal: "arialunicode.ttf"}
//    };

    var docDefinition = {
        content: [
            {text:"This is a sample text."}
        ],
        defaultStyle: {
//            font: "ArialUnicode"
        }
    };

    pdfMake.createPdf(docDefinition).download('"sample".pdf');
}

function downloadPdfUpdated() {
//    pdfMake.fonts = {
//        ArialUnicode: {normal: "arialunicode.ttf"}
//    };

    var docDefinition = {
        content: [
            {text:"This is a sample text."}
        ],
        defaultStyle: {
//            font: "ArialUnicode"
        }
    };
    var fileName = '"sample".pdf';
    fileName = fileName.split(/\.(?=[^\.]+$)/)[0].replace(/[^a-z0-9]/gi, '_').toLowerCase();
  pdfMake.createPdf(docDefinition).download(fileName);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.56/pdfmake.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.56/vfs_fonts.js"></script>
<button onclick="downloadPdf()">PDF with your code</button>
<button onclick="downloadPdfUpdated()">PDF with updated code</button>

Пример кодекса

...