- generazione del PDF riscritto totalmente

- ora è possibile generarlo anche da backend
- FIX: corretto la qualità del PDF e la dimensione non esatta in pixel...
This commit is contained in:
Surya Paolo
2025-05-29 18:23:02 +02:00
parent 884afe4eb5
commit 67aaf719f4
32 changed files with 2881 additions and 1748 deletions

View File

@@ -61,57 +61,57 @@ body {
font-family: 'DINPro-Condensed-Bold', sans-serif;
color: $colore_titolo_libro;
text-transform: uppercase;
margin-top: calc(5 * var(--scalecatalog) * 1px);
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(18 * var(--scalecatalog) * 1px);
margin-top: calc(5 * var(--scalecatalogy) * 1px);
margin-bottom: calc(5 * var(--scalecatalogy) * 1px);
font-size: calc(18 * var(--scalecatalogx) * 1px);
line-height: 100%;
font-weight: bold;
}
.book-author {
font-family: 'DINPro-Condensed-Regular', sans-serif;
font-size: calc(16 * var(--scalecatalog) * 1px);
font-size: calc(16 * var(--scalecatalogx) * 1px);
}
.book-descr {
font-family: 'DINPro-Condensed-Bold-Italic', sans-serif;
font-size: calc(16 * var(--scalecatalog) * 1px);
font-size: calc(16 * var(--scalecatalogx) * 1px);
}
.book-details {
font-family: 'DINPro-Condensed-Regular', sans-serif;
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(16 * var(--scalecatalog) * 1px);
margin-bottom: calc(5 * var(--scalecatalogy) * 1px);
font-size: calc(16 * var(--scalecatalogx) * 1px);
text-align: left !important;
&.big {
font-size: calc(22 * var(--scalecatalog) * 1px);
font-size: calc(22 * var(--scalecatalogx) * 1px);
}
}
.book-descr-estesa {
font-family: 'AGaramondPro-Regular', sans-serif;
font-size: calc(15 * var(--scalecatalog) * 1px);
font-size: calc(15 * var(--scalecatalogx) * 1px);
text-align: justify;
word-wrap: break-word;
}
.book-link {
font-style: italic;
font-size: calc(14 * var(--scalecatalog) * 1px);
font-size: calc(14 * var(--scalecatalogx) * 1px);
}
.book-novita {
font-size: calc(20 * var(--scalecatalog) * 1px);
font-size: calc(20 * var(--scalecatalogx) * 1px);
}
.book-text-up {
font-family: 'DINPro', sans-serif;
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(20 * var(--scalecatalog) * 1px);
height: calc(380 * var(--scalecatalog) * 1px);
margin-bottom: calc(5 * var(--scalecatalogy) * 1px);
font-size: calc(20 * var(--scalecatalogx) * 1px);
height: calc(380 * var(--scalecatalogy) * 1px);
line-height: 130%;
font-weight: bold;
@@ -122,22 +122,22 @@ body {
.book-text-down {
font-family: 'DINPro', sans-serif;
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
margin-bottom: calc(5 * var(--scalecatalogy) * 1px);
}
.book-pagina-title {
font-family: 'DINPro', sans-serif;
margin-top: calc(50 * var(--scalecatalog) * 1px);
margin-bottom: calc(0 * var(--scalecatalog) * 1px);
font-size: calc(30 * var(--scalecatalog) * 1px);
height: calc(50 * var(--scalecatalog) * 1px);
margin-top: calc(50 * var(--scalecatalogy) * 1px);
margin-bottom: calc(0 * var(--scalecatalogy) * 1px);
font-size: calc(30 * var(--scalecatalogx) * 1px);
height: calc(50 * var(--scalecatalogy) * 1px);
text-transform: uppercase;
font-weight: bold;
}
.book-pagina-title-footer {
font-family: 'DINPro', sans-serif;
font-size: calc(20 * var(--scalecatalog) * 1px) !important;
font-size: calc(20 * var(--scalecatalogx) * 1px) !important;
font-weight: bold;
text-transform: none;
}

File diff suppressed because it is too large Load Diff

View File

@@ -2,15 +2,15 @@
<q-page>
<div>
<div
v-if="ispageCatalogata"
v-if="ispageCatalogata && !optcatalogo.showOnlyCatalogoPDF"
class="text-bold text-h6 text-center text-blue"
>
{{ getTitoloCatalogo() }}
</div>
<div
v-if="
ispageCatalogata &&
(tools.isEditor() || tools.isCommerciale()) &&
ispageCatalogata && !optcatalogo.showOnlyCatalogoPDF
&& (tools.isEditor() || tools.isCommerciale()) &&
myCatalog?.referenti?.length > 0
"
class="text-h7 text-center text-red q-ma-sm"
@@ -19,6 +19,7 @@
<span class="text-bold">{{ getReferentiCatalogo() }}</span>
</div>
<q-tabs
v-if="!optcatalogo.showOnlyCatalogoPDF"
v-model="tabcatalogo"
dense
class="bg-green text-white"
@@ -77,7 +78,6 @@
<q-tab-panels
v-model="tabcatalogo"
animated
class=""
keep-alive
>
<q-tab-panel
@@ -135,7 +135,7 @@
</div>
<div
v-if="!generatinglist"
v-if="!generatinglist && !optcatalogo.showOnlyCatalogoPDF"
class="text-center q-py-sm prod_trov"
>
<div
@@ -248,13 +248,14 @@
<q-tab-panel
name="visu"
v-if="optcatalogo"
:style="{ 'padding': optcatalogo.showOnlyCatalogoPDF ? '0px !important' : '' }"
>
<q-inner-loading
id="spinner"
:showing="generatinglist"
>
</q-inner-loading>
<div class="row justify-center q-mx-auto bg-blue-1">
<div class="">
<div class="text-center">
<q-spinner
v-if="ismounting"
@@ -267,7 +268,7 @@
v-if="!ismounting"
class="panel"
>
<div class="container">
<div :class="{container: !optcatalogo.showOnlyCatalogoPDF}">
<q-tabs
v-model="tabvisu"
dense
@@ -315,6 +316,7 @@
</q-tabs>
<CTitleBanner
v-if="!optcatalogo.showOnlyCatalogoPDF"
v-show="tabcatalogo === 'visu' && !tools.isUtente() && arrProducts?.length > 0"
class="q-pa-xs"
title="Genera PDF"
@@ -349,7 +351,6 @@
{ label: 'Versione Stampabile', value: shared_consts.PREPARA_PDF.STAMPA },
]"
label="Seleziona Versione"
:disable="true"
emit-value
map-options
style="width: 300px"
@@ -375,30 +376,82 @@
:push="optcatalogo.indebug"
:color="optcatalogo.indebug ? `positive` : 'primary'"
></q-btn>
<q-input
v-if="optcatalogo.pdf && optcatalogo.indebug"
@update:model-value="modifElem"
v-model="ratioconvert"
label="Ratio Convert"
type="number"
step="0.01"
outlined
dense
style="width: 100px; margin-right: 10px"
></q-input>
<q-btn
v-if="
optcatalogo.pdf &&
!optcatalogo.generazionePDFInCorso &&
optcatalogo.indebug
"
:label="`CONVERTI VALORI`"
@click="convertiValori"
></q-btn>
<div
v-if="optcatalogo.indebug"
class="row justify-center"
>
<br />
<q-input
v-if="
optcatalogo.pdf &&
!optcatalogo.generazionePDFInCorso &&
optcatalogo.indebug
"
@update:model-value="modifElem"
v-model="ratioconvert"
label="Ratio Convert"
type="number"
step="0.01"
outlined
dense
style="width: 100px; margin-right: 10px"
></q-input>
<q-btn
v-if="
optcatalogo.pdf &&
!optcatalogo.generazionePDFInCorso &&
optcatalogo.indebug
"
:label="`CONVERTI VALORI`"
@click="convertiValori"
></q-btn>
</div>
<div v-if="optcatalogo.indebug">
Larghezza Pagina:
{{
tools.adjustSize(
optcatalogo,
optcatalogo.dimensioni_def?.pagina?.size?.width,
null,
true,
{ parteesternafissa: true }
)
}}<br />
Altezza Pagina:
{{
tools.adjustSize(
optcatalogo,
optcatalogo.dimensioni_def?.pagina?.size?.height,
null,
true,
{ parteesternafissa: true }
)
}}<br />
Margine
Top:
{{
tools.adjustSize(
optcatalogo,
optcatalogo.dimensioni_def?.pagina?.padding?.top,
null,
true,
{ paddingTop: true, parteesternafissa: true }
)
}} - Bottom:
{{
tools.adjustSize(
optcatalogo,
optcatalogo.dimensioni_def?.pagina?.padding?.bottom,
null,
true,
{ paddingBottom: true, parteesternafissa: true }
)
}}
</div>
</div>
<CTitleBanner
v-show="
tabcatalogo === 'visu' && !tools.isUtente() && arrProducts?.length > 0
tabcatalogo === 'visu' && tools.isAdmin() && arrProducts?.length > 0
"
class="q-pa-xs"
title="Configurazione"
@@ -438,11 +491,31 @@
rounded
style="width: 200px"
outlined
v-model="optcatalogo.areadistampa.scale"
v-model="optcatalogo.areadistampa.format_printable"
:options="tools.SelectListFormatPDF"
@update:model-value="modifElem"
dense
label="Formato:"
emit-value
map-options
>
</q-select>
<div v-if="optcatalogo.areadistampa.format_printable?.length > 1">
Ratio:
{{
optcatalogo.areadistampa.format_printable[0] /
optcatalogo.areadistampa.format_printable[1]
}}
</div>
<q-select
rounded
style="width: 200px"
outlined
v-model="optcatalogo.areadistampa.scalex"
:options="tools.SelectListScalePDF"
@update:model-value="modifElem"
dense
label="Scale:"
label="Scale X:"
emit-value
map-options
>
@@ -451,11 +524,37 @@
rounded
style="width: 200px"
outlined
v-model="optcatalogo.areadistampa.scale_printable"
v-model="optcatalogo.areadistampa.scaley"
:options="tools.SelectListScalePDF"
@update:model-value="modifElem"
dense
label="Scale per Stampa:"
label="Scale Y:"
emit-value
map-options
>
</q-select>
<q-select
rounded
style="width: 200px"
outlined
v-model="optcatalogo.areadistampa.scale_printablex"
:options="tools.SelectListScalePDF"
@update:model-value="modifElem"
dense
label="Scale X per Stampa:"
emit-value
map-options
>
</q-select>
<q-select
rounded
style="width: 200px"
outlined
v-model="optcatalogo.areadistampa.scale_printabley"
:options="tools.SelectListScalePDF"
@update:model-value="modifElem"
dense
label="Scale Y per Stampa:"
emit-value
map-options
>
@@ -521,121 +620,125 @@
<div v-if="strout">
{{ strout }}
</div>
<div v-if="myCatalog">
<div
v-if="myCatalog.pdf_generato"
class="bg-green-1 q-ma-sm q-pa-sm"
>
<div class="bg-blue-1 text-red text-bold text-h6 q-ma-sm q-pa-sm">
<strong>PDF generati Temporanei</strong>
</div>
<q-table
:rows="pdfRows"
:columns="pdfColumns"
flat
bordered
dense
row-key="name"
<CTitleBanner
v-show="
tabcatalogo === 'visu' && !tools.isUtente() && arrProducts?.length > 0
"
class="q-pa-xs"
title="Lista PDF"
bgcolor="bg-blue"
clcolor="text-white"
mystyle=""
myclass="myshad"
:canopen="true"
:visible="true"
>
<div v-if="myCatalog">
<div
v-if="myCatalog.pdf_generato"
class="bg-green-1 q-ma-sm q-pa-sm"
>
<template v-slot:body-cell-pdf="props">
<q-td :props="props">
<a
v-if="props.row.pdf"
:href="tools.getURLByHostAndFilePath(props.row.pdf)"
target="_blank"
class="text-bold"
>
{{ tools.getURLByHostAndFilePath(props.row.pdf) }}
</a>
<span v-else>-</span>
</q-td>
</template>
<template v-slot:body-cell-size="props">
<q-td :props="props">
{{ props.row.size ? (props.row.size) + ' MB' : '-' }}
</q-td>
</template>
<template v-slot:body-cell-data="props">
<q-td :props="props">
{{ tools.getstrDateTime(props.row.data) }}
</q-td>
</template>
<template v-slot:body-cell-azioni="props">
<q-td :props="props">
<q-btn
v-if="props.row.showButton"
rounded
color="positive"
size="md"
:label="props.row.buttonLabel"
@click="props.row.action"
/>
</q-td>
</template>
</q-table>
<div class="bg-red-1 q-pa-md q-mt-md">
<div class="bg-blue-1 text-green text-bold text-h6 q-ma-sm q-pa-sm">
<strong>PDF Pubblicati OnLine</strong>
<div class="bg-blue-1 text-red text-bold text-h6 q-ma-sm q-pa-sm">
<strong>PDF generati Temporanei</strong>
</div>
<table class="q-table q-table--flat q-table--dense q-ma-none q-pa-none">
<tbody>
<tr>
<td>
<strong>PDF OnLine:</strong>
</td>
<td>
<a
v-if="myCatalog.pdf_online"
:href="tools.getURLByHostAndFilePath(myCatalog.pdf_online)"
target="_blank"
class="text-bold"
>
{{ tools.getURLByHostAndFilePath(myCatalog.pdf_online) }}
</a>
<span v-else>-</span>
</td>
<td>
{{ myCatalog.pdf_online_size }} MB
</td>
<td>
{{ tools.getstrDateTime(myCatalog.data_online) }}
</td>
</tr>
<tr>
<td>
<strong>PDF OnLine Stampa:</strong>
</td>
<td>
<a
v-if="myCatalog.pdf_online_stampa"
:href="
tools.getURLByHostAndFilePath(myCatalog.pdf_online_stampa)
"
target="_blank"
class="text-bold"
>
{{ tools.getURLByHostAndFilePath(myCatalog.pdf_online_stampa) }}
</a>
<span v-else>-</span>
</td>
<td>
{{ myCatalog.pdf_online_stampa_size }} MB
</td>
<td>
{{ tools.getstrDateTime(myCatalog.data_online_stampa) }}
</td>
</tr>
</tbody>
</table>
<q-table
:rows="pdfRows"
:columns="pdfColumns"
flat
bordered
dense
row-key="name"
>
<template v-slot:body-cell-name="props">
<q-td :props="props">
<a
v-if="props.row.pdf"
:href="tools.getURLByHostAndFilePath(props.row.pdf)"
target="_blank"
class="text-bold"
>
{{ props.row.name }}
</a>
<span v-else>-</span>
</q-td>
</template>
<template v-slot:body-cell-size="props">
<q-td :props="props">
{{ props.row.size ? props.row.size + ' MB' : '-' }}
</q-td>
</template>
<template v-slot:body-cell-data="props">
<q-td :props="props">
{{ tools.getstrDateTime(props.row.data) }}
</q-td>
</template>
<template v-slot:body-cell-azioni="props">
<q-td :props="props">
<q-btn
v-if="props.row.showButton"
rounded
color="positive"
size="md"
:label="props.row.buttonLabel"
@click="props.row.action"
/>
</q-td>
</template>
</q-table>
<div class="bg-red-1 q-pa-md q-mt-md">
<div class="bg-blue-1 text-green text-bold text-h6 q-ma-sm q-pa-sm">
<strong>PDF Pubblicati OnLine</strong>
</div>
<table class="q-table q-table--flat q-table--dense q-ma-none q-pa-none">
<tbody>
<tr>
<td>
<strong
><a
v-if="myCatalog.pdf_online"
:href="tools.getURLByHostAndFilePath(myCatalog.pdf_online)"
target="_blank"
class="text-bold"
>PDF OnLine:</a
></strong
>
</td>
<td>{{ myCatalog.pdf_online_size }} MB</td>
<td>
{{ tools.getstrDateTime(myCatalog.data_online) }}
</td>
</tr>
<tr>
<td>
<strong
><a
v-if="myCatalog.pdf_online_stampa"
:href="
tools.getURLByHostAndFilePath(myCatalog.pdf_online_stampa)
"
target="_blank"
class="text-bold"
>PDF OnLine Stampa:</a
></strong
>
</td>
<td>{{ myCatalog.pdf_online_stampa_size }} MB</td>
<td>
{{ tools.getstrDateTime(myCatalog.data_online_stampa) }}
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</CTitleBanner>
</div>
</CTitleBanner>
@@ -803,9 +906,9 @@
></q-select>
</div>
<div class="text-center q-py-sm prod_trov">
<div class="text-center q-py-sm prod_trov" v-if="!optcatalogo.showOnlyCatalogoPDF">
<div
v-if="cat === '' && arrProducts.length === 0 && showListaFiltrata"
v-if="cat === '' && arrProducts.length === 0 && showListaFiltrata && !optcatalogo.showOnlyCatalogoPDF"
class="row justify-center text-h6"
>
Seleziona {{ filtroStrApplicato }}
@@ -918,6 +1021,7 @@
<div
v-else
class="cards-container"
id="tag-catalogo"
>
<!-- Itera sulle schede -->
<div
@@ -940,10 +1044,18 @@
}"
:style="generateStylePageScheda(optcatalogo, recscheda.scheda)"
>
<!--style {{generateStylePageScheda(optcatalogo, recscheda.scheda)}}-->
<div
v-if="recscheda.scheda.dimensioni.pagina?.testo_title?.contenuto"
:style="{
'--scalecatalog': tools.getScale(optcatalogo),
'--scalecatalogx': tools.getScaleX(
optcatalogo,
recscheda.scheda
),
'--scalecatalogy': tools.getScaleY(
optcatalogo,
recscheda.scheda
),
'line-height':
recscheda.scheda.dimensioni.pagina?.testo_title?.font
.line_height,
@@ -970,7 +1082,14 @@
<div
v-if="recscheda.scheda.dimensioni.pagina?.testo_up?.contenuto"
:style="{
'--scalecatalog': tools.getScale(optcatalogo),
'--scalecatalogx': tools.getScaleX(
optcatalogo,
recscheda.scheda
),
'--scalecatalogy': tools.getScaleY(
optcatalogo,
recscheda.scheda
),
'line-height':
recscheda.scheda.dimensioni.pagina?.testo_up?.font
.line_height,
@@ -988,13 +1107,20 @@
<div
v-if="recscheda.scheda?.dimensioni?.pagina?.testo_title"
:style="{
'--scalecatalog': tools.getScale(optcatalogo),
'--scalecatalogx': tools.getScaleX(
optcatalogo,
recscheda.scheda
),
'--scalecatalogy': tools.getScaleY(
optcatalogo,
recscheda.scheda
),
'line-height':
recscheda.scheda.dimensioni.pagina?.testo_title?.font
.line_height,
display: 'flex',
flexDirection: 'column',
position: 'absolute', // Posizione assoluta rispetto al contenitore padre
position: 'absolute', // Posizione assoluta rispetto al contenitore padre
bottom: '2.2%', // Posiziona in basso
left: '50%', // Centra orizzontalmente
transform: 'translateX(-50%)', // Correzione per centrare perfettamente
@@ -1009,8 +1135,17 @@
</div>
<div v-if="optcatalogo.indebug">
isStampa: {{ isStampa }} generazionePDFInCorso:
{{ optcatalogo.generazionePDFInCorso }} getScaleX:
{{ tools.getScaleX(optcatalogo, recscheda.scheda) }} getScaleY:
{{ tools.getScaleY(optcatalogo, recscheda.scheda) }}
IMG:
{{ getImgIntroCatalogo(recscheda.scheda) }}
<span v-if="getTestoIntroduttivo(recscheda)">
{{ getImgIntroCatalogo(recscheda.scheda) }}
</span>
<span v-else>
{{ getSfondoImgCatalogo(recscheda.scheda) }}
</span>
num: {{ page.length }}
</div>
@@ -1073,7 +1208,14 @@
>
<q-separator
inset
:size="tools.adjustSize(optcatalogo, '1px')"
:size="
tools.adjustSize(
optcatalogo,
'1px',
recscheda.scheda,
true
)
"
></q-separator>
</div>
</div>

