Compare commits

11 Commits

Author SHA1 Message Date
8a4cb3964e Actualizar README.md 2026-08-11 01:53:55 -04:00
juse
8b0204a344 ajuste de tabla 2026-08-08 21:54:13 -04:00
juse
68a19230ed ajuste de medios adjuntos 2026-08-08 21:25:24 -04:00
juse
b37aebd4ba Ajuste del enlace con minIO 2026-08-07 23:40:23 -04:00
e072c77c69 Actualizar README.md 2026-08-07 21:04:36 -04:00
c6e7e88c06 Actualizar README.md 2026-08-07 20:53:56 -04:00
f25040b4d7 Actualizar README.md 2026-08-07 20:52:44 -04:00
4998bb0c85 Actualizar README.md 2026-08-07 20:52:02 -04:00
28597979a7 Actualizar README.md 2026-08-07 20:48:01 -04:00
Juan Burgos
ce15e86252 Guía actualizada 2026-08-08 00:42:42 +00:00
Juan Burgos
7795ba0703 Protección del token de mapbox 2026-08-07 23:32:37 +00:00
5 changed files with 33 additions and 24 deletions

View File

@@ -1,4 +1,6 @@
# exportPDF
> **Precaución:**
> Para instalar en modo desarrollo utilize la rama dev/no_docker
Funcionalidad para implementar la capacidad de exportar los datos de un recurso a formato PDF.
Los modelos de recursos habilitados para la función son los siguientes:
@@ -13,7 +15,7 @@ Procedimiento válido para un proyecto en modo desarrollo implementado con un en
Para el caso de un enfoque utilizando contenedores o en modo Producción, el proceso varía levemente.
### 0. Instalar dependencias y librerias de python (servidor Ubuntu)
Solo en caso de que su proyecto de arches resida en una implementación según la guía oficial de archesproject
Solo en caso de que su proyecto de arches haya sido desplegado según la guía oficial de archesproject si desplegó según las guías del repositorio gitea.patrimonio.org.bo, no necesita instalar las dependencias de ubuntu
```shell
sudo apt install build-essential python3.12-dev python3.12-pip python3.12-setuptools python3.12-wheel python3.12-cffi

View File

@@ -12,6 +12,8 @@ from zoneinfo import ZoneInfo
from functools import reduce
from operator import getitem
from pypdf import PdfReader, PdfWriter
from django.conf import settings
import boto3
import urllib.parse
import requests
import base64
@@ -216,9 +218,20 @@ def export_resource_pdf(request, resourceid, printubic, satmap, printimgs, print
for medio in reduce(getitem, ruta_medios[:-1], resource_data)[ruta_medios[-1]] :
if medio['formato'] == 'application/pdf' :
try :
response = requests.get(f'{sprpcb_url}{medio["url"]}', timeout=10)
response.raise_for_status()
remote_pdf_stream = io.BytesIO(response.content)
minio_bucket=settings.AWS_STORAGE_BUCKET_NAME
s3_client = boto3.client('s3',
endpoint_url=settings.AWS_S3_ENDPOINT_URL,
aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY
)
pdf_s3_url = s3_client.generate_presigned_url(
'get_object',
Params={'Bucket': minio_bucket, 'Key': f'uploadedfiles/{medio["file"]}'},
ExpiresIn=3600
)
response_s3 = requests.get(pdf_s3_url, timeout=10)
response_s3.raise_for_status()
remote_pdf_stream = io.BytesIO(response_s3.content)
merger.append(remote_pdf_stream)
remote_pdf_stream.close()
except requests.RequestException as e:
@@ -231,4 +244,4 @@ def export_resource_pdf(request, resourceid, printubic, satmap, printimgs, print
response = HttpResponse(output_buffer.read(), content_type='application/pdf')
response['Content-Disposition'] = f'attachment; filename="{nombre_pdf}.pdf"'
return response
return response

View File

@@ -30,7 +30,7 @@
.rtable{margin:0 0 0 30px;table-layout: fixed;width:95%;display:table; border:1px solid var(--ceniza)}
.rrow{display:table-row; flex-direction:row }
.rcol-larga{width: auto;}.rcol-media{width: 25%;}.rcol-corta{width: 10%;}
.rcol-larga{width: auto;}.rcol-media{width: 22%;}.rcol-corta{width: 10%;}
.rcell{padding:3px 6px;display:table-cell;border:1px solid var(--ceniza)}
.rrow.rheader{ background-color: solid var(--ceniza); border:1px solid var(--ceniza)}
.rrow.rheader .rcell{font-weight:600; border-bottom: 1px solid var(--ceniza);}
@@ -418,12 +418,10 @@
<div class="tile-block">
<div class="tile-title">Medios adjuntos</div>
{% if resource_data|has_key:"Recursos" %}
<div class="flex-container">
<div class="tiles-grid-grp">
{% for medio in resource_data|val_from_key:'Recursos'|val_from_key:'Medio de información' %}
<div class="flex-item">
<div class="data-row" style="margin-left: 15px;">
<a href={{resource.sprpcb_url}}{{ medio.url }} >{{ medio.tipo }} : {{ medio|val_from_key:'@value' }} ({{ medio.formato|slice:"-4:" }})</a>
</div>
<div class="data-row" style="margin-left: 15px; padding: 0;">
<a href={{resource.sprpcb_url}}{{ medio.url }} >{{ medio.tipo }} : {{ medio|val_from_key:'@value' }} ({{ medio.formato|slice:"-4:" }})</a>
</div>
{% endfor %}
</div>
@@ -474,4 +472,4 @@
</body>
{% endwith %}
{% endfor %}
</html>
</html>

View File

@@ -312,12 +312,10 @@
<div class="tile-block">
<div class="tile-title">Medios adjuntos</div>
{% if resource_data|has_key:"Recursos adjuntos" %}
<div class="flex-container">
<div class="tiles-grid-grp">
{% for medio in resource_data|val_from_key:'Recursos adjuntos'|val_from_key:'Medio de información' %}
<div class="flex-item">
<div class="data-row" style="margin-left: 15px;">
<a href={{resource.sprpcb_url}}{{ medio.url }} >{{ medio.tipo }} : {{ medio|val_from_key:'@value' }} ({{ medio.formato|slice:"-4:" }})</a>
</div>
<div class="data-row" style="margin-left: 15px; padding: 0;">
<a href={{resource.sprpcb_url}}{{ medio.url }} >{{ medio.tipo }} : {{ medio|val_from_key:'@value' }} ({{ medio.formato|slice:"-4:" }})</a>
</div>
{% endfor %}
</div>
@@ -365,4 +363,4 @@
</body>
{% endwith %}
{% endfor %}
</html>
</html>

View File

@@ -253,12 +253,10 @@
<div class="tile-block">
<div class="tile-title">Medios adjuntos</div>
{% if resource_data|has_key:"Información gráfica" %}
<div class="flex-container">
<div class="tiles-grid-grp">
{% for medio in resource_data|val_from_key:'Información gráfica'|val_from_key:'Medio de información' %}
<div class="flex-item">
<div class="data-row" style="margin-left: 15px;">
<a href={{resource.sprpcb_url}}{{ medio.url }} >{{ medio.tipo }} : {{ medio|val_from_key:'@value' }} ({{ medio.formato|slice:"-4:" }})</a>
</div>
<div class="data-row" style="margin-left: 15px; padding: 0;">
<a href={{resource.sprpcb_url}}{{ medio.url }} >{{ medio.tipo }} : {{ medio|val_from_key:'@value' }} ({{ medio.formato|slice:"-4:" }})</a>
</div>
{% endfor %}
</div>
@@ -310,4 +308,4 @@
</body>
{% endwith %}
{% endfor %}
</html>
</html>