Compare commits
11 Commits
dev/no_doc
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 8a4cb3964e | |||
|
|
8b0204a344 | ||
|
|
68a19230ed | ||
|
|
b37aebd4ba | ||
| e072c77c69 | |||
| c6e7e88c06 | |||
| f25040b4d7 | |||
| 4998bb0c85 | |||
| 28597979a7 | |||
|
|
ce15e86252 | ||
|
|
7795ba0703 |
@@ -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
|
||||
|
||||
21
pdf/views.py
21
pdf/views.py
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user