Создание PDF-файла с помощью Swift в Ubuntu - PullRequest
0 голосов
/ 11 мая 2018

У меня есть приложение Swift / Vapor, работающее на Ubuntu.Он отвечает и возвращает JSON, то есть чистый RESTful-сервер.

Я ищу возможность добавить некоторые функции, позволяющие создавать PDF-файл, а затем отправляет его обратно клиенту (веб-браузер).в ответ на какой-то запрос.

Может ли кто-нибудь порекомендовать лучший способ создания PDF-файла на сервере для отправки обратно?

1 Ответ

0 голосов
/ 13 мая 2018

Я попробовал wkhtmltopdf, но не смог заставить его работать удовлетворительно. Теперь я использую weasyprint как на MacOS, так и на Ubuntu (на Raspberry Pi).

Я использую эту функцию:

 func generateWeasy(html: Bytes) -> Bytes {
  // Fetch a PDF from WeasyPrint and return it
  let weasy = Process()
  let input = Pipe()
  let output = Pipe()
  let htmlData = Data(html)
  weasy.standardInput = input
  weasy.standardOutput = output
  weasy.launchPath = "/usr/local/bin/weasyprint"
  weasy.arguments = ["-f", "pdf", "-", "-"]
  weasy.launch()
  input.fileHandleForWriting.write(htmlData)
  input.fileHandleForWriting.closeFile()
  return output.fileHandleForReading.readDataToEndOfFile().makeBytes()
}

Затем для рендеринга вида в PDF я использую стандартный лист внутри маршрута:

html = try self.view.make("pdfCertificate", settings).makeBytes()

Затем я изменяю заголовок ответа и генерирую PDF:

let response = Response(status: .ok, body: .data( self.generateWeasy( html:html )))
response.headers["Content-Disposition"] = "filename=\"" + title + " - Certificates.pdf\""
return response
...