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.