Documentación

Reportes con origen JSON

Tú envías los datos. En lugar de que Quick Reports vaya a buscarlos, mandas el JSON en el cuerpo de una llamada POST y recibes de vuelta la dirección del reporte generado.

Antes de empezar

Una API Key activa Aquí viaja dentro del cuerpo, no en la URL. Generar la mía
Un DataSource JSON El reporte debe tener su origen de datos configurado como JSON en el diseñador, con la misma estructura que vas a enviar.
Este endpoint se comporta distinto a los demás: es POST y no devuelve el PDF directamente, sino un JSON con la url donde quedó el reporte.

El endpoint

Responde 200 con un JSON del que te interesa el campo url: ábrela o descárgala para obtener el PDF.

POST https://design.quickreport.net/Report/GeneratePDFFromJson
Campo del cuerpo Descripción
reportName Obligatorio El nombre con el que guardaste el reporte en el diseñador, sin espacios y sin la extensión .rexp.
source.ApiKey Obligatorio La clave de tu cuenta.
source.Data Obligatorio Los datos que alimentan el reporte, con la misma estructura que definiste en el DataSource JSON.
source.Parameters Los parámetros del reporte, si los tiene.

La cabecera Content-Type: application/json es obligatoria.

Ejemplos

El mismo llamado en cuatro entornos. Reemplaza la clave, el nombre del reporte y los datos por los tuyos.

// Define los parámetros necesarios
const apiKey = "yourApiKeyHere";
const reportName = "yourReportNameHere"; // sin espacios y sin la extensión .rexp

// Arma el cuerpo de la solicitud
const body = {
  source: {
    ApiKey: apiKey,
    Data: { key1: "value1", key2: "value2" },        // los datos del reporte
    Parameters: { param1: "value1", param2: "value2" } // los parámetros, si los tiene
  },
  reportName: reportName
};

const url = `https://design.quickreport.net/Report/GeneratePDFFromJson`;

// Realiza la solicitud POST
fetch(url, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(body)
})
  .then(response => {
    if (!response.ok) {
      throw new Error("Error al generar el reporte PDF");
    }
    return response.json(); // La respuesta es JSON, no el PDF
  })
  .then(data => {
    console.log("URL del reporte:", data.url);
    window.open(data.url, "_blank"); // Abre el reporte en una nueva pestaña
  })
  .catch(error => {
    console.error("Error:", error);
  });
[HttpPost("CallGeneratePDFFromJson")]
public async Task<IActionResult> CallGeneratePDFFromJson(string apiKey, string reportName)
{
    // Construye la URL del endpoint
    string baseUrl = "https://design.quickreport.net";
    string url = $"{baseUrl}/Report/GeneratePDFFromJson";

    // Define el cuerpo de la solicitud
    var source = new
    {
        ApiKey = apiKey,
        Data = new { key1 = "value1", key2 = "value2" },          // los datos del reporte
        Parameters = new { param1 = "value1", param2 = "value2" } // los parámetros, si los tiene
    };

    var requestBody = new { source, reportName };

    // Serializa el cuerpo a JSON
    var jsonContent = new StringContent(
        JsonSerializer.Serialize(requestBody), Encoding.UTF8, "application/json");

    var client = _httpClientFactory.CreateClient();

    try
    {
        var response = await client.PostAsync(url, jsonContent);

        if (response.IsSuccessStatusCode)
        {
            // La respuesta trae la url del reporte generado
            var responseData = await response.Content.ReadAsStringAsync();
            var result = JsonSerializer.Deserialize<dynamic>(responseData);
            return Ok(result);
        }

        return BadRequest($"Error al generar el reporte: {response.StatusCode} - {response.ReasonPhrase}");
    }
    catch (Exception ex)
    {
        return StatusCode(500, $"Error interno: {ex.Message}");
    }
}
<?php
// Define la URL base y los parámetros
$baseUrl = "https://design.quickreport.net";
$apiKey = "yourApiKeyHere";
$reportName = "yourReportNameHere"; // sin espacios y sin la extensión .rexp

// Define el cuerpo de la solicitud
$source = [
    "ApiKey" => $apiKey,
    "Data" => ["key1" => "value1", "key2" => "value2"],           // los datos del reporte
    "Parameters" => ["param1" => "value1", "param2" => "value2"]  // los parámetros, si los tiene
];

$data = json_encode(["source" => $source, "reportName" => $reportName]);

// Inicializa cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $baseUrl . "/Report/GeneratePDFFromJson");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo "Error: " . curl_error($ch);
} else {
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if ($httpCode == 200) {
        $responseData = json_decode($response, true);
        echo "URL del reporte: " . $responseData["url"];
    } else {
        echo "Error al generar el reporte. Código HTTP: " . $httpCode;
    }
}

curl_close($ch);
curl -X POST "https://design.quickreport.net/Report/GeneratePDFFromJson" \
  -H "Content-Type: application/json" \
  -d '{
    "source": {
      "ApiKey": "yourApiKeyHere",
      "Data": {
        "key1": "value1",
        "key2": "value2"
      },
      "Parameters": {
        "param1": "value1",
        "param2": "value2"
      }
    },
    "reportName": "yourReportNameHere"
  }'

La respuesta es un JSON con el campo url, no el PDF.

Verlo en acción

Cómo usar un JSON como origen de datos Video corto que recorre el diseñador de principio a fin.

Otros orígenes