View File

@@ -61,71 +61,71 @@ body {
font-family: 'DINPro-Condensed-Bold', sans-serif;
color: $colore_titolo_libro;
text-transform: uppercase;
margin-top: calc(5 * var(--scalecatalog) * 1px);
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(18 * var(--scalecatalog) * 1px);
margin-top: calc(5 * var(--scalecatalogy) * 1px);
margin-bottom: calc(5 * var(--scalecatalogy) * 1px);
font-size: calc(18 * var(--scalecatalogx) * 1px);
line-height: 100%;
font-weight: bold;
}
.book-author {
font-family: 'DINPro-Condensed-Regular', sans-serif;
font-size: calc(16 * var(--scalecatalog) * 1px);
font-size: calc(16 * var(--scalecatalogx) * 1px);
}
.book-descr {
font-family: 'DINPro-Condensed-Bold-Italic', sans-serif;
font-size: calc(16 * var(--scalecatalog) * 1px);
font-size: calc(16 * var(--scalecatalogx) * 1px);
}
.book-details {
font-family: 'DINPro-Condensed-Regular', sans-serif;
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(16 * var(--scalecatalog) * 1px);
margin-bottom: calc(5 * var(--scalecatalogy) * 1px);
font-size: calc(16 * var(--scalecatalogx) * 1px);
text-align: left !important;
&.big {
font-size: calc(22 * var(--scalecatalog) * 1px);
font-size: calc(22 * var(--scalecatalogx) * 1px);
}
}
.book-descr-estesa {
font-family: 'AGaramondPro-Regular', sans-serif;
font-size: calc(15 * var(--scalecatalog) * 1px);
font-size: calc(15 * var(--scalecatalogx) * 1px);
text-align: justify;
word-wrap: break-word;
}
.book-link {
font-style: italic;
font-size: calc(14 * var(--scalecatalog) * 1px);
font-size: calc(14 * var(--scalecatalogx) * 1px);
}
.book-novita {
font-size: calc(20 * var(--scalecatalog) * 1px);
font-size: calc(20 * var(--scalecatalogx) * 1px);
}
.book-text-up {
font-family: 'DINPro', sans-serif;
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(20 * var(--scalecatalog) * 1px);
height: calc(380 * var(--scalecatalog) * 1px);
margin-bottom: calc(5 * var(--scalecatalogy) * 1px);
font-size: calc(20 * var(--scalecatalogx) * 1px);
height: calc(380 * var(--scalecatalogy) * 1px);
line-height: 130%;
}
.book-text-down {
font-family: 'DINPro', sans-serif;
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
margin-bottom: calc(5 * var(--scalecatalogy) * 1px);
}
.book-pagina-title {
font-family: 'DINPro', sans-serif;
margin-top: calc(20 * var(--scalecatalog) * 1px);
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(35 * var(--scalecatalog) * 1px);
height: calc(100 * var(--scalecatalog) * 1px);
margin-top: calc(20 * var(--scalecatalogy) * 1px);
margin-bottom: calc(5 * var(--scalecatalogy) * 1px);
font-size: calc(35 * var(--scalecatalogx) * 1px);
height: calc(100 * var(--scalecatalogy) * 1px);
}
.categories {

View File

@@ -88,7 +88,7 @@ export default defineComponent({
const widthpdf = ref('8.88');
const heightpdf = ref('12.31');
const compressionepdf = ref('prepress');
const compressionepdf = ref('printer');
const optcatalogo = ref(<IOptCatalogo>{ ...props.modelValue });