Как загрузить файл из генератора PDF-файлов в локальный клиент в Go и React - PullRequest
0 голосов
/ 12 февраля 2020

я создаю сервис для генерации pdf-файла с go-wkhtmltopdf

это функция

func Pdf() func(c *gin.Context) {
    return func(c *gin.Context) {
        // download wkhtmltopdf and set that wkhtmltopdf on below
        wkhtmltopdf.SetPath("/usr/local/bin/wkhtmltopdf")
        type ReqHtml struct {
            Html string `json:"html"`
        }
        var html ReqHtml
        _ = c.BindJSON(&html)

        pdfg, err := wkhtmltopdf.NewPDFGenerator()
        if err != nil {
            log.Fatal(err)
        }

        page := wkhtmltopdf.NewPageReader(strings.NewReader(html.Html))
        pdfg.Orientation.Set(wkhtmltopdf.OrientationPortrait)
        page.FooterRight.Set("[page]")
        page.FooterFontSize.Set(10)

        pdfg.AddPage(page)

        err = pdfg.Create()
        if err != nil {
            log.Println(err)
        }
        err = pdfg.WriteFile("./myPdf.pdf")
        if err != nil {
            log.Fatal(err)
        }

    }
}

, что Writefile записывает файл на мой сервер root, как сделать клиент скачать его?

скажем, у меня есть <button> download file </button>

я должен дать клиенту ответ с буфером этого результата? или что?

1 Ответ

0 голосов
/ 12 февраля 2020

Просто отправьте буфер клиенту и используйте эту функцию для загрузки файла (пример кода React):

prepareDocForDownload = result => {
    const length = Object.entries(result.data).length;
    let bytes = new Uint8Array(length);

    for (let i=0; i<length; i++) {
      bytes[i] = result.data[i];
    }

    const file = new Blob(
      [bytes.buffer],
      {type: 'application/pdf'});

    const fileURL = URL.createObjectURL(file);

    const link = document.createElement('a');
    link.href = fileURL;
    link.setAttribute('download', 'file.pdf');
    document.body.appendChild(link);
    link.click();
  };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...