Convert HTML to PNG in Swift

2 min readAug 2, 2021


The PNG image format has many benefits, including displaying information and images without a degradation of quality. If you have an HTML document you need to transform into a user-friendly PNG image, we have a simple solution that will allow you to avoid the cumbersome manual conversion process of rendering the HTML, rasterizing it to an image, and splitting it by pages. By utilizing the following API in Swift, you will be able to automatically convert standard HTML to an array of PNG images, one for each page.

To call the conversion function, we simply need to input our file (or file URL) and API key into the following code:

import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
var semaphore = DispatchSemaphore (value: 0)let parameters = [
"key": "inputFile",
"src": "/path/to/file",
"type": "file"
]] as [[String : Any]]
let boundary = "Boundary-\(UUID().uuidString)"
var body = ""
var error: Error? = nil
for param in parameters {
if param["disabled"] == nil {
let paramName = param["key"]!
body += "--\(boundary)\r\n"
body += "Content-Disposition:form-data; name=\"\(paramName)\""
if param["contentType"] != nil {
body += "\r\nContent-Type: \(param["contentType"] as! String)"
let paramType = param["type"] as! String
if paramType == "text" {
let paramValue = param["value"] as! String
body += "\r\n\r\n\(paramValue)\r\n"
} else {
let paramSrc = param["src"] as! String
let fileData = try NSData(contentsOfFile:paramSrc, options:[]) as Data
let fileContent = String(data: fileData, encoding: .utf8)!
body += "; filename=\"\(paramSrc)\"\r\n"
+ "Content-Type: \"content-type header\"\r\n\r\n\(fileContent)\r\n"
body += "--\(boundary)--\r\n";
let postData = .utf8)
var request = URLRequest(url: URL(string: "")!,timeoutInterval: Double.infinity)
request.addValue("multipart/form-data", forHTTPHeaderField: "Content-Type")
request.addValue("YOUR-API-KEY-HERE", forHTTPHeaderField: "Apikey")
request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = postData
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
print(String(data: data, encoding: .utf8)!)

To use external files in your HTML, such as images, we recommend that you use an absolute URL of the file. If you need to obtain an API key for the operation, you can do so by registering for a free account on the Cloudmersive website; this provides 800 monthly calls across our library of APIs.




There’s an API for that. Cloudmersive is a leader in Highly Scalable Cloud APIs.