codi font PS | FemFum CaLi2CoPi v0.037 | PS source code

codi font PS | FemFum CaLi2CoPi v0.037 | PS source code


 %!
 %# GNU GPL FemFum CaLi2CoPi v.037 és una llibreria d'anālisi de PDF per verificar,
 %# modificar i reescriure Portable Document Format per mitjā del llenguatge PostScript.
 %# Per a intčrprets GNU GPL Ghostscript perō també, amb ben pocs retocs, pot cōrrer
 %# amb l'Adobe Acrobat Distiller (fins hi tot l'OSX PSNormalizer Framework).
 %#
 %# Copyright (c) 2000-2011 :: l'Ametlla de Merola :: Marc Antoni Malagarriga i Picas
 %# <http://www.femfum.com> | <marcantoni@femfum.com>
 %# http://femfumcali2copi.sourceforge.net/
 %# http://projectes.lafarga.cat/projects/femfumcali2copi/
 %#
 %# Aquest programa és programari lliure: podeu redistribuir-lo i/o modificar-lo
 %# sota els termes de la Llicčncia Pública General de GNU publicada per la Free
 %# Software Foundation, ja sigui la versiķ 3 de la Llicčncia, o (a la seva elecciķ)
 %# qualsevol versiķ posterior.
 %#
 %# Aquest programa es distribueix amb l'esperanįa que sigui útil, perō SENSE CAP GARANTIA;
 %# ni tan sols la garantia implícita MERCANTIL o d'APTITUD PER A UN OBJECTIU PARTICULAR.
 %# Consulteu els detalls de la Llicčncia Pública General de GNU per a més informaciķ.
 %#
 %# Haurieu de rebre una cōpia de la Llicčncia Pública General de GNU junt amb aquest
 %# programa. En cas contrari, consulteu <http://www.gnu.org/licenses/>
 %#
 %#
 %# GNU GPL FemFum CaLi2CoPi v0.037 is a PDF parser library to preflight,
 %# modify and rewrite the Portable Document Format under PostScript language.
 %# For GNU GPL Ghostscript interpreter, but also available with minor changes
 %# for Adobe Acrobat Distiller (even for MacOSX PSNormalizer Framework).
 %#
 %# Copyright (c) 2000-2011 :: l'Ametlla de Merola :: Marc Antoni Malagarriga i Picas
 %# <http://www.femfum.com> | <marcantoni@femfum.com>
 %# http://femfumcali2copi.sourceforge.net/
 %# http://projectes.lafarga.cat/projects/femfumcali2copi/
 %#
 %# This program is free software: you can redistribute it and/or modify
 %# it under the terms of the GNU General Public License as published by
 %# the Free Software Foundation, either version 3 of the License, or
 %# (at your option) any later version.
 %#
 %# This program is distributed in the hope that it will be useful,
 %# but WITHOUT ANY WARRANTY; without even the implied warranty of
 %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 %# GNU General Public License for more details.
 %#
 %# You should have received a copy of the GNU General Public License
 %# along with this program. If not, see <http://www.gnu.org/licenses/>
  
 %% quan treballem amb la interfície web executem el fitxer de capįalera escrit per executal.php
 %% i activem la línia de lectura del fitxer, esborrant les dades manuals de capįalera fins la
 %% fi de dades de capįalera (opcions de menú) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% (capCaLi2CoPi.dat) (r) file cvx exec
  
 %% miralls del codi a:
 %% http://femfumcali2copi.sourceforge.net/ ... /home/persistent/f/fe/femfumcali2copi
 %% ftp de femfum.com ... /web/bin/DeuNosEnGuard
 %% pendent de creaciķ d'un repositori amb SVN
  
 %#% execuciķ amb GS per línia de comandes
 %# gs -q -dNOSAFER -o re.pdf -sDEVICE=pdfwrite -c .setpdfwrite -f FemFum_CaLi2CoPi_037.ps
 %% /home/users/m/ma/marcantoni/userweb/persistent/gs860/bin/gs ... crida al gs de sourceforge
  
 %#%00% Normes d'escriptura a seguir dins el codi per a una gestiķ de codiPSnetiplanxat_html.ps
 %# i fitesigatellsPSnetiplanxat_html.ps i per una bona traducciķ a Google Translator:
 %# 1. Els comentaris normals (gris) han de tenir només 2 o 3 % seguits ... mai 1 de sol % !
 %# 2. El millor es que tots els comentaris normals en tinguin 2 %% doncs si acabem la línia amb uns
 %# punts suspensius ... la traducciķ elimina el % inicial (i amb 1 d sol ja no seria un comentari!)
 %# 3. Cal separar amb un espai a l'acabar i comenįar, quan escrivim tres punts suspensius ...
 %# 4. Els comentaris amb interrograciķ, el signe ? final ha d'anar enganxat a la darrera paraula
 %# 5. El contingut d'un comentari que NO volem que es tradueixi, ho posarem entre els carācters d'accent grave i acute ...
 %# obrim no traduīr: ascii 96 = grave = U+0060 (Unicode Basic Latin | CE)
 %# tanquem no traduīr: ascii 180 = acute = U+00B4 (Unicode Latin-1 Supplement | CE)
 %# aquests dos signes dins el fitxer html desparareixen
 %# 6. Els comentaris que sķn fites (vermell) s'han d'escriure com segueix, quan els iniciem:
 %# %#%01% aixō és una fita on l'identificador numčric 01 va entre %01% i s'inicia amb %#
 %# les línies addicionals d'una fita comencen amb: %# seguit d'un espai en blanc!
 %# perō si volem forįar una línia en blanc per dalt quan fem un llistat amb la utilitat
 %# fitesigatellsPSnetiplanxat_html.ps posem: %#% seguit d'un espai en blanc i el que vulguem!
 %# 7. Els comentaris que sķn gatells (blau), s'obren i tanquen, i la seva sintaxi és:
 %# %:00 aixō és el gatell 00 que obre
 %# %/00 aixō és el gatell 00 que tanca
 %# 8. Pel codi PS (negre) no hi ha cap mena de restricciķ
 %# 9. Errors en aquesta sintaxi poden produir falles d'execuciķ a les dues aplicacions de repicat:
 %# fitesigatellsPSnetiplanxat_html.ps i codiPSnetiplanxat_html.ps
  
 %#%%%% OPCIONS DE MENÚ
 %#%01% dades de capįalera (opcions de menú)
 (%#%01%)==
  
 %#% A path i nom del PDF a tractar %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
 %%Pegues 0
 %%Cal veure per que CaLi2CoPi #0 no és capaį de reparar aquest fitxer! Acrobat i Preview si!
 %% segurament és degut als dos possibles comportament que hem dissenyat per l'operador stream:
 %% si l'entrada Length duu un valor numčric per excés (més enllā d'endstream) el mčtode preferent
 %% assenyalat amb true, farā petar el fitxer, llavors segurament utilitzant false anirā bé
 %%(/enfony/CaLi2CoPi/JBC/errors100910/ComportamentDeTJxGestionarEspaisBlancs.pdf)
 %%Dins a Ghostscript podem estalviar-nos totes les definicions d'encoding grācies al diccionari
 %% systemdict /EncodingDirectory get ... on hi trobarem tots els recursos de xifrat que necessitem
 %% i per treballar en doble byte a ... systemdict /AdobeGlyphList get
 %%Hem reescrit el cuc de femfum amb Unicode (doble byte) per tal que es vegi bé a les
 %% darreres versions de l'Acrobat (Producer, Creator i Author)
 %% ... a l'inici de l'string hi ha d'anar <feff> per anunciar el doble byte
 %%Fi de Pegues 0
  
  
 %%Pegues 1
 %%Fi de Pegues 1
  
  
 %%Pegues 2
 %%Fi de Pegues 2
  
  
 %%Pegues 3
 %%Fi de Pegues 3
  
  
 %%Pegues 4
 %%Al tornar a salvar amb el Preview, li treu l'ObjectStreamCompression perō ho posa dins un Form i
 %%CaLi2CoPi NO HI ENTRA i es pensa que no duu text!!!
 %% (/enfony/CaLi2CoPi/JBC/HTcreator/PDFdirecteWord/00011_Preview.pdf)
 %%(/enfony/CaLi2CoPi/JBC/HTcreator/PDFdirecteWord/00011_API.pdf)
  
 %%Hi ha CIDToGIDMap ... i ens cal implementar-ho? ... PLEGUEM!
 %%(/enfony/CaLi2CoPi/JBC/errors100910/test\ guions\ word.pdf)
  
 %%Darrers problemes de JBC!
 %%Cal afegir a #4 un analitzador a posteriori, aprofitant el del torsimany, perō que abans
 %% d'unificar línies analitzi si s'han de remuntar paraules que tenen els seus carācters tractats
 %% de forma individual, doncs ara al refinar l'extractor moltes de les referčncies de JBC que
 %% sortien unificades, ara surten a trossos. Una de les problemātiques que haurem de contemplar,
 %% a banda de les associades a l'ample de les lletres, serā la que relaxi la precisiķ de la posiciķ
 %% Y a un sol decimal, doncs hem vist que quan treballa amb dos o tres, pot entendre que hi ha
 %% carācters en línies diferents i només es tracta d'un error de precisiķ en la composiciķ al segon
 %% o tercer decimal (degut a l'eina o a l'operador). Aixō ens servirā per construir el detector de
 %% parāgrafs que necessitem pel torsimany. També caldrā eliminar el detector d'omisiķ dels
 %% carācters 'N.P.' que ara tenim associat als operadors, per afegir-lo a l'analitzador aquest.
 %%(/enfony/CaLi2CoPi/JBC/errors100910/32688_OriginalOmetReferencies_foraInlines.PDF)
 %%(/enfony/CaLi2CoPi/JBC/errors100910/32660_OriginalProblematicaGuions_foraInlines.PDF)
 %%(/enfony/CaLi2CoPi/JBC/errors100910/31817_OriginalEnganxatNP_foraInlines.PDF)
  
 %%Mishima: retoquem la precisiķ Y dels operadors de text TJ Tj ' " només al primer decimal
 %% (trucant la resta de decimals) per tal de minimitzar un problema detectat amb imprecisions de
 %% posicionat a la centéssima de punt, que fan interpretar textos com si estiguessin en línies
 %% diferents i en realitat no ho estan. Quan hi ha rotacions de text i segons com es disposen els
 %% operadors, amb aquesta mesura no n'hi ha prou per solucionar-ho. Aquest problema també el podrem
 %% filtrar més tard amb l'algorisme que munta l'array ClavaLinies?
 %%(conflicteTJ.pdf)
 %%(tresParaules.pdf)
 (dosPetitsParagrafs.pdf)
  
 %%Error: /rangecheck in --putinterval--
 %%(/Users/femfum/Sites/www.femfum.com/PDF/ElaGeminada/5JPL_PonenciaElaGeminada.pdf)
  
 %% (%#%20bis%)
 %%Error: /rangecheck in --cvs--
 %%(/Users/femfum/Desktop/eraalescriptori_220810/100822103559.pdf)
  
 %% (%#%20bis%)
 %% ... This Page don't have Text
 %% (:::JBC:::pagina sense TEXT)
 %% /43_____________0 /13
 %%Error: /stackunderflow in --dup--
 %%(/Users/femfum/Desktop/01_lip.pdf)
  
 %%Extrau ARAMEU als dos!
 %%(/Users/femfum/Desktop/orgueporta.pdf)
 %%(/Users/femfum/Desktop/orguepositiu.pdf)
  
 %% errors reportats a Kosmopolis...
 %%Error: /rangecheck in --putinterval-- Operand stack: TT17
 %% (%#%20bis%) Serif ... Font Descriptor Flag 2
 %% >>> PROBABLEMENT hem detectat un xifrat esoteric! <<<
 %%(/Users/femfum/Desktop/Kosmopolis/NODACcat_des2006.pdf)
  
 %%EP ... hi ha CIDToGIDMap ... i ens cal implementar-ho? ... PLEGUEM!
 %%(/Users/femfum/Desktop/Kosmopolis/From_The_Creative_Minds_Book2.pdf)
  
 %% (%#%23%) ( ... peta Tj)
 %%Error: /rangecheck in --get-- Operand stack: (The Basics)
 %%(/Users/femfum/Desktop/Kosmopolis/direct_action_guide.pdf)
 %% fi d'errors que m'han dit a Kosmopolis
  
 %%Peta ...
 %% (/Users/femfum/Desktop/Programa-dia-emprenedor-2010-catala2.pdf)
 %% (%#%20bis%) ... This Page don't have Text (:::JBC:::pagina sense TEXT)
 %% /213____________0 /36 Symbolic ... Font Descriptor Flag 3
 %% ... hi ha CIDToGIDMap ... i ens cal implementar-ho? ... PLEGUEM!
  
 %%Aquí el codi 0003303 queda extret amb #4 com a CCC ...
 %% (/enfony/CaLi2CoPi/JBC/planolsvaris/29401.PDF)
 %% (i xq aquí les 3 primeres etiquetes amb #8 no queden ben posicionades per les x?)
  
 %%Peta x inLine ilˇlegal: Error: /rangecheck in --readline--
 %%(/enfony/CaLi2CoPi/JBC/planolsvaris/32602.PDF)
 %%(/enfony/CaLi2CoPi/JBC/planolsvaris/32600.PDF)
 %%(/enfony/CaLi2CoPi/JBC/planolsvaris/32400.PDF)
 %%(/enfony/CaLi2CoPi/JBC/planolsvaris/31717.PDF)
  
 %%Aquí hi ha un xifrat esotčric detectat per #4
 %% doncs el codi (0009613) no s'extrau correctament (sķn tot lletres!)
 %% (/enfony/CaLi2CoPi/JBC/planolsvaris/tractats/PlanosPDF/32719.PDF)
  
 %%Xifrat esotčric
 %% (%#%20bis%) ... This Page don't have Text (:::JBC:::pagina sense TEXT) /773____________0 /143
 %% >>> hem detectat un xifrat esoteric SEGUR! <<<
 %% Error: /rangecheck in --putinterval--
 %% Operand stack: G2 --dict:5/5(L)-- --nostringval-- 176 --nostringval--
 %%(/Users/femfum/Desktop/polyNorma/Tarifapdfhigh.pdf)
 %%Fi de Pegues 4
  
  
 %%Pegues 5
 %%Caldria afegir un seguit de nous valors a escollir a banda de les tres variables que tenim ara:
 %% /sDADA /aDADAv /pathDADAv de manera que hauríen d'anar en una array per tal de poder donar
 %% cabuda per la cua a nous parāmetres com: afegim alguna de les 14 Core Fonts?, quina (índex)
 %% els continguts de text van amb cometes?, quines,
 %%EP! ara de forma fixa afegim sempre un nou objecte font de l'Helvetica-Bold (L51813)
  
 %%(/enfony/CaLi2CoPi/Sarrio/GentGran/gentgran_mestre.pdf)
 %%SARRIO
 %%(/Users/xavier/dadavariable/gentgran_mestre.pdf)
  
 %%Fi de Pegues 5
  
  
 %%Pegues 6
 %%A3copiseny millores a fer al gatell cosidor d'imatges #6
 %%Cus quatre imatges simetriques de 4x4 perō hi ha un desfassament de color d'1 píxel
 %% podria ser que el fes sempre perō aquí és veiés molt per que hi ha pocs píxels
 %% alguna cosa deu passar en la lectura de quantitats +petites de 8 píxels?
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/2x2_simetric.pdf)
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/2x2_asimetric.pdf)
  
 %% no troba ni les imatges per cosir!
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/ninot_amb8imatgesIrregularsH_inLines.pdf)
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/ninot_amb8imatgesIrregularsH.pdf)
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/ninot_amb4imatgesIrregularsVH.pdf)
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/3imatges3Xdiferents.pdf)
  
 %% només cus dues imatges, una a sobre l'altre, i els píxels de verd contaminen una imatge
 %% completament! ...i pel que sembla aixō no passa en horitzontal!
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/nomesEnCus2AmbContaminacioDverd.pdf) %% passa
 %% >>>> NO HE TROBAT imatges trencades que es puguin cosir ... pleguem!
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/nomesEnCus2AmbContaminacioDverdNegreAsota.pdf)
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/unaimatgealcostatdelaltre.pdf) %% no passa
 %% INFLUEIX DE COM ESCRIVIM L'STREAM DE DADES!!! (amb el mčtode false va bé!)
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/EnCus2VerticalsAmbContaminacioDverd.pdf) %% passa
 %% es contamina la imatge frontisa i la que li segueix i donen per blau!
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/3unasobrelaltra.pdf) %% per evitar-ho stream a de ser false
 %% ENS CAL REVISAR la redefiniciķ d'stream per veure que passa en aquest efecte de contaminaciķ?
  
 %% provoca l'error ... (>>> CaLi2CoPi#6 ... els pixels d'ample de les linies d'imatge que formen el trencaclosques NO s'adiuen ... PLEGUEM!)
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/ForcemMidaXidemAmbpixelsDampleDiferents.pdf)
  
 %% provoca l'error ... (>>> CaLi2CoPi#6 ... els pixels d'altura de les imatges que formen aquesta linia NO s'adiuen ... PLEGUEM!)
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/ForcemMidaYidemAmbpixelsDaltDiferents.pdf)
  
 %% >>>> NO HE TROBAT imatges trencades que es puguin cosir ... pleguem!
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/unasotalaltredamplesdiferents.pdf)
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/unasotalaltredamplesdiferents2.pdf)
  
 %%EP! sķn inLines!!!!
 %% FALS! >>>> NO HE TROBAT imatges trencades que es puguin cosir ... pleguem!
 %% alguna cosa deu passar en la lectura de quantitats +petites de 8 píxels
 %% (/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/2x2_asimetric_inLines.pdf)
  
 %%EP! no les detecta xq sķn inLines !!!
 %%(/enfony/CaLi2CoPi/a3copiseny/tipusDcosit/1x3_inLines.pdf)
  
 %%Aquí hi han unes imatges trencades molt petites de 2x1 píxels i la cosidora #6 es queda inalbis
 %%(/enfony/CaLi2CoPi/JBC/HTcreator/PDFdirecteWord/00011_PDFA.pdf)
 %% em comprovat que el posicionat i mida de les imatges no hi té res a veure ...
 %%(/enfony/CaLi2CoPi/JBC/HTcreator/PDFdirecteWord/misteri2x1_9_pdf_pla.pdf)
  
 %%Quan fem #06 es queda in albis a (%#%23%) (<--- imatge!)
 %% (/Users/femfum/Desktop/iva2009/_3714ATTR.pdf)
 %% fi d'exemples de millora del gatell cosidor
  
 %%No és cert: (%#%26%) MRCT20 This Page don't have Resources
 %% cal veure que passa en aquest algorisme ara, doncs no sap localitzar els Resources de pāgina
 %%(/enfony/CaLi2CoPi/a3copiseny/beCosits/4pagines_2si2no.pdf)
 %%Fi de Pegues 6
  
  
 %%Pegues 7
 %%Fi de Pegues 7
  
  
 %%Pegues 8
 %%Aquí el codi 0003303 queda extret amb #4 com a CCC ...
 %% (/enfony/CaLi2CoPi/JBC/planolsvaris/29401.PDF)
 %% (i xq aquí les 3 primeres etiquetes amb #8 no queden ben posicionades per les x?)
  
 %% aquest és un cas curiķs per l'extractor on podem veure la precisiķ de localitzaciķ de carācters
 %% al logo del Colifree i el tractament dels signes accentuats amb dos carācters, i també altres
 %% perles de carācters amb xifrat que caldria aclarir
 %%(/Users/femfum/Desktop/eraalescriptori_220810/programa-a4.pdf)
 %%Fi de Pegues 8
  
  
 %%Pegues 9
 %%Fi de Pegues 9
  
  
 %%Pegues 10
 %%Amb #10 hi ha un error en la visualitzaciķ d'Acrobat8 perō el Preview l'obre bé
 %%(/Users/femfum/Desktop/Colloqui\ WB\ WEB.pdf)
  
 %%L'opciķ #10 genera un PDF que l'Acrobat es queixa per errors de visualitzaciķ
 %%(/Users/femfum/Desktop/Pantone-FCR-sp2010f.pdf)
  
 %%(/Users/femfum/Desktop/La_Ronda_A8pla.pdf)
 %%Fi de Pegues 10
  
  
 %%Pegues 11
 %%Fi de Pegues 11
  
 %%Pegues 12
 %% Simsi: projecte de Polynorma
 %% x analitzar
 %%(/Users/femfum/Desktop/polyNorma/Pag1TarifaNaviDirecte290910.pdf)
 %%(/Users/femfum/Desktop/polyNorma/3linies.pdf)
 %%(/Users/femfum/Desktop/polyNorma/duespagines.pdf)
 %%(/Users/femfum/Desktop/polyNorma/012034056.pdf)
  
 %%Recta final?
 %%(/Users/femfum/Desktop/polyNorma/0123456_60123456_6xfer.pdf) %%
 %%(/Users/femfum/Desktop/polyNorma/012345601203456xfer.pdf) %% B!
 %%(/Users/femfum/Desktop/polyNorma/6543211112435xfer.pdf) %% B!
 %%(/Users/femfum/Desktop/polyNorma/112435xfer.pdf) %% B!
 %%(/Users/femfum/Desktop/polyNorma/1paginaCatalegPolynorma_NavisionPDFcreator.pdf) %% B!
 %%(/Users/femfum/Desktop/polyNorma/1234555455xfer.pdf) %% B!
 %%(/Users/femfum/Desktop/polyNorma/00112223333xfer.pdf) %% B!
 %%(/Users/femfum/Desktop/polyNorma/012034056xfer.pdf) %% B!
 %%(/Users/femfum/Desktop/polyNorma/6543210011222000xfer.pdf) %% B!
  
 %%Cal afinar la recomposiciķ de línies amb el tabulat de l'índex de contingut de pāgina, doncs ara
 %% no es respectarā correctament el cālcul de l'amplada de composiciķ al recompondre una línia
 %% d'una mateixa jerarquia, en dues o més, cal tenir en compte que aixō ara no és especialment greu
 %% doncs és molt improvable degut a que el localitzador de bookmarks no treballa per parāgrafs si
 %% no que treballa per línies isolades (hi hauríem de comenįar corregint aixō primer!)
 %%Cal esbrinar per que una crida a un tipus de lletra... /Helvetica findfont ...peta a partir de les
 %% redefinicions d'encodings a %#%20% ...és hora de treballar amb systemdict /EncodingDirectory get
 %%(/Users/femfum/Desktop/polyNorma/faJerarquies.pdf)
  
 %%Error: /typecheck in --cvi--
 %%(/Users/femfum/Desktop/Feliz_2011.pdf)
 %%Error: /undefined in --get--
 %%(/Users/femfum/Desktop/Vam\ inaugurar.pdf)
 %%(/Users/femfum/Desktop/LesDuesTraces25TravessaPirineu.pdf)
 %%Error: /undefined in aTm
 %%(/Users/femfum/Desktop/1059458_u.pdf)
  
 %%(/Users/femfum/Desktop/polyNorma/JuguemAmbTextAcrobat_paginaDindex.pdf)
  
 %%(/Users/femfum/Desktop/polyNorma/01344244344_HeusAquiElCaos.pdf)
 %%(/Users/femfum/Desktop/polyNorma/0123566664666566_HeusAquiElCaos.pdf)
 %%(/Users/femfum/Desktop/polyNorma/0123566665_houston.pdf)
  
 %%(/Users/femfum/Desktop/polyNorma/darrers/pags_TarifasComentariosArbol.pdf) %% B!
  
 %%Curiosament ara amb el PowerPC del MacBook, just quan repiquem dues vegades, s'ha disparat el
 %% temps d'execuciķ i només triga uns 25/30' (abans triplicava aquest temps!)
 %%(/Users/femfum/Desktop/polyNorma/darrers/TarifasComentariosArbol.pdf)
  
 %%(/Users/femfum/Desktop/polyNorma/555657TarifasComentariosArbol.pdf)
 %%(/Users/femfum/Desktop/polyNorma/1pag_TarifasComentariosArbol.pdf)
  
 %%Ep! si hi ha una pāgina en blanc sense Resources, aturem la feina
 %%MRCT20 This Page don't have Resources
  
 %%Hem classificat amb el gatell %%ProblemaD tots els punts de l'algorisme on podem forįar un format
 %% de pāgina fictici per tal d'obligar a paginar les noves planes inserides com a índex i estudiar
 %% la problemātica que es produeix, en cas que es generin errors
 %%(/Users/femfum/Desktop/polyNorma/1pag_TarifasComentariosArbol.pdf)
  
  
 %%Error: /undefined in --get--
 %%(%#%35%) Avaluant l'Arbre Jerarquic ...
 %%(/Users/femfum/Desktop/polyNorma/blanques.pdf)
  
 %%Error: /undefined in ARAdex
 %%(/Users/femfum/Desktop/polyNorma/303132TarifasComentariosArbol.pdf)
 %%(\n ... error estructural reinserint l'index ... PLEGUEM!\n\n)
 %%(/Users/femfum/Desktop/polyNorma/123TarifasComentariosArbol.pdf)
  
 %%(/Users/femfum/Desktop/polyNorma/01235656356356CreixSenseFi.pdf) %% B!
 %%(/Users/femfum/Desktop/polyNorma/01235656356CreixSensFi.pdf) %% B!
  
 %%Fi de Pegues 12
  
  
 %% test
 %%(/Users/femfum/Desktop/wordsAndSoOn.pdf)
  
  
 %#% B path + tram del nom del nou PDF reescrit i tractat segons l'opciķ escollida %%%%%%%%%%%%%
  
 %%% en cas del projecte JBC es la DLL qui controla el nom i el path del fitxer de sortida
 %%(C:/MaRCanToni/FemFum/taller_d'applets/CaLi2CoPi/0test036_JBC.pdf)
  
 %% Win
 %%(C:/MaRCanToni/FemFum/taller_d'applets/CaLi2CoPi/0test036)
 %%(C:/MaRCanToni/FemFum/taller_d'applets/aramateix/DiBa/Institutd'Edicions/Coromines/REFET.PDF)
 %%(C:/MaRCanToni/FemFum/taller_d'applets/aramateix/WebProof/CALi2COPi/0test034)
  
 %%% GS MacOSX/Unix/Linux %%%
 %%(/enfony/CaLi2CoPi/_CREUS_test036_)
  
 (/enfony/CaLi2CoPi/_037_)
 %%SARRIO
 %%(/Users/xavier/dadavariable/nou_)
  
 %%% adreįa pseudoUnix a Distiller!
 %%(Macintosh_HD:Users:femfum:Desktop:0test034)
  
  
  
 %#% C marques de tall i reescriptura idem %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %# Si a %#% G triem 0, llegirem aquest dígit per decidir si unifiquem els
 %# <Stream Contents> o els deixem intactes en cas que estiguin trencats (variable xQuinaArea)
 %# 0= Unifiquem els <Stream Contents> 1= Ho deixem intacte
 %# Si a %#% G triem 2, llegirem aquest dígit per triar l'ārea on posarem les
 %# Creus de Tall, si no, el valor d'aquest apartat és indiferent (variable xQuinaArea)
 %# 0= MediaBox 1= CropBox 2= TrimBox
 %# Si a %#% G triem 6, llegirem aquest dígit per saber si de la interfície d'a3copiseny ens ve
 %# el pocessat d'un sol fitxer =0 o el processat d'un directori sencer =1 (ho necessita el .log)
  
 0
  
  
  
 %#% D extrau o reinsereix imatges JPEG %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %# path del directori on hi hagin les imatges a exportar (~9) o a reinserir (~7)
  
 (/Users/femfum/Desktop/falfonso/)
 %% ()
  
  
  
 %#% E anālisi textual i etiqueta text %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %# Llargāries mínima (NO pot ser mai zero!) i māxima dels mots sospitosos a ser analitzats
 1 %% llargaria mínima del mot sospitķs (mai pot ser zero o més petit!)
 256 %% llargaria māxima del mot sospitķs (per JBC ara és 11 doncs contemplem el cas de N.P.)
  
 %#% path i nom del fitxer dels rengs de text fruit de l'anālisi de sortida (es llegeix o s'escriu)
 %%(C:/MaRCanToni/FemFum/taller_d'applets/CaLi2CoPi/rengsDtext.txt)
 (rengsDtext.txt)
  
 %#% posem les etiquetes transparents en una lleixa NO imprimible? true:SI false:NO
 true
  
 %#% missatge tipus Tooltip, Sticky Note o Post-It per als fitxers no localitzats a la base de dades
 (File not found in our database)
  
 %#% #11 torsimany: preparem el fitxer TXT de l'anālisi de sortida pels traductors en línia?
 %% (motors de Google, Apertium, etc) true:SI false:NO, aquest gatell és imprescindible que estigui
 %% a true quan fem treballar CaLi2CoPi com a eina de traducciķ amb la combinatōria dels gatells
 %% #04 i #08 ...i quan no és així cal que estigui obligatōriament a false
 true
  
  
 %#% F dada variable %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% cal polir els operadors clau (BDC EMC Tj) del segon diccionari de repicat de Contents
 %%Caldrā implementar quan toqui la resta d'operadors de text: ' " TJ
 %% cal explorar l'encoding de carācters de la tipografia que conté la dada variable (04) per tal
 %% de repicar l'array DADAmestre amb el xifrat adaptat
 %% cal polir el lector cd CSV doncs si ara no hi ha un ; (punt i coma) al final de línia, doncs
 %% la darrerera dada no es llegeix!
  
 %# De com preparar la plantilla del PDF per la dada variable:
 %# Cal generar el PDF amb les tipografies incrustades i amb el 100% del joc de carācters
 %# Cal marcar el text per ordre que haurā de ser tractat com a dada variable fent, amb dos mčtodes possibles (#a, #b i comú # sense lletra):
 %# 0. Obrir el fitxer PDF que ha de servir de plantilla de la dada variable.
 %# 0a. Desplegar el menú View>Navigation Tabs>Content.
 %# 1a. Desplegar per l'arbre de pestanyes d'aquest menú flotant, fins arribar a localitzar el text que ens interessa marcar com a dada variable. Si la unitat de text que hem de marcar és més petita que la que ens mostra aquest arbre de continguts, no podrem marcar el text per aquest mčtode #a i hauremn de seguir per les instruccions #b.
 %# 2a. Cliquem sobre el text que actua com a una unitat de dada variable prement el botķ de la dreta del ratolí o CTRL+clic per escollir 'Create Artifact'.
 %# 3a. Podem acceptar, prement 'OK', el que surti per defecte en aquest menú.
 %# 4a. Tornem a clicar sobre el mateix text i premem novament el botķ de la dreta del ratolí o CTRL+clic per escollir 'Properties' i anem a la solapa 'Content'.
 %# 5a. Omplim el camp 'Container Tag' amb un nom personalitzat, on el text no ha de tenir espais en blanc, ni carācters fora de l'ascii, podent jugar amb majúscules i minúscules. Aquest etiquetarā l'element de dada variable dins l'array /aDADAv (patrķ de les claus per cada línia de dada variable llegida).
 %# 6a. Premem el tabulador per assegurar la dada i sortim amb 'close' o matant la finestra.
 %# 7a. Pôdem estar segurs que ho hem fet bé si el nostre nom personalitzat apareix entre < ... > dins el desplegable.
 %# 1b. Tanquem el menú flotant del 'Content' i escollim l'eina 'TouchUp Text Tool'.
 %# 2b. Seleccionar el text que actua com a una unitat de dada variable.
 %# 3b. Prémer el botķ de la dreta del ratolí o CTRL+clic per escollir 'Create Artifact'.
 %# 4b. Podem acceptar, prement 'OK', el que surti per defecte en aquest menú.
 %# 5b. Tornem a seleccionar el mateix text i premem novament el botķ de la dreta del ratolí o CTRL+clic per escollir 'Properties' i anem a la solapa 'Content'.
 %# 6b. Omplim el camp 'Container Tag' amb un nom personalitzat, on el text no ha de tenir espais en blanc, ni carācters fora de l'ascii, podent jugar amb majúscules i minúscules. Aquest etiquetarā l'element de dada variable dins l'array /aDADAv (patrķ de les claus per cada línia de dada variable llegida).
 %# 7b. Premem el tabulador per assegurar la dada i sortim amb 'close' o matant la finestra.
 %# 1. Un cop etiquetats tots els textos, podem desar el PDF millor fent un 'Save As'.
  
 %# Consideracions:
 %# 1. ara no distingim tipus de dades variables (numčrics, text, lōgics, dates, etc)
 %# 2. donem per fet que el fitxer TXT duu només dades útils com a text entre dobles cometes " ... " si no fos així hauríem de posar el carācter anellador com un parāmetre més de capįalera
 %# 3. també a %#%42bis3% podríem personalitzar la dada única per reescriure el nom del PDF perō ara hi ha un simple numerador (NMrDR) per simplificar aquest tema
 %# 4. el TXT de dada variable si acaba amb linies en blanc generarā fitxers idem al darrer registre
 %# 5?. donem per fet que el xifrat de la tipografia que conté la dada variable és WinAnsi?doncs fins que no ho analitzem inicialment ho haurem de comprovar manualment
 %# 6?. donem per fet que el joc de carācters de la tipografia de conté la dada variable és complet doncs fins que no ho analitzem inicialment ho haurem de comprovar manualment
 %# 7. sempre ens quedarā el recurs d'utilitzar una de les 14 core fonts (a implementar més endavant) per treballar amb més portabilitat (i evitar xifrats esotčrics o jocs restringits), o també tindriem la possibilitat d'incrustar en aquest procés una font lliure.
  
 %# path del fitxer de lectura de dada variable
 %%(/enfony/CaLi2CoPi/Sarrio/Eurofer4definitiu.txt)
  
 (/enfony/CaLi2CoPi/Sarrio/GentGran/socis_critics.txt)
 %%SARRIO
 %%(/Users/xavier/dadavariable/socis_OK.txt)
  
 %# array pel patrķ dels noms clau per cada línia (registre) de dada variable llegida
 %%[null /nom1 /cognom1 null /dni1]
 [ /num /cognom /nom ]
  
 %# string amb el carācter separador dels camps de dades a les línies de dada variable
 (;)
  
  
 %#% Fbis generaciķ de l'arbre jerārquic i numeraciķ de pāgines %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Simsi:
 %# array dels nivells jerārquics de l'índex
 [
  [ %% 0 māxim nivell
  %% si ve de disseny
 %% [/MetaMedium-Caps 23.94]
  %% si ve de l'índex generat per Navision
 %% [/Arial-BoldMT 18]
  [/Helvetica-Bold 20] %% via PDFCreator
  ]
  [ %% 1
 %% [/ArialMT 18.99]
  [/Helvetica 19] %% via PDFCreator
  ]
  [ %% 2
 %% [/ArialMT 15.93]
  [/Helvetica 16] %% via PDFCreator
  ]
  [ %% 3
 %% [/ArialMT 11.98]
  [/Helvetica 12] %% via PDFCreator
  ]
  [ %% 4
 %% [/Arial-BoldItalicMT 9.94]
  [/Helvetica-Oblique 12] %% via PDFCreator
  ]
  [ %% 5
 %% [/ArialMT 7.97]
  [/Helvetica-BoldOblique 10] %% via PDFCreator
  ]
  [ %% 6
  [/Helvetica-Oblique 8]
  ]
 ]
 %% /Nji exch def %% captura provisional de l'array dels nivells jerārquics de l'índex
  
 %% polyFEM
 %%false{
 [
  %# generem l'índex amb bookmarks?
  true
  
  %# generem l'índex amb pāgines?
  true
  
  %# numerem les pāgines?
  %% quan el numerador trova una pāgina completament en blanc, la compta perō no la numera
  true %% si o no?
  false %% a sota centrat (true) o a sota a la dreta (false)?
  
  %# fins a quina jerarquia despleguem la visibilitat inicial dels bookmarks?
  0 %% zero és la primera jerarquia possible a partir de la qual encongim l'arbre
 ]
 %%}if
  
  
  
 %#% G triem Que Li Fem Fer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %# quč li fem fer ?
 %# 0 :: XRay+ reescriptura idem del PDF perō amb un seguit de canvis interns (fet!)
 %# 1 :: XRay+ separaciķ de tintes amb tants PDF com tintes hi hagi (només per a PDF d'1 sola pāgina) (fet!)
 %# 2 :: XRay+ marques de tall automātiques fent créixer el format de pāgina (MediaBox) si cal (fet!)
 %# 3 :: XRay+ corrector tipogrāfic de la Ela Geminada (per fer)
 %# 4 :: XRay+ anālisi textual amb generaciķ de rengsDtext.TXT per #08 sense fer el repicat a PDF (fet!)
 %# 5 :: XRay+ dada variable (fet!)
 %# 6 :: XRay+ cosit d'imatges trencades que s'hagin localitzat (fet! perō queden coses per polir encara)
 %# 7 :: XRay+ reinsereix imatges JPEG segons l'ordre com s'hagin exportat amb Acrobat o amb l'opcio #9 (fet! perō queden coses per polir encara)
 %# 8 :: XRay+ etiqueta text afegint vincles i marques transparents segons les dades de #4 (JBC)
 %# 9 :: XRay+ extrau imatges JPEG segons convencions (escales de gris + RGB, no ICC, no Indexat) a JPEG ... NO FA el repicat a PDF ... (fet! pero cal polir coses encara)
 %# 10 :: XRay+ preflight amb capes (verificador per al Colˇlegi de Disseny Grāfic: capes x material digital per anar + enllā d'XRay (ho estem fent)
 %# 11 :: XRay+ traducciķ (ho estem fent) ...en realitat és una determinada combinaciķ de 4+8
 %# 12 :: XRay+ generaciķ automātica d'índex amb bookmarks i pāgines (Polynorma)
  
 4
  
  
  
 %#% H path + inici del nom del fitxer TXT informatiu XRay %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
 %% Win
 %%(C:/MaRCanToni/FemFum/taller_d'applets/CaLi2CoPi/XRay_036_)
 %%(C:/MaRCanToni/FemFum/taller_d'applets/aramateix/WebProof/CALi2COPi/XRay_034_)
 %%(C:/Documents and Settings/L'amo/Escritorio/+PDFs/Logs/)
  
 %%% GS MacOSX/Unix/Linux %%%
 (/enfony/CaLi2CoPi/XRay_037_)
 %%SARRIO
 %%(/Users/xavier/dadavariable/XRay_037_)
  
 %% adreįa pseudoUnix a Distiller!
 %% (Macintosh_HD:Users:femfum:Desktop:XRay_034_)
  
  
  
 %%#% Ep! deixem activada la generaciķ d'XRay de forma fixa
 %%# (E) I %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%# generem el fitxer XRay d'info TXT ?
 %%# 0= NO 1= SI
  
 %% 1
  
  
  
 %#% J path de treball dels fitxers temporals %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%# si treballem amb el gatell 12, aquest path no pot dur cap mena de carācter fora de l'ascii
 %%# universal ni cap espai en blanc (el path és utilitzat com un literal per a un diccionari)
  
 %% Win
 %%(C:/MaRCanToni/FemFum/taller_d'applets/CaLi2CoPi/tmp/)
 %%(C:/MaRCanToni/FemFum/taller_d'applets/aramateix/DiBa/Institutd'Edicions/Coromines/tmp/)
 %%(C:/MaRCanToni/FemFum/taller_d'applets/aramateix/WebProof/CALi2COPi/tmp/)
  
 %%% GS MacOSX/Unix/Linux %%%
 (tmp/)
 %%SARRIO
 %%(/Users/xavier/dadavariable/tmp/)
  
 %%% adreįa pseudoUnix a Distiller!
 %%(Macintosh_HD:Users:femfum:Desktop:tmp:)
  
  
  
 %%% eliminat 26.03.09
 %%% K %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%% path + fitxer amb el valor de validaciķ de l'Applet
  
 %% Win
 %%(C:/MaRCanToni/FemFum/LlumiColor/_Atles_/aTLeSBeta/clau.key)
  
 %%% GS MacOSX %%%
 %%(/Users/femfum/Desktop/clau.key)
 %%% adreįa pseudoUnix a Distiller!
 %%(Macintosh_HD:Users:femfum:Desktop:clau.key)
  
  
  
 %%% eliminat 26.03.09
 %%% L %%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%% valor de validaciķ de l'Applet
  
 %%(AFC0A6256022//MARC-5GU08U9FMO/Administrador)
  
 %#% fi de dades de capįalera (opcions de menú) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
 %%%testVM
 %%(VM inici ) == vmstatus == == ==
  
 %#%02% paquet de missatges BaBeL
 (%#%02%)==
 %# estratčgia per concentrar tots els missatges impresos i escrits indexats en una array
 %# indexant també en una array superior els diversos idiomes
 %# activem l'idioma desitjat amb un simple índex
  
 /bAbElArrAy
 [
  /cAtAlA % index 0
  /EnglIsh % index 1
 %% /EspAnOl % index 2
 %% /frAncAIs % index 3
 %% /dEUtch % index 4
 ] def
  
 /cAtAlA
 [
  %% 0
  (\n\nMRCT0 l'Applet No Parla Aquest Idioma\n\n)
  
  %% 1
  (\n\nl'Applet CaLi2CoPi treballa amb el gatell ... )
  
  %% 2
  (\n\nDesfem el Fast Web View\n)
  
  %% 3
  (\n\n > MRCT0 CaLi2CoPi Nomes Treballa amb Adobe Acrobat Distiller 5 o + ... \n\n)
  
  %% 4
  (\n > MRCT1 E R R O R al Path fitxer .PDF Inexistent ... \n\n)
  
  %% 5
  (\n ... FWV amb ByteOffset erroni a /L ... \n)
  
  %% 6
  ( ... Ventant ... )
  
  %% 7
  (\n ... Finalitzem Esborrant Fitxers Temporals ... \n\n)
  
  %% 8
  (\n\n\n > MRCT2 Estructura de Fitxer No Suportada per l'Applet <<<<)
  
  %% 9
  (\n ... FWV amb ByteOffset erroni a /H ... \n)
  
  %% 10
  (\n\n ... versio de PDF ... )
  
  %% 11
  (\n\n > MRCT3 ... PDF Encriptat ... Parem !\n\n)
  
  %% 12
  (\n\nNombre d'Objectes Interns ... )
  
  %% 13
  (\n\n > MRCT4 Teniu un ERROR de SINTAXI al Menu de l'Applet <<<< \n >>>> Reviseu l'opcio %%%% 1 %%%% del Menu <<<<\n\n\n)
  
  %% 14
  (\n ... reconstruint el PDF ... \n)
  
  %% 15
  ( ... em vesteixo d'home antic i empaito la masovera ...\n\n)
  
  %% 16
  (\n\n > MRCT5 ... PDF Signat o amb restes ... Parem !\n\n)
  
  %% 17
  (\n\n > MRCT6 ... Compressio PDF 1.5 No Suportada ... Parem !\n\n)
  
  %% 18
  (\n\n > MRCT7 Error d'estructura, PDF sense l'arrel /Pages ... Parem !\n\n)
  
  %% 19
  (\n ... eliminant objectes duplicats ... \n)
  
  %% 20
  (\n\n > MRCT8 ... Aquest PDF ha estat desencriptat per un Crack ... Parem !\n)
  
  %% 21
  (\n\n > MRCT9 Error a la Clau Digital ... \n\n)
  
  %% 22
  (\n\n \(!\) Plana de PDF sense Contents ... \n\n)
  
  %% 23
  (\n ... reinterpretant els Contents ... \n)
  
  %% 24
  (\n > MRCT10 Interpret PS Desconegut: Fes servir Distiller o Ghostscript <<<<\n\n)
  
  %% 25
  (\n\n > MRCT11 CaLi2CoPi Nomes Treballa amb Ghostscript 8 o + ... \n\n)
  
  %% 26
  (\n\n > MRCT12 cap de PDF erroni\n\n)
  
  %% 27
  (\n\n > MRCT13 cap de PDF amb brossa\n\n)
  
  %% 28
  (\n\n > MRCT14 cua de PDF erronia\n\n)
  
  %% 29
  (\n\n > MRCT15 cua de PDF amb brossa\n\n)
  
 ] def
  
 /EnglIsh
 [
  %% 0
  (\n\nMRCT0 The Applet doesn't Support this Language\n\n)
  
  %% 1
  (\n\nCaLi2CoPi PS Applet is Working with the switch ... )
  
  %% 2
  (\n\nRemoving the Fast Web View\n)
  
  %% 3
  (\n\nMRCT1 CaLi2CoPi Only Works with Adobe Acrobat Distiller 5 or +\n\n)
  
  %%4
  (\n\nMRCT2 Input PDF Path Syntax Error\n\n)
  
  %% 5
  (\nFWV with ByteOffset Error in /L\n)
  
  %% 6
  (Processing ... )
  
  %% 7
  (\nRemoving Temporal Files\n\n)
  
  %% 8
  (\n\n\nMRCT3 File Structure Not Supported by CaLi2CoPi PS Applet\n ... wrong object ... )
  
  %% 9
  (\nFWV with ByteOffset Error in /H\n)
  
  %% 10
  (\n\nPDF Version ... )
  
  %% 11
  (\n\nMRCT4 This PDF is Encrypted\n\n)
  
  %% 12
  (\n\nNumber of Internal Objects ... )
  
  %% 13
  (\n\nMRCT5 Syntax Error in the CaLi2CoPi Header\n\n)
  
  %% 14
  (\nRebuilding the PDF output\n)
  
  %% 15
  (\n\n)
  
  %% 16
  (\n\nMRCT6 This PDF Have Digital Signatures\n\n)
  
  %% 17
  (\n\nMRCT7 This PDF Have 1.5 Object Stream Compression\n\n)
  
  %% 18
  (\n\nMRCT8 Structural Error: the PDF /Pages Root is Missing\n\n)
  
  %% 19
  (\nRemoving Duplicate Objects\n)
  
  %% 20
  (\n\nMRCT9 This PDF are a Hacking product\n)
  
  %% 21
  (\n\nMRCT10 Digital Key Error\n\n)
  
  %% 22
  (\n\nMRCT19 This Page don't have Contents\n\n)
  
  %% 23
  (\nParsing the Contents again\n)
  
  %% 24
  (\nMRCT11 Unknown PS Interpreter: try Distiller or Ghostscript\n\n)
  
  %% 25
  (\n\nMRCT12 CaLi2CoPi Only Works with Ghostscript 8 or +\n\n)
  
  %% 26
  (\n\nMRCT13 Damaged PDF Header\n\n)
  
  %% 27
  (\n\nMRCT14 Dirty PDF Header\n\n)
  
  %% 28
  (\n\nMRCT15 Damaged PDF Footer\n\n)
  
  %% 29
  (\n\nMRCT16 Dirty PDF Footer\n\n)
  
  %% 30
  (\nWriting the XRay file\n)
  
  %% 31
  (\nMRCT17 XRay ERRORS )
  
  %% 32
  (\n\nMRCT18 Length is Missing in Data Stream\n\n)
  
  %% 33
  (\n\nMRCT20 This Page don't have Resources\n\n)
  
  %% 34
  (\nSplitting image Tints\n)
  
  %% 35
  (\n\nMRCT21 This image XObject don't have stream data\n\n)
  
  %% 36
  (\nSplitting Pattern&Shading Tints\n)
  
  %% 37
  (\nRebuilding a PDF for each Tint\n)
  
  %% 38
  (\n\nMRCT22 This document have more than 1 page ...)
  
  %% 39
  (\n\nMRCT23 Object with wrong&unsupported Length stream keyword ...\n\n)
  
  %% 40
  (\nRearranging stream object with wrong Length\n)
  
  %% 41
  (\n\nMRCT24 inLine ERROR: hem exhaurit la capacitat permesa per una inLine i ens hem menjat les dades sens trobar el final correcte!!!\n\n)
  
  %% 42
  (\n\nMRCT25 inLine ERROR: ens hem menjat les dades sens trobar el final correcte!!!\n\n)
  %% 43
  (\n\n ... This Page don't have Text\n\n)
  
  %% 44
  (\n >>>> Type 0 amb CMap NO suportat o Encoding inexistent <<<< \n\n\n)
  
  %% 45
  (\n\n >>>> NO HE TROBAT imatges trencades que es puguin cosir ... pleguem!\n\n\n)
 ] def
  
 /lleNguatge 1 def %% idioma a escollir (0 Catala . 1 Angles/DLL ... )
  
 {bAbElArrAy lleNguatge get} stopped
 {cAtAlA 0 get print flush EnglIsh 0 get print flush stop}if %% activem directament l'error d'idioma
  
 cvx exec
  
 /BaBeL exch def %% redefinim l'array de l'idioma actiu
 %%% fi de paquet babel
  
 %#%03% captura de dades de capįalera
 (%#%03%)==
 { %% stopped
  %% eliminat 26.03.09
  %% L valor de validacio de l'Applet
  %% /GENclau exch def
  %% K path+fitxer amb el valor de validacio de l'Applet
  %% /pathGENclau exch def
  
  %% J path de treball dels fitxers temporals
  /tEmp exch def
  %% I %% /FemXRay exch def % deixem x defecte fixada la generacio d'XRay
  %% H path + inici del nom del fitxer TXT informatiu XRay
  /FitxerXRay exch def
  %% G triem Que Li Fem Fer
  /QueLiFemFer exch def
  %% D extrau o reinsereix imatges JPEG
  QueLiFemFer 7 eq
  { %:07 REINSEREIX IMATGES JPEG
  pop pop pop pop pop pop pop pop pop pop pop %% ens carreguem les dades de E, F i Fbis
  /imatgesXreinserir exch def %% D extrau o reinsereix imatges JPEG
  /xQuinaArea exch def %% C marques de tall i reescriptura idem
  %% agafem el valor que hi hagi xq no petin els comparatius i/o si reincrustem els Contents trencats en 1 sol objecte
  } %/07 REINSEREIX IMATGES JPEG
  { %% C marques de tall i reescriptura idem
  QueLiFemFer 2 eq
  { %:02 MARQUES DE TALL
  pop pop pop pop pop pop pop pop pop pop pop %% ens carreguem les dades de E, F i Fbis
  /imatgesXreinserir exch def %% D extrau o reinsereix imatges JPEG
  /xQuinaArea exch def %% C marques de tall i reescriptura idem
  /llUm 50 def %% determina el marge que guanyarem x banda (total X = llUm x 2 total Y = llUm x 2)
  } %/02 MARQUES DE TALL
  {
  QueLiFemFer 3 eq %% tret que fem el corrector tipografic
  QueLiFemFer 4 eq %% tret que fem l'eina d'anālisi textual per #8 (JBC)
  QueLiFemFer 5 eq %% tret que fem la dada variable
  QueLiFemFer 8 eq %% tret que afegim vincles i marques transparents segons les dades de #4 (JBC)
  QueLiFemFer 12 eq %% tret que fem l'arbre jerārquic
  or or or or
  { %:03 CORRECTOR TIPOGRĀFIC
  %:04 ANĀLISI TEXTUAL
  %:05 dada variable
  %:08 ETIQUETA TEXT
  %:12 arbre jerārquic
  
 %% provisionalment carreguem els diccionaris xifrats a WinAnsi aquí?
 dup 1 get
 {
  [
  /Helvetica findfont
  dup length dict begin
  {
  1 index /FID ne
  {def}{pop pop}ifelse
  }forall
  /Encoding systemdict /EncodingDirectory get /WinAnsiEncoding get def
  currentdict end
  /Helvetica_WA exch definefont pop
  /Helvetica_WA findfont
  
  /Helvetica-Oblique findfont
  dup length dict begin
  {
  1 index /FID ne
  {def}{pop pop}ifelse
  }forall
  /Encoding systemdict /EncodingDirectory get /WinAnsiEncoding get def
  currentdict end
  /Helvetica-Oblique_WA exch definefont pop
  /Helvetica-Oblique_WA findfont
  
  /Helvetica-Bold findfont
  dup length dict begin
  {
  1 index /FID ne
  {def}{pop pop}ifelse
  }forall
  /Encoding systemdict /EncodingDirectory get /WinAnsiEncoding get def
  currentdict end
  /Helvetica-Bold_WA exch definefont pop
  /Helvetica-Bold_WA findfont
  ] /hemfetfindfont exch def
 }if
  
  %% Fbis arbre jerārquic
  /polyFEM exch def %% array de comportaments per l'arbre jerārquic i numerador de pāgines
  /Nji exch def %% array dels nivells jerārquics de l'índex
  
  %% F dada variable
  /sDADA exch def %% string amb el carācter separador dels registres a les línies de dada variable
  /aDADAv exch def %% array pel patrķ dels noms clau per cada línia de dada variable llegida
  /pathDADAv exch def %% path del fitxer de lectura de dada variable
  
  %% E anālisi textual i etiqueta text
  /torsimany exch def %% preparem el fitxer TXT de l'anālisi de sortida pels traductors en línia (Google, Apertium)?
  /noTrobat exch def %% missatge per (botķ cec) al fitxer no trobat a la base de dades
  /lleixaNOi exch def %% posem les etiquetes transparents en una lleixa NO imprimible?
  /rengsDtext exch def %% path i nom del fitxer dels rengs de text fruit de l'analisi de sortida
  torsimany %% treballem pel traductor?
  {
  pop pop %% eliminem les dades de capįalera
  %% posem els valors útils per extraure tot el text sense restriccions
  256/maxMot exch def %% llargaria maxima del mot sospitos
  1/minMot exch def %% llargaria minima del mot sospitos
  }
  {
  /maxMot exch def %% llargaria maxima del mot sospitos
  /minMot exch def %% llargaria minima del mot sospitos
  }ifelse
  /imatgesXreinserir exch def %% D extrau o reinsereix imatges JPEG
  /xQuinaArea exch def %% C marques de tall i reescriptura idem
  %% agafem el valor que hi hagi xq no petin els comparatius i/o si reincrustem els Contents trencats en 1 sol objecte
  %% KTCS valors x corrector tipografic o merging?
  /araE false def %% valor x defecte de la generacio d'etiquetes
  /QueTa () def %% valor x defecte de la cadena on muntarem el nom de l'etiqueta x generar la fusio
 %% (buffer.txt) dup length faPathA add string dup
 %% /pAthA exch def 0 tEmp putinterval
 %% pAthA exch faPathA exch putinterval
 %% pAthA /_auToRS exch def % adre?a del fitxer .TXT que fa de buffer d'extraccio d'anuncis
 %% _auToRS (w) file /auToRS exch def % fem el fitxer buffer.TXT que fa de buffer d'extraccio d'anuncis
  } %/12 arbre jerārquic
  %/08 ETIQUETA TEXT
  %/05 dada variable
  %/04 ANĀLISI TEXTUAL
  %/03 CORRECTOR TIPOGRĀFIC
  {
 %%(:-j016910)pstack quit
  pop pop %% ens carreguem les dades d'Fbis
  pop pop pop
  /torsimany exch def %% el necessitem a (%#%53bis%)
  pop pop pop pop pop %% ens carreguem les dades que no utilitzarem
  /imatgesXreinserir exch def %% D extrau o reinsereix imatges JPEG
  /xQuinaArea exch def %% C marques de tall i reescriptura idem
  %% agafem el valor que hi hagi xq no petin els comparatius i/o si reincrustem els Contents trencats en 1 sol objecte
  }ifelse
  }ifelse
  }ifelse
  %% B %% path + inici del nom del nou PDF reescrit i tractat segons l'opciķ escollida
  /aFeGeiX exch def
  %% A %% path i nom del PDF a tractar
  /fApplet exch def
  
  [
  { %% 00 XRay + reescriptura idem
  aFeGeiX dup length dup /iNSeRT exch def 3 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT (~0_) putinterval
  /aFeGeiX exch def
  }
  { %% 01 XRay + separaciķ de tintes
  aFeGeiX dup length dup /iNSeRT exch def 3 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT (~1_) putinterval
  /aFeGeiX exch def
  }
  { %% 02 XRay + creus de tall
  aFeGeiX dup length dup /iNSeRT exch def 3 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT (~2_) putinterval
  /aFeGeiX exch def
  }
  { %% 03 XRay + corrector tipogrāfic
  aFeGeiX dup length dup /iNSeRT exch def 3 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT (~3_) putinterval
  /aFeGeiX exch def
  }
  { %% 04 XRay + anālisi textual
  aFeGeiX dup length dup /iNSeRT exch def 3 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT (~4_) putinterval
  /aFeGeiX exch def
  }
  { %% 05 XRay + dada variable
  aFeGeiX dup length dup /iNSeRT exch def 3 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT (~5_) putinterval
  /aFeGeiX exch def
  }
  { %% 06 XRay + cosit d'imatges
  aFeGeiX dup length dup /iNSeRT exch def 3 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT (~6_) putinterval
  /aFeGeiX exch def
  }
  { %% 07 XRay + reinsereix imatges JPEG
  aFeGeiX dup length dup /iNSeRT exch def 3 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT (~7_) putinterval
  /aFeGeiX exch def
  }
  { %% 08 XRay + etiqueta text segons l'anālisi 04
  %% en cas del projecte JBC és la DLL qui controla el nom i el path del fitxer de sortida
  %%aFeGeiX dup length dup /iNSeRT exch def 3 add string
  %%dup 3 -1 roll 0 exch putinterval dup iNSeRT (~8_) putinterval
  %% /aFeGeiX exch def
  }
  { %% 09 XRay + extrau imatges a JPEG
  %% (segons convencions d'A3copiseny)
  aFeGeiX dup length dup /iNSeRT exch def 3 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT (~9_) putinterval
  /aFeGeiX exch def
  }
  { %% 10 Preflight amb capes
  aFeGeiX dup length dup /iNSeRT exch def 4 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT (~10_) putinterval
  /aFeGeiX exch def
  }
  {} %% 11 Torsimany 4+8
  { %% 12 arbre jerārquic
  aFeGeiX dup length dup /iNSeRT exch def 4 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT (~12_) putinterval
  /aFeGeiX exch def
  }
  ]
  QueLiFemFer get cvx exec
  
  %% deixem fixa la generaciķ d'XRay
  %%[
  %% {false /BoolXRay exch def}
  %% {true /BoolXRay exch def}
  %%]
  %%FemXRay get cvx exec
 } stopped
 {
  BaBeL 13 get print flush stop
 } if
  
 %% inici del missatge d'execuciķ de l'Applet
 BaBeL 1 get print flush
 QueLiFemFer 2 string cvs print flush
 BaBeL 15 get print flush
  
 %#%04% Detecta intčrprets Distiller i Ghostscript (o desconeguts) i n'avalua la versiķ
 (%#%04%)==
 /Ghost false def %% flag x detectar Ghostscript (true) o Distiller (false)
 /soRTim false def %% flag de sortida per errors
 %% /vldrs true def % podem treballar amb transparencies?
  
 systemdict /product known
 { %% és Ghostscript?
  systemdict /product get (Ghostscript) search
  { %% si, és GS
  pop pop pop
  %% és una versiķ prou estable?
  systemdict /revision get cvi 800 ge
  { %% es 8.54 o + x treballar amb transparčncies?
  /Ghost true def
  }
  {
  %% és 8.54 o + per treballar amb transparčncies?
  %%(\n\n ginyB42 necessita Ghostscript 8.54 o + per treballar amb transparencies \n ... el dial del llindar quedara perfilat ... ) print flush
  %% /vldrs false def
  BaBeL 25 get dup print flush /soRTim true def
  }ifelse
  }
  { %% no és pas GS
  systemdict /product get (Distiller) search
  { %% si, és Distiller
  pop pop pop
  /currentdistillerparams where
  { %% és Distiller
  pop currentdistillerparams /CoreDistVersion get 5000 lt % és 5.0 o + ?
  {
  %% avalua si és 6000 (6.0) o superior x poder activar les transparčncies
  %%(\n\n ginyB42 necessita Distiller 6.0 o + per treballar amb transparencies \n ... el dial del llindar quedara perfilat ... ) print flush
  %% /vldrs false def
  BaBeL 3 get dup print flush /soRTim true def
  }if
  }
  { %% seria estrany que no tingués currentdistillerparams ...
  %% intčrpret desconegut
  BaBeL 24 get dup print flush /soRTim true def
  } ifelse
  }
  { %% és una altra cosa (p.e. Apple pstopdf) ...
  systemdict /product get (\n\n) print flush print flush
  ( ... interpret NO implementat per aquest programari <<<\n ... PLEGUEM!\n\n) print flush /soRTim true def
  }ifelse
  }ifelse
 }
 {
  BaBeL 24 get dup print flush /soRTim true def
 }ifelse
 soRTim {stop}if %% és millor treballar amb stop que amb quit? (Ghostscript desapareix!)
  
 %%% UTILITAT PER COMPROVAR EL S.O.
 %%mark % tanca de recollida d'escombraries
  
 %% comprova si es Mac o Win/Linux/Unix
  
 %% /MoW 0 def
 %% comprova si trova fitxers o directoris amb l'identificador del Mac
 %%(:*) {MoW 1 add /MoW exch def} 100 string filenameforall
 %% MoW 0 eq
  
 %#%05% estratčgia més efectiva per saber el separador que utilitza l'intčrpret
 %# per tal de definir tots els fitxers temporals de treball que necessitem
 %# i d'alguna manera saber en quin OS treballem: (:) Mac clāssic o (/) Win/Linux/Unix
 %# per tal de generar tots els path de treball temporal a disc
 (%#%05%)==
 currentsystemparams /GenericResourcePathSep get
 (/) eq
 {
  tEmp length /faPath exch def
  /bUsca (/) def %% utilitzat a l'Applet per extraure el nom del fitxer
  
  (*) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /TotEmp exch def %% utilitzat a l'Applet per esborrar tots els fitxers
  
  (??????????_?????) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /EtEmp exch def %%(./tmp/??????????_?????) % utilitzat a l'Applet per esborrar tots els fitxers de 16 carācters
  
  (*.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /EtEmp2 exch def %%(./tmp/*.obj) % utilitzat a l'Applet per llegir i esborrar tots els trossos de PDF
  
  (*.nou) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /EtEmp3 exch def %% utilitzat a l'Applet per esborrar tots els nous streams a disc
  
  tEmp length /faPathA exch def
  (afegeix.obj) dup length faPathA add string dup
  /pAthA exch def 0 tEmp putinterval
  pAthA exch faPathA exch putinterval
  pAthA /repiCa exch def %% utilitzat per l'Applet per afegir els Contents originals en un sol stream
  
  (Sfncns.obj) dup length faPathA add string dup
  /pAthA exch def 0 tEmp putinterval
  pAthA exch faPathA exch putinterval
  pAthA /funKy exch def %% utilitzat per l'Applet per desar els streams de les funcions decodificades
  
  (1__________.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /NOMfitx exch def %%(./tmp/1__________.obj) % utilitzat a l'Applet per desar tots els trossos de PDF abans de ser tractat
  
  (Sxref______.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /SUBxref exch def %%(./tmp/Sxref______.obj) % utilitzat a l'Applet per desar les subseccions de l'xref
  
  (Txref______.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /TOTxref exch def %%(./tmp/Txref______.obj) % utilitzat a l'Applet per desar tota l'xref
  
  (contentsdenou.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /l'objectenet exch def %% utilitzat per l'Applet per reescriure els Contents unificats per mitjā les seves redefinicions
  
  (contentsdenou2.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /l'objectenet2 exch def %% utilitzat per l'Applet per aplicar el tractament dels Contents unificats per mitjā les seves redefinicions
  
  (contentsdenou3.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /l'objectenet3 exch def %% utilitzat per l'Applet per aplicar el tractament dels streams dels Patterns&Shadings per mitjā les seves redefinicions
  
  (contentsdenou4.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /l'objectenet4 exch def %% utilitzat per l'Applet per aplicar el tractament dels streams dels Patterns&Shadings per mitjā les seves redefinicions
  
  (contentsdenou5.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /l'objectenet5 exch def %% utilitzat per l'Applet per aplicar el tractament dels streams dels Form XObject per mitjā les seves redefinicions
  
  (brossa.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /BRoSSa exch def %% utilitzat per l'Applet per llenįar informaciķ
  
  (brossa2.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /BRoSSa2 exch def %% utilitzat per l'Applet per llenįar informaciķ
  
  (1__________.nou) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /nousStreams exch def %% utilitzat per l'Applet per desar els nous streams redefinits al disc
  
  (1__________.cob) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /nousCoOb exch def %% utilitzat per l'Applet per desar els nous composite objects (dics+arrays) repicats al disc
 } %% Win/Linux/Unix
 { %% Mac clāssic
  tEmp length /faPath exch def
  /bUsca (:) def %% utilitzat a l'Applet per extraure el nom del fitxer
  
  (*) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /TotEmp exch def %% utilitzat a l'Applet per esborrar tots els fitxers
  
  (??????????_?????) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /EtEmp exch def %%(./tmp/??????????_?????) % utilitzat a l'Applet per esborrar tots els fitxers de 16 carācters
  
  (*.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /EtEmp2 exch def %%(./tmp/*.obj) % utilitzat a l'Applet per llegir i esborrar tots els trossos de PDF
  
  (*.nou) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /EtEmp3 exch def %% utilitzat a l'Applet per esborrar tots els nous streams a disc
  
  tEmp length /faPathA exch def
  (afegeix.obj) dup length faPathA add string dup
  /pAthA exch def 0 tEmp putinterval
  pAthA exch faPathA exch putinterval
  pAthA /repiCa exch def %% utilitzat per l'Applet per afegir els Contents originals en un sol stream
  
  (Sfncns.obj) dup length faPathA add string dup
  /pAthA exch def 0 tEmp putinterval
  pAthA exch faPathA exch putinterval
  pAthA /funKy exch def %% utilitzat per l'Applet per desar els streams de les funcions decodificades
  
  (1__________.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /NOMfitx exch def %%(./tmp/1__________.obj) % utilitzat a l'Applet per desar tots els trossos de PDF abans de ser tractat
  
  (Sxref______.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /SUBxref exch def %%(./tmp/Sxref______.obj) % utilitzat a l'Applet per desar les subseccions de l'xref
  
  (Txref______.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /TOTxref exch def %%(./tmp/Txref______.obj) % utilitzat a l'Applet per desar tota l'xref
  
  (contentsdenou.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /l'objectenet exch def %% utilitzat per l'Applet per reescriure els Contents unificats per mitjā les seves redefinicions
  
  (contentsdenou2.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /l'objectenet2 exch def %% utilitzat per l'Applet per aplicar el tractament dels Contents unificats per mitjā les seves redefinicions
  
  (contentsdenou3.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /l'objectenet3 exch def %% utilitzat per l'Applet per aplicar el tractament dels streams dels Patterns&Shadings per mitjā les seves redefinicions
  
  (contentsdenou4.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /l'objectenet4 exch def %% utilitzat per l'Applet per aplicar el tractament dels streams dels Patterns&Shadings per mitjā les seves redefinicions
  
  (contentsdenou5.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /l'objectenet5 exch def %% utilitzat per l'Applet per aplicar el tractament dels streams dels Form XObject per mitjā les seves redefinicions
  
  (brossa.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /BRoSSa exch def %% utilitzat per l'Applet per llenįar informaciō
  
  (brossa2.obj) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /BRoSSa2 exch def %% utilitzat per l'Applet per llenįar informaciķ
  
  (1__________.nou) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /nousStreams exch def %% utilitzat per l'Applet per desar els nous streams redefinits al disc
  
  (1__________.cob) dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU /nousCoOb exch def %% utilitzat per l'Applet per desar els nous composite objects (dics+arrays) repicats al disc
 }ifelse %% sintaxi segons S.O.
  
 %% podriem passar amb una sola llista de path !!!!!
  
 %%cleartomark % recull les possibles escombraries (p.e. a Mac OS)
 %%% fi d'OS
  
 %#%06% %%%DLL%%% Atenciķ: aixō no li agrada a la DLL i al comprimir-lo (Flate) cal treure-ho!!!
 (%#%06%)==
 %% ara esborrem tots dels fitxers del tmp al principi (i si no podem deixem un missatge)
 BaBeL 7 get print flush
 TotEmp {
  {deletefile} stopped
  {
  (\n) print flush print flush ( <<< NO he pogut esborrar el Temporal !!\n) print flush
  }if
  } 256 string filenameforall
 %%%DLL%%%
  
 %% eliminat 26.03.09
 %%07%% VALIDACIO DE LA CLAU DIGITAL IDENTIFICATIVA
 %%(%07%)==
 %%save
 %% clau digital generada pel nou sistema GenClau
 %% GENclau
 %%{pathGENclau (r) file 256 string readstring pop}stopped
 %%{ BaBeL 21 get print flush quit } if
 %%eq not % es igual ?
 %%{
 %% BaBeL 21 get print flush quit
 %%}if
 %%restore
 %%% FI DE CLAU DIGITAL IDENTIFICATIVA
  
 %#%08% aquí llistem x la pantalla el nom del PDF que explorem ...
 (%#%08%)==
 BaBeL 6 get print flush
 fApplet dup
 {
  bUsca search
  {pop pop}{exit}ifelse
 }loop dup /nomFITX exch def print flush(\n\n)print flush
 %% comprovem que existeixi ...
 status
 {pop pop /bytFITX exch def pop} %% bytes totals del fitxer pel trillador ...
 {BaBeL 4 get print flush stop}
 ifelse
  
 %#%09% aquí posem un detector de si compleix la convenciķ dels 1024 del cap i la cua
 %# i un detector de brossa del PDF (si la trobem, de moment descartem aquests fitxers i deixem x més endavant la creaciķ d'un netejador)
 (%#%09%)==
 %% comprovem si duu el cap normatiu, dins dels marges 1024
 fApplet (r) file 0 (%PDF-) /SubFileDecode filter 1025 string readstring pop
 dup length 0 eq %% i si duu brossa
 {
  pop
  /byteCapNet 0 def %% offset a partir del qual el PDF es net
 }
 {
  dup length 1025 eq
  {
  BaBeL 26 get print flush pop stop %%quit
  }
  {
  dup (%!PS-Adobe-) search
  {
  dup /elCAP exch def length /byteCapNet exch def %% offset a partir del qual el PDF es net
  (\n\n >>>> cap de PDF amb convencio %!PS-Adobe\n\n) print flush
  pop pop pop
  }
  {
  dup /elCAP exch def length /byteCapNet exch def %% offset a partir del qual el PDF es net
  }ifelse
  }ifelse
 }ifelse
 byteCapNet 0 eq
 {
  fApplet (r) file 10 string readline pop (%PDF-) anchorsearch
  pop pop /vPDF exch def %% desem la versio del cap de PDF
  %% mes endavant comprovarem que no dugui l'entrada Version dins el Catalog
 }
 {
  {elCAP cvx exec} stopped
  { %% sortim si duu caracters que donen error a l'interpret ...
  BaBeL 27 get print flush stop %quit
  } if %% la donem x bona si es formada per caracters inofensius x l'interpret (CRs, espais, nulls, etc)
 }ifelse
  
 %% comprovem si la cua es normativa
 fApplet (r) file dup bytFITX 1024 sub dup % calculem on s'escau el byte dels darrers 1024 del fitxer
 0 lt
 { %% ens assegurem que els PDF no sigui + petit que 1024
  pop /darrers1024 0 def /CUAfa bytFITX def
 }
 {
  /darrers1024 exch def /CUAfa 1024 def
 }ifelse
  
 darrers1024 setfileposition %% ens posicionem als darrers 1024
  
 %% escorcollem recursivament fins el darrer %%EOF (si hi es)
  
 1024 string readstring pop
  
 {
  (%%EOF) search
  {pop pop}{exit}ifelse
 }loop /laCUA exch def
  
 laCUA length CUAfa eq
 { %% si es idem es que no ha trobat %%EOF dins els darrers 1024 bytes del fitxer
  BaBeL 28 get print flush stop %quit
 }
 { %%EOF existeix
  { %% executem la cadena que hi ha despres del darrer %%EOF x saber-ne la validesa
  laCUA cvx exec
  } stopped
  { %% ens aturem si es formada per caracters que donen error a l'interpret
  BaBeL 29 get print flush stop %quit
  } if %% la donem x bona si es formada per caracters inofensius x l'interpret (CRs, espais, nulls, etc)
 }ifelse
  
 %% fi del detector de brossa i convencio 1024 del cap i cua
  
 %#%10% trillador de PDF per superar la limitaciķ 65535 famosa
 %# de passada podem saber d'antuvi de quants objectes disposa
 (%#%10%)==
  
 %% trencapdf.ps
  
 %% cal veure si aquesta quantitat cal variar-la en funcio del nombre d'objectes
 %% del fitxer o les caracteristiques del l'interpret PS/maquina que utilitzem
 %% amb aquest parametre s'hi pot jugar x ventar tots els objectes al disc (sempre que matem la funcio d'esborrar fitxers del final)
 /tiBadesFINS 500 def % comptador de com agruparem els fitxers al trillar-los
  
 %% Us del filtre SubFileDecode com a trencador de fitxers PDF a traves d'una cadena
 %% de text, podent agrupar cada n vegades que ha estat trobada, en fitxers numerats
 %% tambe serveix per fer el recompte d'objectes existents
 save
 fApplet /nOm exch def %% cadena amb el nom del fitxer a llegir
  
 /FINS (endobj) def %% cadena per on trencarem el fitxer
 FINS length /salta'tFINS exch def
  
 /tiBades 0 def %% comptador de vegades que em trobat FINS
 /numFITX 1 def %% digit sequencial pel nom del fitxer
  
 nOm (r) file %% arxiu a llegir
 /LLEgIR exch def
  
 %%
 NOMfitx
 (w) file %% arxiu final amb el resultat de la recerca
 /ESCRiURE exch def
 %%
  
 NOMfitx length 15 sub /posNum exch def %% posicio d'inici fixa del numerador d'objectes
  
 /engrapa 65535 def %% buffer de lectura (65535 es el maxim)
 /posFITX 0 def %% valor inicial del comptador de la posicio en bytes del fitxer de lectura
  
 { %% inici del loop 1
  LLEgIR %% fitxer a llegir
  dup posFITX setfileposition %% posiciona en el lloc correcte l'inici de la recerca
  0 FINS %% s'aturara quan trobi la cadena
  /SubFileDecode filter %% dona un fitxer de lectura on s'inicia la recerca de la cadena final FINS
  { %% inici del loop comptador de les dades llegides
  dup engrapa string readstring
  not
  {
  dup ESCRiURE exch writestring %% escrivim la cadena al fitxer d'escriptura
  length posFITX add /posFITX exch def pop exit
  } if
  dup ESCRiURE exch writestring %% escrivim la cadena al fitxer d'escriptura
  length posFITX add /posFITX exch def
  } loop %% final del loop comptador
  
  posFITX salta'tFINS add /posFITX exch def %% comptador de posicions del fitxer de lectura
  LLEgIR posFITX setfileposition %% ens posicionem en el punt on hem d'iniciar la recerca de la cadena final FINS
  tiBades 1 add /tiBades exch def
  posFITX bytFITX ge {exit} if %% si la posicio del fitxer es igual a a la seva capacitat total (o limit de bytes establerts) es que som al final de la seva lectura i per tant sortim del programa
  ESCRiURE dup FINS writestring 13 write %% hi afegim la cadena final que busquem
  tiBades tiBadesFINS eq
  {
  %% inicialitzador dels noms i fitxers sequencials
  ESCRiURE closefile
  /tiBades 0 def %% comptador de vegades que em trobat FINS
  numFITX 1 add /numFITX exch def
  NOMfitx
  posNum %% EP!
  numFITX 10 string cvs putinterval
  NOMfitx
  (w) file %% arxiu final amb el resultat de la recerca
  /ESCRiURE exch def
  %%
  } if
 } loop %% final del loop 1
  
 %% missatge per pantalla (Distiller)
 %%(\n Hem Trencat el PDF en ... ) print flush numFITX 10 string cvs print flush
 %%( ... Fitxers .obj \n\n) print flush
  
 %% posem per la DLL dins XRay el nombre d'objectes ?
 %%(\n\n Aquest PDF te ... ) print flush
 BaBeL 12 get print flush
 numFITX 1 sub tiBadesFINS mul tiBades add
 1 sub %% hem detectat que sempre en marcava 1 de mes!
 dup globaldict /objPDF 3 -1 roll put %% desem a Globaldict el nombre d'objectes x poder-lo incrustar + avall al dic PeDeEfa d'XRay
 10 string cvs print flush (\n)print flush
 %%( ... objectes) print flush
 restore
 %% fi de trencapdf.ps (trillador)
  
 %%%CALi2COPi%%%
 %% aqui teniem definit el fitxer on reconstruir el PDF
 %%%CALi2COPi%%%
  
 %#%11% Nou algorisme que reescriu un diccionari, basat en espiadic_fura2.ps
 %# per tal de no tenir problemes amb els diccionaris recursius (per més que n'hi hagin!)
 (%#%11%)==
 %% cal estudiar bé si posem EOL en certs punts d'aquest ventador
  
 /espiadic_fura2
 {
  /AraVento_D exch def
  /iDic 0 def %% índex de diccionaris a incrustar a l'array
  /NohAdic true def %% és imprescindible que comenci amb true ?
  
  %% AraVento i AraBorro sķn variables que s'aniran alternant el diccionari intern d'esborrat
  %% de les dades a mida que es vagin ventant
  AraVento_D 10 dict copy /AraBorro_D exch def
  
  %% la idea és fer una array dels diccionaris que anem ventant (cōpies no vinculades)
  %% l'array anirā creixent a mida que anem entrant a diccionaris més interns
  %% i d'aquestos anirem eliminant els parells ventats a mida que els anem ventant
  %% fent-ne l'actualitzaciķ/eliminaciķ de l'array quan convingui
  
  /Adic 1 array def %% paquet amb els diccionaris que anem ventant
  
  { %% loop 1
  { %% loop 2
  AraVento_D
  { %% forall
  dup type /dicttype eq %% hem d'escriure el diccionari a mida que l'anem trobant
  {
  exch dup AraBorro_D exch undef %% dono de baixa el parell
  %% escrivim la clau
  127 string cvs %% converteix a cadena el nom Clau amb el māxim permés per a un literal al PDF 1.3
  %% posem el carācter / per la clau literal
  dup length 1 add string dup 0 (/) putinterval dup 3 -1 roll 1 exch putinterval
  Objected'Ara exch writestring
  %% Objected'Ara ( ) writestring
  Objected'Ara ( <<) writestring %% escrivim l'inici del diccionari
  iDic 1 add /iDic exch def %% comptador d'índex pel proper diccionari
  %% ampliem l'array de diccionari a 1 més i reincrustem l'anterior
  Adic length 1 add array dup Adic 0 exch putinterval /Adic exch def
  Adic exch iDic exch put %% incrustem el diccionari que ventem a la darrera posiciķ
  Adic iDic 1 sub AraBorro_D put %% incrustem el diccionari cōpia purgat a la posiciķ anterior
  /NohAdic false def
  Adic iDic get /AraVento_D exch def
  AraVento_D 10 dict copy /AraBorro_D exch def exit
  }
  {
  exch dup AraBorro_D exch undef %% dono de baixa el parell
  %% escrivim la clau
  127 string cvs %% converteix a cadena el nom Clau amb el māxim permés per a un literal al PDF 1.3
  %% posem el carācter / per la clau literal
  dup length 1 add string dup 0 (/) putinterval dup 3 -1 roll 1 exch putinterval
  Objected'Ara exch writestring
  Objected'Ara ( ) writestring
  %% escrivim el valor esbrinant de quina mena
  dup type /integertype eq
  {
  256 string cvs
  }
  {
  dup type /booleantype eq
  {
  6 string cvs
  }
  {
  dup type /realtype eq
  {
  10000 mul truncate 10000 div
  256 string cvs
  }
  {
  dup type /stringtype eq
  {
  %% 65535 string cvs % es redundant?
  %% salvaparent2.ps
  %% de com reescriure una string x solucionar el problema de no deixar-nos
  %% el backslash \ i els parentesi () sense el \ que els marca com a carācters
  %% adaptat de l'algorisme NRMLTZDR2.ps del cercador de palˇlíndroms TURURUT2
  /fora
  [ %% paquet de carācters a cercar
  (\134) %% \
  (\050) %% (
  (\051) %% )
  ] def
  /FAfora 3 def %% pestell de sortida del loop
  /foraX
  [ %% paquet de substituciķ de carācter
  (\\\\)
  (\\\()
  (\\\))
  ] def
  /ifora 0 def %% índex de fora
  %% aquí la cadena a reescriure correctament
  %% (el primer \\\)el segon\\\( el tercer \)\(el quart i el cinquč\(\))
  mark exch
  { %% loop general
  { %% loop cerca/subs de carācters
  fora ifora get search
  {
  exch pop
  dup length dup 2 add string dup 3 -1 roll foraX ifora get putinterval
  dup 3 -1 roll 0 exch putinterval
  }
  {
  exit
  }ifelse
  exch
  } loop
  %% aquest loop capgira tots els elements trobats a la pila mentre n'hi hagi més d'un
  counttomark 1 gt
  {
  counttomark /atura't exch def
  /ici 2 def
  {ici -1 roll ici 1 add /ici exch def ici atura't gt {exit} if} loop
  { %% loop empalmador de les cadenes trobades en 1 sola
  dup length dup 3 index length add string dup 4 -1 roll
  0 exch putinterval dup 3 -1 roll 4 -1 roll putinterval
  counttomark 1 eq {exit} if
  } loop
  } if
  ifora 1 add /ifora exch def
  FAfora ifora eq {exit}if
  } loop
  exch pop %% ens carreguem mark
  %% fi de salvaparent2.ps
  %% posem els carācters ( ... ) com a cadena
  dup length dup /lAstC exch def 2 add string dup 0 (\() putinterval
  dup 3 -1 roll 1 exch putinterval dup lAstC 1 add (\)) putinterval
  }
  {
  dup type /nametype eq
  {
  128 string cvs
  dup length 16 eq
  {
  dup 10 get 95 eq %% ens assegurem que el carācter central sigui un _
  { %% reconstruīm les tres dades originals de referčncia indirecta d'objecte (# # R)
  (_) search pop exch pop exch
  {
  (_) search {pop pop}{(R) exit}ifelse
  } loop
  3 -1 roll Objected'Ara exch writestring Objected'Ara ( ) writestring exch
  Objected'Ara exch writestring Objected'Ara ( ) writestring %% deixem la (R) per cua de l'algorisme
  }
  { %% posem el carācter / per la clau literal
  dup length 1 add string dup 0 (/) putinterval dup 3 -1 roll 1 exch putinterval
  }ifelse
  }
  { %% posem el carācter / per la clau literal
  dup length 1 add string dup 0 (/) putinterval dup 3 -1 roll 1 exch putinterval
  }ifelse
  } %% tots aquest tipus els posa el seu valor en una cadena de text i després en un paquet
  {
  dup type /arraytype eq
  { %% aquí cridem l'espiapaq_fura3 i deixem una string buida per que no peti
  /salva'l save def espiapaq_fura3 salva'l restore ()
  }
  {
  dup type /nulltype eq
  {
  pop (null)
  }
  { %% la resta de tipus que quedin es posa en una cadena de text el nom del tipus
  type 256 string cvs
  } ifelse
  } ifelse %% del arraytype
  } ifelse %% de nametype
  } ifelse %% del stringtype
  } ifelse %% del realtype
  } ifelse %% del booleantype
  } ifelse %% del integertype
  Objected'Ara exch writestring
  Objected'Ara %% dup
  ( ) writestring %% flushfile
  %% fi d'escriptura del valor i esbrinat de la mena
  }ifelse
  } forall
  NohAdic {exit}if %% sortim si al diccionari més allunyat ja no en niua cap més
  /NohAdic true def %% cada vegada que acabem de ventar un diccionari ...
  } loop %% 2
  Adic length 0 eq {exit} if %% filtre per l'array de diccionaris buida
  Adic iDic AraBorro_D put %% incrustem el diccionari acabat de ventar i purgat a la darrera posiciķ
  %% eliminem enrera els diccionaris buits i reconstruim Adic a la mida justa per continuar el ventat
  %% només sortirem quan Adic estigui a 0
  { %% loop
  Adic iDic get length 0 eq %% quan trobem un diccionari que no és a 0 sortim del purgat d'Adic
  {
  Adic length 1 sub Adic exch 0 exch getinterval /Adic exch def
  Adic length 0 eq {exit} if
  %% aquí la cua del diccionari
  Objected'Ara %%d up
  (>> ) writestring %% flushfile % escrivim la cua del diccionari
  }
  {
  exit
  } ifelse
  iDic 1 sub /iDic exch def
  } loop
  Adic length 0 eq {exit} if %% pleguem ?
  Adic iDic get /AraVento_D exch def %% agafem el darrer diccionari no zero per continuar el ventat
  AraVento_D 10 dict copy /AraBorro_D exch def %% en fem la cōpia pel purgat
  } loop %% 1
 } bind def
 %% fi de l'algorisme que reescriu un diccionari espiadic_fura2
  
 %#%12% Nou algorisme que reescriu una array, basat en epfadict.ps
 %# igual que espiapaq_fura2 pot fer tota mena d'arrays recursius (per més que n'hi hagin!)
 (%#%12%)==
 %% perō ara gestiona molt millor la VM i les arrays gegants
  
 /espiapaq_fura3
 {
  %% fem el diccionari on definirem els objectype, així evitem treballar amb els if recursius
  <<
  %% és un paquet ...
  /arraytype
  {
  %% exch dup AraBorro exch undef % dķno de baixa l'element
  %% donem de baixa un element cada vegada (cal saber el seu índex) marcant-lo amb un null
  /iAo 0 def %% índex general del paquet original
  AraBorro_A
  { %% forall
  iAo iKill eq
  {
  AraBorro_A iAo %% null
  mark put
  pop
  } %% si és l'element que hem de matar, doncs el matem
  {
  pop
  } ifelse
  iAo 1 add /iAo exch def
  } forall
  Objected'Ara ([) writestring %% escrivim l'inici del paquet
  iPaq 1 add /iPaq exch def %% comptador d'índex pel proper paquet
  %% ampliem l'array de paquets a 1 més i reincrustem l'anterior
  Apaq length 1 add array dup Apaq 0 exch putinterval /Apaq exch def
  Apaq exch iPaq exch put %% incrustem el paquet que ventem a la darrera posiciķ
  %% purguem els nulls d'AraBorro que hi hagin
  /iKill 0 def %% l'índex a matar
  { %% loop
  /iAo 0 def %% índex general del paquet original
  /iAr 0 def %% índex general del paquet a repicar
  AraBorro_A
  iKill get %% null
  mark eq
  {
  AraBorro_A dup length 1 sub array
  /laNova exch def %% el paquet repicat sempre tindrā n-1 elements
  { %% forall
  iAo iKill eq
  {
  pop
  iAr 1 sub /iAr exch def
  } %% si és l'element que hem de matar, doncs el matem
  {
  laNova exch iAr exch put
  } ifelse %% la resta els repiquem a laNova
  iAo 1 add /iAo exch def
  iAr 1 add /iAr exch def
  } forall
  laNova /AraBorro_A exch def
  iKill 1 sub /iKill exch def %% comptador per saber l'índex a matar
  } if
  iKill 1 add /iKill exch def %% comptador per saber l'índex a matar
  AraBorro_A length /maxLoop exch def %% quan sortim
  iKill maxLoop ge {exit} if
  } loop
  %% fi del purgat de nulls
  Apaq iPaq 1 sub AraBorro_A put %% incrustem el paquet cōpia purgat a la posiciķ anterior
  /NohApaq false def
  Apaq iPaq get /AraVento_A exch def
  AraVento_A dup length array copy /AraBorro_A exch def exit
  }
  %% és un enter ...
  /integertype
  {
  %% fix per a tots els objectes
  %% donem de baixa un element cada vegada (cal saber el seu índex) marcant-lo amb un null
  /iAo 0 def %% índex general del paquet original
  AraBorro_A
  { %% forall
  iAo iKill eq
  {
  AraBorro_A iAo %% null
  mark put
  pop
  } %% si és l'element que hem de matar, doncs el matem
  {
  pop
  } ifelse
  iAo 1 add /iAo exch def
  } forall
  %% fix per a tots els objectes
  256 string cvs
  }
  %% és un booleā ...
  /booleantype
  {
  %% fix per a tots els objectes
  %% donem de baixa un element cada vegada (cal saber el seu índex) marcant-lo amb un null
  /iAo 0 def %% índex general del paquet original
  AraBorro_A
  { %% forall
  iAo iKill eq
  {
  AraBorro_A iAo %% null
  mark put
  pop
  } %% si és l'element que hem de matar, doncs el matem
  {
  pop
  } ifelse
  iAo 1 add /iAo exch def
  } forall
  %% fix per a tots els objectes
  6 string cvs
  }
  %% és un real ...
  /realtype
  {
  %% fix per a tots els objectes
  %% donem de baixa un element cada vegada (cal saber el seu índex) marcant-lo amb un null
  /iAo 0 def %% índex general del paquet original
  AraBorro_A
  { %% forall
  iAo iKill eq
  {
  AraBorro_A iAo %% null
  mark put
  pop
  } %% si és l'element que hem de matar, doncs el matem
  {
  pop
  } ifelse
  iAo 1 add /iAo exch def
  } forall
  %% fix per a tots els objectes
  10000 mul truncate 10000 div
  256 string cvs
  }
  %% és una cadena ...
  /stringtype
  {
  %% fix per a tots els objectes
  %% donem de baixa un element cada vegada (cal saber el seu índex) marcant-lo amb un null
  /iAo 0 def % índex general del paquet original
  AraBorro_A
  { %% forall
  iAo iKill eq
  {
  AraBorro_A iAo %% null
  mark put
  pop
  } %% si és l'element que hem de matar, doncs el matem
  {
  pop
  } ifelse
  iAo 1 add /iAo exch def
  } forall
  %%% fix per a tots els objectes
  %%% salvaparent2.ps
  %%% de com reescriure una string per solucionar el problema de no deixar-nos
  %%% el backslash \ i els parentesi () sense el \ que els marca com a carācters
  %%% adaptat de l'algorisme NRMLTZDR2.ps del cercador de palˇlíndroms TURURUT2
  /fora
  [ %% paquet de carācters a cercar
  (\134) %% \
  (\050) %% (
  (\051) %% )
  ] def
  /FAfora 3 def %% pestell de sortida del loop
  /foraX
  [ %% paquet de substituciķ de carācter
  (\\\\)
  (\\\()
  (\\\))
  ] def
  /ifora 0 def %% índex de fora
  %% aquí la cadena a reescriure correctament
  %% (el primer \\\)el segon\\\( el tercer \)\(el quart i el cinque\(\))
  mark exch
  { %% loop general
  { %% loop cerca/subs de carācters
  fora ifora get search
  {
  exch pop
  dup length dup 2 add string dup 3 -1 roll foraX ifora get putinterval
  dup 3 -1 roll 0 exch putinterval
  }
  {
  exit
  }ifelse
  exch
  } loop
  %% aquest loop capgira tots els elements trobats a la pila mentre n'hi hagi més d'un
  counttomark 1 gt
  {
  counttomark /atura't exch def
  /ici 2 def
  {ici -1 roll ici 1 add /ici exch def ici atura't gt {exit} if} loop
  { %% loop empalmador de les cadenes trobades en 1 sola
  dup length dup 3 index length add string dup 4 -1 roll
  0 exch putinterval dup 3 -1 roll 4 -1 roll putinterval
  counttomark 1 eq {exit} if
  } loop
  } if
  ifora 1 add /ifora exch def
  FAfora ifora eq {exit}if
  } loop
  exch pop %% ens carreguem mark
  %% fi de salvaparent2.ps
  %% posem els carācters ( ... ) com a cadena
  dup length dup /lAstC exch def 2 add string dup 0 (\() putinterval
  dup 3 -1 roll 1 exch putinterval dup lAstC 1 add (\)) putinterval
  }
  %% és un literal ...
  /nametype
  {
  %% fix per a tots els objectes
  %% donem de baixa un element cada vegada (cal saber el seu índex) marcant-lo amb un null
  /iAo 0 def %% índex general del paquet original
  AraBorro_A
  { %% forall
  iAo iKill eq
  {
  AraBorro_A iAo %% null
  mark put
  pop
  } %% si és l'element que hem de matar, doncs el matem
  {
  pop
  } ifelse
  iAo 1 add /iAo exch def
  } forall
  %% fix per a tots els objectes
  128 string cvs
  dup length 16 eq
  {
  dup 10 get 95 eq %% ens assegurem que el carācter central sigui un _
  { %% reconstruīm les tres dades originals de referčncia indirecte d'objecte (# # R)
  (_) search pop exch pop exch
  {
  (_) search {pop pop}{(R) exit}ifelse
  } loop
  3 -1 roll Objected'Ara exch writestring Objected'Ara ( ) writestring exch
  Objected'Ara exch writestring Objected'Ara ( ) writestring %% deixem la (R) per cua de l'algorisme
  }
  { %% posem el carācter / per la clau literal
  dup length 1 add string dup 0 (/) putinterval dup 3 -1 roll 1 exch putinterval
  }ifelse
  }
  { %% posem el carācter / per la clau literal
  dup length 1 add string dup 0 (/) putinterval dup 3 -1 roll 1 exch putinterval
  }ifelse
  } %% tots aquest tipus els posa el seu valor en una cadena de text i després en un paquet
  %% és un diccionari ...
  /dicttype
  { %% aquí cridem l'espiadic_fura2 i deixem una string buida per que no peti
  %% fix per a tots els objectes
  %% donem de baixa un element cada vegada (cal saber el seu índex) marcant-lo amb un null
  /iAo 0 def %% índex general del paquet original
  AraBorro_A
  { %% forall
  iAo iKill eq
  {
  AraBorro_A iAo %% null
  mark
  put
  pop
  } %% si és l'element que hem de matar, doncs el matem
  {
  pop
  } ifelse
  iAo 1 add /iAo exch def
  } forall
  %% fix per a tots els objectes
  Objected'Ara (<<) writestring
  /salva'l save def espiadic_fura2 salva'l restore ()
  Objected'Ara (>>) writestring
  %% el diccionari que quedaria a la pila seria el presumible culpable
  %% del null de més que sempre sortia a la cua del l'array
  %% perō realment ara integrat a Rustec ... hi queda?
  %% deixem aquest codi com a test temporal per comprovar-ho
  %% count 1 ne {exch dup type /dicttype eq {pop ( ... Hi ha el Dic dels Nulls!!)==}{exch}ifelse}if
  %% si veiem que amb molts tests no hi surt l'eliminarem ...
  }
  %% és un null ...
  /nulltype
  {
  %% fix per a tots els objectes
  %% donem de baixa un element cada vegada (cal saber el seu índex) marcant-lo amb un null
  /iAo 0 def %% índex general del paquet original
  AraBorro_A
  { %% forall
  iAo iKill eq
  {
  AraBorro_A iAo %% null
  mark put
  pop
  } %% si és l'element que hem de matar, doncs el matem
  {
  pop
  } ifelse
  iAo 1 add /iAo exch def
  } forall
  %% fix per a tots els objectes
  pop (null)
  }
  %% és una mark ...
  /marktype
  {
  %% fix per a tots els objectes
  %% donem de baixa un element cada vegada (cal saber el seu índex) marcant-lo amb un null
  /iAo 0 def %% índex general del paquet original
  AraBorro_A
  { %% forall
  iAo iKill eq
  {
  AraBorro_A iAo %% null
  mark put
  pop
  } %% si és l'element que hem de matar, doncs el matem
  {
  pop
  } ifelse
  iAo 1 add /iAo exch def
  } forall
  %% fix per a tots els objectes
  pop (mark)
  }
  >>
  /furaP exch def
  /AraVento_A exch def %% pesquem el paquet
  Objected'Ara ([) writestring %% escrivim l'inici del paquet
  /iPaq 0 def %% índex de paquets a incrustar a l'array Apaq
  /NohApaq true def %% és imprescindible que comenci amb true ?
  %% la idea és fer una array dels paquets que anem ventant (cōpies no vinculades)
  %% l'array anirā creixent a mida que anem entrant a paquets més interns
  %% i d'aquestos anirem eliminant els elements ventats a mida que els anem ventant
  %% fent-ne l'actualitzaciķ/eliminaciķ del array quan convingui
  /Apaq 1 array def %% paquet amb els arrays que anem ventant
  %% deixem el paquet a trams a la pila
  %% aquest algorisme extrau trams d'un paquet en funciķ de la variable rAng
  %% sempre que rAng sigui més petit que maxA, si no extrau tota l'array de forma intacte
  /rAng 13 def %% mida del tram a extraure, ÉS LA MILLOR QUE HEM TROBAT PER UNA ARRAY AL MĀXIM!!
  /iRay 0 def %% índex dināmic d'inici d'extracciķ del tram
  mark %% pel counttomark!
  AraVento_A %% paquet a tractar
  dup length /maxA exch def %% mida del paquet
  maxA rAng lt %% la capacitat del paquet és més petita que el tram a extraure?
  {
  iRay maxA getinterval %% extraiem el paquet de forma intacte
  }
  {
  {
  dup iRay rAng getinterval exch %% extraiem el paquet
  iRay rAng add /iRay exch def %% actualitzem l'índex dināmic d'inici d'extracciķ del tram
  %% si queda per extraure una quantitat menor que rAng, l'agafem com a darrer valor
  maxA iRay sub rAng lt {maxA iRay sub /rAng exch def}if
  maxA iRay le {pop exit}if %% si la capacitat del paquet és més petita o igual que l'índex dināmic, sortim
  } loop
  } ifelse
  %% fi de deixar el paquet a trams a la pila
  %% aquest loop capgira tots els elements trobats a la pila
  counttomark dup 1 gt
  { %% capgirem sempre que hi hagi més d'un paquet
  /atura't exch def
  /ici 2 def
  {ici -1 roll ici 1 add /ici exch def ici atura't gt {exit} if} loop
  %% per carregar-nos la mark
  atura't 1 add -1 roll pop
  }
  {
  pop exch pop /atura't 1 def
  } ifelse
  %%
  %% ara ho farem amb un repeat en comptes d'un loop!
  atura't
  { %% repeat 0 de llegir l'array per trams
  /AraVento_A exch def
  %% AraVento i AraBorro sķn variables que s'aniran alternant el paquet intern d'esborrat
  %% de les dades a mida que es vagin ventant
  AraVento_A dup length
  dup 0 eq
  {
  pop pop
  %% 1 array
  0 array %% quan és una simple array buida no hi podem posar un null doncs p.e. al PDF 21KX75.pdf (d'Esko!) es dķna la curiositat que al diccionari 28 0 obj (una mena de Shading Pattern crec) l'entrada /Bounds ha d'estar buida [] i si duia [null] no donava error pero l'Acrobat no visualitzava res!
  }
  {
  array copy
  } ifelse %% filtre per arrays buides
  /AraBorro_A exch def
  save /salva'm exch def
  { %% loop 1
  { %% loop 2
  /iKill 0 def %% inicialitzem l'índex a matar
  AraVento_A
  { %% forall
  %% aquí interroguem l'objecte i tibem el seu type de la definiciķ del diccionari furaP
  dup type furaP exch get exec
  Objected'Ara exch writestring
  Objected'Ara %% dup
  ( ) writestring %% flushfile
  %% fi d'escriptura del valor i esbrinat de la mena
  iKill 1 add /iKill exch def %% comptador per saber l'índex a matar
  } forall
  NohApaq {exit}if %% sortim si a l'array més allunyat ja no en niua cap més
  /NohApaq true def %% cada vegada que acabem de ventar un array ...
  } loop %% 2
  %% purguem els nulls d'AraBorro que hi hagin
  /iKill 0 def %% l'índex a matar
  { %% loop
  /iAo 0 def %% índex general del paquet original
  /iAr 0 def %% índex general del paquet a repicar
  AraBorro_A
  %% filtre per arrays buides
  %% sense aquest filtre el cas de l'objecte 9 0 del fitxer H200205081001000JAI.pdf
  %% dķna un error típic d'array buida ...
  %% [ Error: rangecheck; OffendingCommand: get ] %% Stack: 0 []
  dup length 0 eq {pop Apaq length 0 eq {1 array /Apaq exch def}if exit} if
  iKill get %% null
  mark eq
  {
  AraBorro_A dup length 1 sub array
  /laNova exch def %% el paquet repicat sempre tindrā n-1 elements
  { %% forall
  iAo iKill eq
  {
  pop
  iAr 1 sub /iAr exch def
  } %% si és l'element que hem de matar, doncs el matem
  {
  laNova exch iAr exch put
  } ifelse %% la resta els repiquem a laNova
  iAo 1 add /iAo exch def
  iAr 1 add /iAr exch def
  } forall
  laNova /AraBorro_A exch def
  iKill 1 sub /iKill exch def %% comptador per saber l'índex a matar
  } if
  iKill 1 add /iKill exch def %% comptador per saber l'índex a matar
  AraBorro_A length /maxLoop exch def %% quan sortim
  iKill maxLoop ge {exit} if
  } loop
  %% fi del purgat de nulls
  Apaq iPaq AraBorro_A put %% incrustem el paquet acabat de ventar i purgat a la darrera posiciķ
  %% eliminem enrera els paquets buits i reconstruīm Apaq a la mida justa per continuar el ventat
  %% només sortirem quan Apaq estigui a 0
  { %% loop
  Apaq iPaq get length 0 eq %% quan trobem una array que no és a 0 sortim del purgat d'Apaq
  {
  Apaq length 1 sub Apaq exch 0 exch getinterval /Apaq exch def
  Apaq length 0 eq {exit} if
  %% aquí la cua del paquet
  Objected'Ara %% dup
  (]) writestring %% flushfile % escrivim la cua del paquet
  }
  {
  exit
  } ifelse
  iPaq 1 sub /iPaq exch def
  } loop
  Apaq length 0 eq {exit} if %% pleguem ?
  Apaq iPaq get /AraVento_A exch def %% agafem el darrer array no zero per continuar el ventat
  AraVento_A dup length array copy /AraBorro_A exch def %% en fem la cōpia pel purgat
  } loop %% 1
  salva'm restore
  %% counttomark 0 eq {pop exit}if % sortim quan ja no hi hagi cap paquet a la pila
  %% dup type /arraytype ne {exit}if
  } repeat %% ARA NO loop % 0 NOOOOOUUUUUU
  Objected'Ara %%dup dup
  (]\012) writestring %%EOL writestring flushfile % escrivim el final del paquet
 } bind def
 %% fi de l'algorisme que reescriu un paquet espiapaq_fura3
  
 %% nous afegits per gestionar millor les xref
 %% filtrats diversos bugs de versions anteriors
 %#%13% aquí comenįa el nucli original de comdimoni
 (%#%13%)==
 %%killMetadata+InfoVell+ObjectesLength
 %% ressucitem aquest dic x matar l'objecte real dic+stream de la Metadata i objectes amb el valor Length dels streams
 /OdeBaixa 2 dict def
  
 %% Aquesta utilitat activa com a "Clau" (literal) totes les referencies
 %% d'objectes d'un PDF (directes -obj- i indirectes -R-), i com a "Valor"
 %% el diccionari original del PDF, afegint-hi a tots aquells que porten
 %% "streams" de dades el parell: /XiU (path + nom del fitxer amb les dades)
 %% Just abans haurem escrit al disc les dades de l'stream en un fitxer
 %% amb el nom de la "Clau" (literal). 03.12.99
  
 %% 03.01.04 cal veure com guanyem molt de temps aplicant els parells save/restore
 %% (garbage collection) en totes les redefinicions on sigui significatiu
  
 false { %% desacivem l'implementacio
 %% important implementacio per guanyar eficiencia
 %% Aquest algorisme redefineix l'operador de tancament de diccionaris per controlar el nombre d'objectes indirectes
 %% ... 1 0 R ... definits d'una vegada dins un diccionari, doncs si en supera un determinat nombre,
 %% Gostscript i Distiller peten en la repeticio d'n cops de l'algorisme R d'encadenat a string i despres a literal,
 %% llavors els empaquetem per manats per estalviar memoria a l'interpret i els desem en un altre diccionari extern
 %% deixant com a testimoni la cadena (HeM FeT @ MaNaTS) al seu lloc original
 %% Dins un aplicatiu real (com CaLi2CoPi) cal preservar la definicio original de l'operador de tancament de diccionaris dins un altre variable per
 %% restaurar-la despres del que en hem proposat.
  
 %% inicialitzem ...
 /aGrupem 3 def %% nombre maxim de parells clau/valor que agruparem
 /maNat aGrupem 2 mul 1 add def %% per a us del roll
 /manatsExterns 4 dict def %% diccionari on desarem els manats externs (se suposa que la capacitat es indiferent)
 /femManats false def %% gatell x activar o no el darrer operador de tancament del diccionari
 /quantsManats 0 def %% comptador de manats fets
 /tesTimoni true def %% gatell x saber si hem de crear el testimoni al diccionari original
  
 %% redefinim l'operador de tancament de dicionaris per tal d'agrupar els elements en manats i ser + eficients en la gestio de la memoria de l'interpret
 (>>) cvn
 {
  femManats
  {
  counttomark 2 idiv
  dup 0 eq
  { %% som al darrer manat buit xq es exacte ...
  pop %% ens carreguem el zero sobrer
  /femManats false def
  pop %% ens carreguem la mark del diccionari que estaria buit
  quantsManats 1 add array astore %% empaquetem la clau/valors fets a manats
  /quantsManats 0 def %% inicialitzem el comptador de manats fets
  count
  { %% loop per assegurar-nos que nomes copiem la clau de l'objecte que treballem ara (el literal que te la mark oberta + a prop de la base de la pila)
  dup index type /marktype eq
  {
  index %% copiem la clau de l'objecte que estem interpretant
  exit %% i sortim
  }
  {
  1 sub
  }ifelse
  }loop
  dup manatsExterns exch known %% aquest objecte ja te + manats desats?
  { %% llavors fem creixer l'array, el farcim i el desem a manatsExterns
  dup manatsExterns exch get /aFicar exch def exch /aVeure exch def aFicar dup length 1 add dup 1 sub
  /Dmes exch def array dup dup 4 -1 roll 0 exch putinterval Dmes aVeure put dup length array copy
  manatsExterns 3 1 roll put
  }
  { %% el posem dins una array i el desem a manatsExterns
  exch manatsExterns 3 1 roll 1 array astore put
  }ifelse
  /tesTimoni true def %% cal tornar a crear el testimoni
  }
  {
  aGrupem lt
  { %% si som al darrer manat ...
  /femManats false def
  >> %% endrecem el darrer diccionari
  /tesTimoni true def %% cal tornar a crear el testimoni
  quantsManats 2 add array astore %% empaquetem la clau/valors fets a manats
  /quantsManats 0 def %% inicialitzem el comptador de manats fets
  count
  { %% loop per assegurar-nos que nomes copiem la clau de l'objecte que treballem ara (el literal que te la mark oberta + a prop de la base de la pila)
  dup index type /marktype eq
  {
  index %% copiem la clau de l'objecte que estem interpretant
  exit %% i sortim
  }
  {
  1 sub
  }ifelse
  }loop
  dup manatsExterns exch known %% aquest objecte ja te + manats desats?
  { %% llavors fem creixer l'array, el farcim i el desem a manatsExterns
  dup manatsExterns exch get /aFicar exch def exch /aVeure exch def aFicar dup length 1 add dup 1 sub
  /Dmes exch def array dup dup 4 -1 roll 0 exch putinterval Dmes aVeure put dup length array copy
  manatsExterns 3 1 roll put
  }
  { %% el posem dins una array i el desem a manatsExterns
  exch manatsExterns 3 1 roll 1 array astore put
  }ifelse
  }if
  }ifelse
  }
  { %% no fem manats
  >>
  /tesTimoni true def %% cal tornar a crear el testimoni
  /femManats false def %% gatell x activar o no el darrer operador de tancament del diccionari
  /quantsManats 0 def %% comptador de manats fets
  }ifelse
 } bind def
 %%% fi d'implementacio
 }if %% la desactivem?
  
  
 %%{ % inici de l'stopped
  
 %% redefinicio d' obj i R
 %% aqui la descripcio dels bugs esmenats de les versions 1 2 i 3
 %% cal incrustar els numerics de /obj i /R en una string fixa de 16 (10+1+5) (________________) per no generar noms amb espais
 %% cal incrustar els numerics de /trailer en una string fixa de 10 (nomes el num del primer objecte)
 /obj
 {
 %%flush % ŋ? neteja?
 %% /sAlvAm save def
  %%{ %% stopped optatiu
  %%% ES MOLT IMPORTANT EL FET D'INCRUSTAR ELS GUIONS AMB NullEncode
  %%% PER TAL DE REGENERAR L'STRING CADA VEGADA (composite object!!)
  %%16 string dup /NullEncode filter dup (________________) writestring flushfile % incrustem 16 guions baixos
  %% i no podem simplificar-ho amb un ...
  (________________) dup length string copy
  /Nom exch def %% cadena on muntarem la referencia de l'objecte
  exch
 %%dup == % :-z aqui podem llistar el primer num de l'objecte
  10 string cvs %% encadenem la primera xifra
  Nom exch 0 exch putinterval %% l'incrustem a l'inici de Nom
  %%% estrategia per desar els objectes que excepcionalment no tenen un GN=zero
  dup 0 eq
  { %% objecte amb GN=0
  pop Nom
  15 (0) putinterval %% incrustem la segona xifra a Nom
  }
  { %% objecte amb GN<>0
  5 string cvs
  dup Nom %% encadenem la segona xifra
  exch %% posem la cadena farcidora a sota
  dup length 16 exch sub %% en deduim l'index de posicio
  exch putinterval %% incrustem la segona xifra a Nom
  Nom (_) search pop exch pop exch pop %% ens preparem per desar els valors a noZero
  exch noZero 3 1 roll put
  }ifelse
  Nom cvn %% NO convertim la cadena a literal ?
  dup %% i la deixem a la pila
  %%test
  %%dup ==
  /xIu exch def %% guardem el literal
  %%} stopped {(\n\n ERROR d'estructura a ... obj\n l'objecte ... ) print Nom print (\n\n) print flush quit} if % stopped optatiu
 } bind def
  
 /R
 {
  %%{ %% stopped optatiu
  %% necessitavem treballar com un fitxer per profilaxi?
  %%16 string dup /NullEncode filter dup (________________) writestring closefile % incrustem 16 guions baixos
  
 %% 16 string /ENCIAi exch def ENCIAi /NullEncode filter /fENCIAi exch def
 %% exch 10 string cvs % encadenem la primera xifra
 %% dup length /Gbaixos exch def
 %% fENCIAi exch writestring
 %% 5 string cvs % encadenem la segona xifra
 %% dup length Gbaixos add 16 exch sub /Gbaixos exch def
 %% Gbaixos{fENCIAi (_) writestring}repeat
 %% fENCIAi exch writestring fENCIAi closefile
 %% ENCIAi cvlit dup type pstack quit
  
  %% i no podem simplificar-ho amb un ...
  (_______________0) dup length string copy
  /nOm exch def %% cadena on muntarem la referencia de l'objecte
  exch 10 string cvs %% encadenem la primera xifra
  nOm exch 0 exch putinterval %% l'incrustem a l'inici de Nom
  dup 0 eq
  {
  pop
  }
  {
  5 string cvs %% encadenem la segona xifra
  nOm exch %% posem la cadena farcidora a sota
  dup length 16 exch sub %% en deduim l'index de posicio
  exch putinterval %% incrustem la segona xifra a Nom
  }ifelse
  nOm cvn %% NO convertim la cadena a literal? i la deixem a la pila com a valor d'string (tambe es bo com a clau de diccionari!) x alleugerir l'execucio (hem vist q amb diccionaris amb + de 15mil entrades petava amb un limitcheck)
  %%currentfile flushfile % neteja? %flush %currentfile closefile % ŋ? neteja?
  %%} stopped {(\n\n ERROR d'estructura a ... R\n l'objecte ... ) print Nom print (\n\n) print flush quit} if % stopped optatiu
  
  %%% comptador i filtre per fer manats segons aGrupem, doncs combina amb la redefinicio de l'operador de tancament de diccionaris
  %%counttomark 2 idiv aGrupem eq
  %%{
  %% >>
  %% % aqui es on copiem la clau del diccionari i la cadena de testimoni que diu que ha estat fet a manats ...
  %% % ... tret q ja l'haguem copiat
  %% tesTimoni
  %% {
  %% 1 index 3 1 roll (HeM FeT @ MaNaTS) 3 1 roll % creem el testimoni
  %% /tesTimoni false def % no hem de tornar a crear el testimoni
  %% }if
  %% mark
  %% /femManats true def
  %% quantsManats 1 add /quantsManats exch def
  %%}if
  
 } bind def
  
 %%% test
 /endstream
 {}bind def
 %%% redefinim endstream buit
  
 %% redefinicio d'stream
 %% ha de tenir connexio amb el detector de SO
 %% directori TMP existent en tots els Distillers
 /pAth tEmp def % on copiarem els fitxers amb dades "stream"
 pAth length /faPath exch def
 /stream
 {
  %%{ %% stopped optatiu
  %% posem un detector de l'entrada /Length i en el cas que sigui mes petita de 65000
  %% no escriurem l'stream al disc i ho farem en una cadena, d'aquesta manera guanyarem
  %% velocitat (a l'exemple 1366objectes.pdf es 4 vegades+rapid) en fitxers molt grans
  dup /Length known
  {
  dup /Length get dup /fadellarg exch def
  %% si es un obj indirecte, l'eliminem i reescrivim l'entrada Length
  type /nametype eq
  { %% es un literal (ref. ind. de Length)
  %% llavors posem la ref. ind. de l'objecte (fadellarg) al dic OdeBaixa x eliminar + tard ...
  OdeBaixa fadellarg null put
  %% ... i escrivim a pinyo fix l'stream a disc
  xIu 16 string cvs dup length faPath add string dup /pAthXiU exch def 0 pAth putinterval
  pAthXiU exch faPath exch putinterval % incrustem el nom del fitxer (xIu) al path
  0 %% valor inicial per calcular el Length exacte
  save %% imprescindible per la higiene dels fitxers?
  pAthXiU (w) file /scriu exch def %% fem el fitxer d'escriptura
  currentfile << /EODCount 0 /EODString (endstream) >> /SubFileDecode filter
  { %% loop
  dup 65535 string readstring
  {
  scriu exch dup length 6 -1 roll add 5 1 roll writestring
  }
  {
  scriu exch dup length
  dup 2 le
  { %% si l'stream te entre zero i 2 caracters, en descartem l'esquilat
  pop
  }
  {
  dup /faDcadena exch def 6 -1 roll add 5 1 roll
  %% avaluem la cua de les dades x saber si hi ha un 13+10 o un 10
  %% ... o potser un 13
  dup faDcadena 2 sub 2 getinterval dup 1 get 10 eq
  { %% amb alguna mena de retorn abans d' endstream
  0 get 13 eq
  { %% amb retorn dur 13+10 abans d' endstream
  %% aqui polim el Length i la darrera cadena a escriure
  5 -1 roll 2 sub 5 1 roll
  0 faDcadena 2 sub getinterval
  %%(amb retorn dur 13+10 abans d' endstream) pstack quit
  }
  { %% amb line feed 10 abans d' endstream
  %% aqui polim el Length i la darrera cadena a escriure
  5 -1 roll 1 sub 5 1 roll
  0 faDcadena 1 sub getinterval
  %%(amb line feed 10 abans d' endstream) pstack quit
  }ifelse
  }
  { %% o amb 13 o sense cap mena de retorn abans d' endstream
  1 get 13 eq
  {
  %% aqui polim el Length i la darrera cadena a escriure
  5 -1 roll 1 sub 5 1 roll
  0 faDcadena 1 sub getinterval
  %%(amb retorn dur 13 abans d' endstream) pstack quit
  }
  { %% no cal que polim res
  %%(sense cap mena de retorn abans d' endstream) pstack quit
  }ifelse
  }ifelse
  }ifelse
  writestring closefile scriu closefile
  exit
  } ifelse
  } loop %% escrivim totes les dades d'stream al fitxer (xIu)
  restore %% imprescindible per la higiene dels fitxers?
  true %% deixa un true com a detector d'streams a disc per a endobj
  exch
  %% aqui no hi ha avaluador del Length xq no anem a l'objecte indirecte a buscar-lo, doncs l'eliminem directament i el reincrustem un cop calculat al dic
  2 index /Length 3 -1 roll % repiquem el Length exacte que tenim sumat a la pila
  put
  }
  { %% es un enter directe ...
 %% true % gatell per aplicar una o altra metode de lectura dels streams de dades
 %% hauríem de poder implementar un mčtode per poder reinterpretar l'stream en cas d'error
  false %% amb aquesta opciķ evitem l'efecte de contaminaciķ d'imatges a l'opciķ 6 de la cosidora
  { %% METODE PREFERENT: filrem l'stream pel nombre d'octets declarats a la clau /Length
 %% fadellarg 65000 le %% hem obtat per abaixar 535 bytes el maxim doncs hem detectat fitxers
  %% (com Presentaci_n10_pdf.pdf) que duen un error que feia petar l'algorsime a 65535
  %% aqui posant un false i eliminant la linia de dalt, podriem obligar a escriure tots els streams a disc
  false
  { %% NO escrivim a disc: capturem l'stream en una cadena per desar-la directament al diccionari
 %%(:-b)pstack quit
  0 %% valor inicial per calcular el Length exacte
 %% currentfile << /EODCount 0 /EODString (endstream) >> /SubFileDecode filter
  currentfile << /EODCount fadellarg /EODString () >> /SubFileDecode filter
 %%{ % loop
  dup 65535 string readstring
  { %% aqui donarem un error fatal, doncs a part que el Length segur estara malament
  %%supera el 65535 i descartem repara-lo de forma simple
  (\n\n ... Length incorrecte i excessiu ... ara NO el repararem ... SORTIM!\n\n)
  BaBeL 39 get print flush pstack clear stop %%quit
  }
  {
  dup length 4 -1 roll add 3 1 roll %% aqui la activar els sumadors del Length
  /pAthXiU exch def %% la cadena amb l'stream i Length teoricament exactes
  closefile %% tanquem el currentfile ara, doncs ja esta esgotat
  %% el tornem a obrir per filtrar possibles errors del Length fins a endstream
  currentfile << /EODCount 0 /EODString (endstream) >> /SubFileDecode filter
  %% aquest valor de cua seria la maxima tolerancia en cas d'error del Length
  dup 65535 string readstring
  { %% aqui donarem un error fatal, doncs a part que el Length segur estara malament
  %%supera el 65535 i descartem repara-lo de forma simple
  (\n\n ... Length incorrecte i excessiu ... ara NO el repararem ... SORTIM!\n\n)
  BaBeL 39 get print flush pstack clear stop %%quit
  }
  {
  dup length
  dup 2 le
  { %% si l'stream te entre zero i 2 caracters, en descartem l'esquilat
 %% pero ens cal assegurar que es tracta de caracters d'EOL valids
  pop
  }
  {
 %%% ARA ENS CAL BASTIR UN PDF DE TEST AMB LENGTHS INCORRECTES I AVALUAR LA POSSIBILITAT
 %%% DE FER MARXA ENRERE AMB EL METODE DE LECTURA, DE fORMA Q PRIMER APLICARIEM EL METODE
 %%% DEL Length I SI FALLES APLICARIEM EL DE endstream
 %% ens cal avaluar si ens hem passat (+ enlla d'endstream) o ens hem quedat curts (abans d'endstream)
 (:-x)pstack quit
  pop dup length 6 sub 5 getinterval (:-X)pstack quit
  dup 5 -1 roll add 4 1 roll
  %% avaluem la cua de les dades x saber si hi ha un 13+10 o un 10
  %% ... o potser un 13
  exch dup 3 -1 roll
  2 sub 2 getinterval dup 1 get 10 eq
  { %% amb alguna mena de retorn abans d' endstream
  0 get 13 eq
  { %% amb retorn dur 13+10 abans d' endstream
  %% aqui polim el Length i la darrera cadena a escriure
  3 -1 roll 2 sub dup 4 1 roll
  0 exch getinterval
  %%(amb retorn dur 13+10 abans d' endstream) pstack quit
  }
  { %% amb line feed 10 abans d' endstream
  %% aqui polim el Length i la darrera cadena a escriure
  3 -1 roll 1 sub dup 4 1 roll
  0 exch getinterval
  %%(amb line feed 10 abans d' endstream) pstack quit
  }ifelse
  }
  { %% o amb 13 o sense cap mena de retorn abans d' endstream
  1 get 13 eq
  {
  %% aqui polim el Length i la darrera cadena a escriure
  3 -1 roll 1 sub dup 4 1 roll
  0 exch getinterval
  %%(amb retorn dur 13 abans d' endstream) pstack quit
  }
  { %% no cal que polim res
  %%(sense cap mena de retorn abans d' endstream) pstack quit
  }ifelse
  }ifelse
  }ifelse
  %%avaluem si la cua es un EOL o no
  <<
  (\012) null %% salt de linia (LF)
  (\015) null %% retorn de carro (CR)
  (\015\012) null %% retorn de carro (CR) + salt de linia (LF)
  >>
  1 index known
  {
  pop closefile %% ens carreguem la cadena i tanquem el currentfile
  }
  {
  % reincrustem la cua que ens ha quedat a la cadena?
  dup length
  (:-F)pstack quit
  }ifelse
  }ifelse %% tolerancia d'error del lenght
 %% exit
  } ifelse
 %%} loop % escrivim totes les dades d'stream en una cadena i informem si el Length es incorrecte
  dup fadellarg eq
  { %% te el Length correcte
  pop
  }
  { %% cal ajustar el Length
  BaBeL 40 get print flush
  1 index exch /Length exch put
  }ifelse
  false %% deixa un false com a detector d'streams a string per a endobj
  }
  { %% SI q escrivim a disc
  %% test: treballem fent cas del Length fadellarg
  xIu 16 string cvs dup length faPath add string dup /pAthXiU exch def 0 pAth putinterval
  pAthXiU exch faPath exch putinterval % incrustem el nom del fitxer (xIu) al path
  0 %% valor inicial per calcular el Length exacte
  save %% impresindible per la higiene dels fitxers
  pAthXiU (w) file /scriu exch def %% fem el fitxer d'escriptura
  currentfile << /EODCount fadellarg /EODString () >> /SubFileDecode filter
  { %% loop
  dup 65535 string readstring
  {
  scriu exch dup length 6 -1 roll add 5 1 roll writestring
  }
  {
  scriu exch dup length 6 -1 roll add 5 1 roll writestring
  closefile %% tanquem el primer currentfile doncs ja esta esgotat
  %% el tornem a obrir per filtrar possibles errors del Length fins a endstream
  currentfile << /EODCount 0 /EODString (endstream) >> /SubFileDecode filter
  %% aquest valor de cua seria la maxima tolerancia en cas d'error del Length
  65535 string readstring
  %% avaluem la cua de dades fins a endstream
  { %% aqui donarem un error fatal, doncs a part que el Length segur estara malament
  %% supera el 65535 i no ens deixa repara-lo de forma simple dins una cadena
  (\n\n ... Length incorrecte i excessiu ... ara NO el podem reparar ... SORTIM!\n\n)
  BaBeL 39 get print flush pstack clear stop %%quit
  }
  {
  scriu exch dup length
  dup 2 le
  { %% si l'stream te entre zero i 2 caracters, en descartem l'esquilat
  pop
  }
  {
  dup /faDcadena exch def
  5 -1 roll add 4 1 roll
  %% avaluem la cua de les dades x saber si hi ha un 13+10 o un 10
  %% ... o potser un 13
  dup faDcadena 2 sub 2 getinterval
  dup 1 get 10 eq
  { %% amb alguna mena de retorn abans d' endstream
  0 get 13 eq
  { %% amb retorn dur 13+10 abans d' endstream
  %% aqui polim el Length i la darrera cadena a escriure
  4 -1 roll 2 sub 4 1 roll
  0 faDcadena 2 sub getinterval
  %%(amb retorn dur 13+10 abans d' endstream) pstack quit
  }
  { %% amb line feed 10 abans d' endstream
  %% aqui polim el Length i la darrera cadena a escriure
  4 -1 roll 1 sub 4 1 roll
  0 faDcadena 1 sub getinterval
  %%(amb line feed 10 abans d' endstream) pstack quit
  }ifelse
  }
  { %% o amb 13 o sense cap mena de retorn abans d' endstream
  1 get 13 eq
  {
  %% aqui polim el Length i la darrera cadena a escriure
  4 -1 roll 1 sub 4 1 roll
  0 faDcadena 1 sub getinterval
  %%(amb retorn dur 13 abans d' endstream) pstack quit
  }
  { %% no cal que polim res
  %%(sense cap mena de retorn abans d' endstream) pstack quit
  }ifelse
  }ifelse
  }ifelse
  %% si aquesta cua no fos zero, donariem el Length com a erroni?
  writestring %% escrivim la cua de dades q ens ha quedat
  scriu closefile
  exit
  }ifelse
  }ifelse
  } loop %% escrivim totes les dades d'stream al fitxer (xIu)
  restore %% impresindible per la higiene dels fitxers
  dup fadellarg eq
  { %% te el Length correcte
  pop
  }
  { %% cal ajustar el Length
  BaBeL 40 get print flush
  1 index exch /Length exch put
  }ifelse
  true %% deixa un true com a detector d'streams a disc per a endobj
  }ifelse %% escrivim a disc o no
  }
  { %% METODE REBUTJAT ARA: filtrem l'stream per la clau endstream final
  fadellarg 65000 le %% hem obtat per abaixar 535 bytes el maxim doncs hem detectat fitxers (com Presentaci_n10_pdf.pdf) que duen un error que feia petar l'algorsime a 65535
  %% aqui posant un false i eliminant la linia de dalt, podriem obligar a escriure tots els streams a disc
  %%false
  { %% capturem l'stream en una cadena per desar-la directament al diccionari
  0 %% valor inicial per calcular el Length exacte
  currentfile << /EODCount 0 /EODString (endstream) >> /SubFileDecode filter
  { %% loop
  dup 65535 string readstring
  { %% aqui donarem un error fatal, doncs a part que el Length segur estara malament, supera el 65535 i no ens deixa repara-lo de forma simple dins una cadena
  %%(\n\n ... Length incorrecte i excessiu ... ara NO el podem reparar ... SORTIM!\n\n)
  BaBeL 39 get print flush pstack clear stop %%quit
  }
  {
  dup length
  dup 2 le
  { %% si l'stream te entre zero i 2 caracters, en descartem l'esquilat
  pop
  }
  {
  dup 5 -1 roll add 4 1 roll
  %% avaluem la cua de les dades x saber si hi ha un 13+10 o un 10
  %% ... o potser un 13
  exch dup 3 -1 roll
  2 sub 2 getinterval dup 1 get 10 eq
  { %% amb alguna mena de retorn abans d' endstream
  0 get 13 eq
  { %% amb retorn dur 13+10 abans d' endstream
  %% aqui polim el Length i la darrera cadena a escriure
  3 -1 roll 2 sub dup 4 1 roll
  0 exch getinterval
  %%(amb retorn dur 13+10 abans d' endstream) pstack quit
  }
  { %% amb line feed 10 abans d' endstream
  %% aqui polim el Length i la darrera cadena a escriure
  3 -1 roll 1 sub dup 4 1 roll
  0 exch getinterval
  %%(amb line feed 10 abans d' endstream) pstack quit
  }ifelse
  }
  { %% o amb 13 o sense cap mena de retorn abans d' endstream
  1 get 13 eq
  {
  %% aqui polim el Length i la darrera cadena a escriure
  3 -1 roll 1 sub dup 4 1 roll
  0 exch getinterval
  %%(amb retorn dur 13 abans d' endstream) pstack quit
  }
  { %% no cal que polim res
  %%(sense cap mena de retorn abans d' endstream) pstack quit
  }ifelse
  }ifelse
  }ifelse
  /pAthXiU exch def %% la cadena amb l'stream i Length exactes
  closefile
  exit
  } ifelse
  } loop %% escrivim totes les dades d'stream en una cadena i informem si el Length es incorrecte
  dup fadellarg eq
  { %% te el Length correcte
  pop
  }
  { %% cal ajustar el Length
  BaBeL 40 get print flush
  1 index exch /Length exch put
  }ifelse
  false %% deixa un false com a detector d'streams a string per a endobj
  }
  { %% escrivim l'stream a disc
  xIu 16 string cvs dup length faPath add string dup /pAthXiU exch def 0 pAth putinterval
  pAthXiU exch faPath exch putinterval %% incrustem el nom del fitxer (xIu) al path
  0 %% valor inicial per calcular el Length exacte
  save %% impresindible per la higiene dels fitxers
  pAthXiU (w) file /scriu exch def %% fem el fitxer d'escriptura
  currentfile << /EODCount 0 /EODString (endstream) >> /SubFileDecode filter
  { %% loop
  dup 65535 string readstring
  {
  scriu exch dup length 6 -1 roll add 5 1 roll writestring
  }
  {
  scriu exch dup length
  dup 2 le
  { %% si l'stream te entre zero i 2 caracters, en descartem l'esquilat
  pop
  }
  {
  dup /faDcadena exch def
  6 -1 roll add 5 1 roll
  %% avaluem la cua de les dades x saber si hi ha un 13+10 o un 10
  %% ... o potser un 13
  dup faDcadena 2 sub 2 getinterval
  dup 1 get 10 eq
  { %% amb alguna mena de retorn abans d' endstream
  0 get 13 eq
  { %% amb retorn dur 13+10 abans d' endstream
  %% aqui polim el Length i la darrera cadena a escriure
  5 -1 roll 2 sub 5 1 roll
  0 faDcadena 2 sub getinterval
  %%(amb retorn dur 13+10 abans d' endstream) pstack quit
  }
  { %% amb line feed 10 abans d' endstream
  %% aqui polim el Length i la darrera cadena a escriure
  5 -1 roll 1 sub 5 1 roll
  0 faDcadena 1 sub getinterval
  %%(amb line feed 10 abans d' endstream) pstack quit
  }ifelse
  }
  { %% o amb 13 o sense cap mena de retorn abans d' endstream
  1 get 13 eq
  {
  %% aqui polim el Length i la darrera cadena a escriure
  5 -1 roll 1 sub 5 1 roll
  0 faDcadena 1 sub getinterval
  %%(amb retorn dur 13 abans d' endstream) pstack quit
  }
  { %% no cal que polim res
  %%(sense cap mena de retorn abans d' endstream) pstack quit
  }ifelse
  }ifelse
  }ifelse
  writestring closefile
  scriu closefile
  exit
  } ifelse
  } loop %% escrivim totes les dades d'stream al fitxer (xIu)
  restore %% impresindible per la higiene dels fitxers
  dup fadellarg eq
  { %% te el Length correcte
  pop
  }
  { %% cal ajustar el Length
  BaBeL 40 get print flush
  1 index exch /Length exch put
  }ifelse
  true %% deixa un true com a detector d'streams a disc per a endobj
  }ifelse
  }ifelse
  } ifelse %% es un literal (ref ind de Length) o un enter directe?
  }
  {
  %%(\n\n >>>> FORMAT ERRONI * Stream sense l'entrada /Length \n\n) print flush
  BaBeL 32 get print flush
  %% informem dels fitxers del tmp
  (\n\n ... quedaran temporals per esborrar!\n\n) print flush
  stop %%quit
  }ifelse
  %%} stopped {(\n\n >>> ERROR d'estructura a ... stream\n >>> l'objecte ... ) print Nom print (\n\n) print flush quit} if % stopped optatiu
 } bind def
  
 %% redefinicio d' n
 /n
 {
  %%{ %% stopped optatiu
  %% convertiem en array cada linia de referencia creuada
  %% /n 3 array astore
  %% exch dup type /integertype eq
  %% {
  %% array 3 -1 roll 10 string cvs cvn /nomS exch def nomS exch def /iAO 0 def
  %% nomS cvx exec iAO 3 -1 roll put XREFdict nomS nomS cvx exec put
  %% iAO 1 add /iAO exch def
  %% nomS % deixem el literal a recollir per trailer i donar-lo de baixa mes endavant
  %% }
  %% {
  %% exch
  %% XREFdict nomS get dup 3 -1 roll iAO exch put
  %% XREFdict exch nomS exch put
  %% iAO 1 add /iAO exch def
  %% }ifelse
  %%% NOVA definicio
  pop pop %% eliminem els dos digits de la pila per evitar un possible vessament (500 max)
  %%} stopped {(\n\n >>> ERROR d'estructura a ... n\n\n) print flush quit} if % stopped optatiu
 } bind def
  
 %% redefinicio d' f
 /f
 {
  %%{ %% stopped optatiu
  %% /f 3 array astore
  %% exch dup type
  %% /integertype eq
  %% {
  %% array 3 -1 roll 10 string cvs cvn /nomS exch def nomS exch def /iAO 0 def
  %% nomS cvx exec iAO 3 -1 roll put XREFdict nomS nomS cvx exec put
  %% iAO 1 add /iAO exch def
  %% nomS % deixem el literal a recollir per trailer i donar-lo de baixa mes endavant
  %% }
  %% {
  %% exch
  %% XREFdict nomS get dup 3 -1 roll iAO exch put
  %% XREFdict exch nomS exch put
  %% iAO 1 add /iAO exch def
  %% }ifelse
  %%EP% segurament aquest loop de donar de baixa no serveix per a res ... ŋ?
  %%% NOVA definicio
  %%R
  %% /iDimoni 0 def
  %%{ % loop de descarrega de possibles objectes donats de baixa pero encara existents
  %% iDimoni 4 string cvs cvn
  %% dup userdict exch known {userdict exch get exch undef exit}{pop pop}ifelse
  %% iDimoni 1 add /iDimoni exch def
  %%} loop % de descarrega
  pop pop %% eliminem els dos digits de la pila per evitar un possible vessament (500 max)
  %%} stopped {(\n\n >>> ERROR d'estructura a ... f\n\n) print flush quit} if % stopped optatiu
 } bind def
  
 %% redefinicio de trailer
 /trailer
 {
  %%{ %% stopped optatiu
  %% li donem ara una funcio de recollida de definicions de subseccio que hem de donar de baixa al final de l'execucio de COMdimoni
  %%counttomark array astore exch pop
  %%% NOVA definicio
  cleartomark
  %%} stopped {(\n\n >>> ERROR d'estructura a ... trailer\n\n) print flush quit} if % stopped optatiu
 } bind def
  
 %% redefinicio d' endobj
 %% cal posar un detector de si ha de definir directament el diccionari o abans ha d'incrustar
 %% el path del fitxer en una nova entrada (/XIU ?)
 /endobj
 {
  { %% stopped preventiu x casos erronis on endobj es repeteix + d'1 cop
  dup type /booleantype eq
  { %% segons sigui true o false desem ...
  { %% la cadena amb el path de l'stream a disc dins una array
  dup /XIU pAthXiU 1 array astore put
  }
  { %% directament la cadena amb les dades del stream
  dup /XIU pAthXiU put
  }ifelse
  } if
  def %% definim el contingut de l'objecte amb el literal generat per obj
  %%% test x saber quans objectes estem definint al dict comdimoni5
  %%currentdict length ==
  } stopped %%{(\n\n >>> ERROR d'estructura a ... endobj\n >>> l'objecte ... ) print Nom print (\n\n) print flush quit} if
  {
  (\n\n ... localitzat 'endobj' fora de lloc o sobrer ... \n) print flush %% avisem que hi ha 'endobj' fora de lloc o sobrers
  }if
  %%sAlvAm restore
 } bind def
  
 %% redefinicio d' startxref
 /startxref
 {
  %%{ %% stopped optatiu
  %%currentfile 20 string readline pop
  %%cvn % convertim a literal el byteoffset que segueix a startxref
  %%% si es un PDF 1.5 amb la compressio Object Streams activada la taula l'xref desapareix
  %% i l'entrada trailer tambe i per tant startxref nomes te a la pila el byteoffset
  %% del nou objecte (/Type/XRef) especial que conte l'xref comprimida ...
  %% count 1 eq {tauXref exch <<>> put} % si te Object Streams incrustem un dict buit a la clau del dict tauXref
  %% {exch XREFdict exch /TRaiLeR exch
  %% put % incrustem el dict trailer a XREFdict
  %% tauXref exch XREFdict put} ifelse
  %%% NOVA definicio
  currentfile 128 string readline pop
  %% ep! posem un filtre per evitar possibles espais en blanc o altres caracters fantasmes al davant o al final !!! (al fitxer 57-A914.pdf d'en Jakob ens pasava aixo i tambe al xorrez.pdf)
  cvx exec 32 string cvs
  %%{
  %% dup length 1 sub /Subur exch def
  %% dup Subur get 32 le % suposem que aixi evitarem tots els caracters fantasmes com el tab o altres
  %% {0 Subur getinterval}{exit}ifelse
  %%} loop
  cvn %% convertim a literal el byteoffset que segueix a startxref
  %% si es un PDF 1.5 amb la compressio Object Streams activada la taula l'xref desapareix
  %% i l'entrada trailer tambe i per tant startxref nomes te a la pila el byteoffset
  %% del nou objecte (/Type/XRef) especial que conte l'xref comprimida ...
  count 1 eq
  {
  tauXref exch <<>> put
  } %% si te Object Streams incrustem un dict buit a la clau del dict tauXref
  {
  tauXref 3 1 roll exch put %% incrustem el dict trailer a tauXref diferenciat pel byteoffset d'startxref
  } ifelse
  %%} stopped {(\n\n >>> ERROR d'estructura a ... startxref\n\n) print flush quit} if % stopped optatiu
 } bind def
  
 %% redefinicio d' xref
 /xref
 {
  %%{ %% stopped optatiu
  %%mark /XREFdict 10 dict def
  %%% NOVA definicio
  mark
  %%} stopped {(\n\n >>> ERROR d'estructura a ... xref\n\n) print flush quit} if % stopped optatiu
 } bind def %% marca l'inici de la referencia creuada + diccionari amb els index dels objectes i la linia de byte offsets
  
 %%currentdict {pop ==} forall quit
 %% /COMdimoni 10 dict def % guardarem totes les entrades en aquest diccionari
 %% sembla que amb 2000 de capacitat inicial funciona be
 %% doncs si no en posavem (<<>>) petava l'aplicacio en alguns PDF complexes
 %% COMdimoni begin
 %% /tauXref 10 dict def % creem el diccionari on desarem totes les xref ordenades pel nom del seu byteoffset
  
 %%2000000 setvmthreshold
 %%currentfile 80 string .peekstring (!) pstack quit
 %% execucio de COMdimoni5
 %% desfent, desintegrant, ventant, analitzant ...
 %%{ % de l'stopped
 %% NOU!
 %%testVM
 -1 vmreclaim %% superimportant!!!!!!
 %%testVM
 %%(VM just abans d'executar el PDF i despres de vmreclaim >>>) == vmstatus == == ==
 %% fApplet
 %% x l'index de noms de COMdimoni
 /iDimoni 0 def
 %%% NOU! aquestes noves definicions que s'utilitzen a les crides obj les haurem de donar de baixa?
 5 dict /noZero exch def %% diccionari per desar els objectes que excepcionalment no tenen un GN=zero
 %%{ % stopped x controlar errors estructurals
  EtEmp2
  {
  dup /QuinTrosPeta exch def %% desem el nom del tros .obj x si peta
  iDimoni 4 string cvs cvn dup
  10 dict def %% guardarem totes les entrades en aquest diccionari
  %% sembla que amb 10 de capacitat inicial funciona be
  %% doncs si no en posavem (<<>>) petava l'aplicacio en alguns PDF complexes
  cvx exec begin
  /tauXref 10 dict def %% creem el diccionari on desarem totes les xref ordenades pel nom del seu byteoffset
  (r) file cvx exec
  %% desem els literals de subseccio per donar-los de baixa mes endavant
  count array astore /SubSec exch def
  end
  iDimoni 1 add /iDimoni exch def
  } 256 string filenameforall
 %%} stopped
  
 %%(!!!!!!!!!)pstack quit
 false
  
 { %% si hi ha error estructural el cacem aqui ...
  clear
  BaBeL 8 get print flush
  Nom print flush %% donem el num d'objecte que provoca l'error estructural
  BaBeL 15 get print flush
  %% aqui repiquem a un fitxer els valors que ens interessen de l'error
  $error %% esborrem les entrades d control d'errors q ara no ens interessa escriure
  dup /dstack undef
  dup /estack undef
  dup /ostack undef
  dup /recordstacks undef
  dup /globalmode undef
  dup /SubstituteFont undef
  dup /.nosetlocal undef
  dup /errorinfo undef
  dup /newerror undef
  dup /.inerror undef
  dup /binary undef
  aFeGeiX dup length dup /iNSeRT exch def nomFITX length add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT nomFITX putinterval
  dup length dup /iNSeRT exch def 7 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT (_ERROR_) putinterval
  dup length dup /iNSeRT exch def 16 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT Nom putinterval
  dup length dup /iNSeRT exch def 4 add string
  dup 3 -1 roll 0 exch putinterval dup iNSeRT (.txt) putinterval
  (w) file /Objected'Ara exch def %% desem el fitxer d'escriptura a la variable q fa servir /espiadic_fura2
  /salva'l save def espiadic_fura2 salva'l restore %% reescrivim les dades del dic
  QuinTrosPeta == %% tros de PDF que peta
  quit %% aqui no hi pot anar stop, doncs el GS es queda encantat
 } if
 %%testVM
 %%(VM un cop interpretat el PDF >>>) == vmstatus == == ==
  
 %% control de temps
 %%usertime Td'ara sub == (hem executat el PDF\n) print flush
  
 %% control de temps
 %%usertime /Td'ara exch def
  
 %% descarreguem les definicions no utils al diccionari COMdimoni
 %% COMdimoni
 %% x l'index de noms de COMdimoni
 iDimoni /MaxDimoni exch def %% sortirem del loop
  
 /iDimoni 0 def
 { %% loop de descarrega de definicions pels dic creats
  currentdict iDimoni 4 string cvs cvn get dup /TrosDic exch def
  
  dup /faDcadena undef
  
  dup /xIu undef
  dup /Nom undef
  dup /nOm undef
  dup /noM undef
  dup /scriu undef
  dup /pAthXiU undef
  
  dup /nomS undef %% noves entrades de COMdimoni5 a donar de baixa
  dup /fadellarg undef
  dup /SLngth undef
  dup /iAO undef
  %%% NOU! desactivat
  %%dup /XREFdict undef
  dup /iDimoni undef
  dup /SubSec get
  { %% forall
  dup type /arraytype eq
  {
  {
  dup TrosDic exch
  known {TrosDic exch undef}{pop}ifelse
  } forall
  }
  {
  pop
  }ifelse
  } forall %% donem de baixa les definicions de subseccio
  %%dup
  /SubSec undef
  %% /Subur undef % nou pel filtre dels possibles espais en blanc a la cua de l'startxref
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
 } loop %% de descarrega
  
 iDimoni /MaxDimoni exch def %% recalculem x sortir del loop
  
 %%% fi d'execucio de comdimoni5
  
 %%% capturem en una altra variable el dic tauXref doncs el donarem de baixa mes
 %%% endavant i tambe per saber quants objectes hem de escriure a l'xref
 %%% del nou fitxer, i crear un nou diccionari OdeBaixa amb els objectes de baixa (f)
 %% COMdimoni
 1 dict /TAUxREF exch def %% la creem buida per desar-hi amb un copy totes les xrefs que hi hagin en els diferents objectes trencats
  
 /iDimoni 0 def
 { %% loop de descarrega de definicions pels dic creats
  currentdict iDimoni 4 string cvs cvn get
  dup /tauXref known
  {
  /tauXref get dup length
  dict copy TAUxREF copy /TAUxREF exch def %% afegim a l'existent
  }
  {
  pop
  }ifelse
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
 } loop %% de descarrega
  
 %%% aviam com es un Font File i si val la pena llegir-lo ...
 %%currentdict /0 get /24_____________0 get /XIU get
 %%0 () /SubFileDecode filter
 %% <<
 %% /Filter /FlateDecode
 %% >> /ReusableStreamDecode filter
 %%65535 string readstring pop (/enfony/CaLi2CoPi/aviamToUnicode.txt) (w) file dup
 %%3 -1 roll writestring closefile (:-x)pstack quit
  
 %#%14% anālisi per validar el PDF
 (%#%14%)==
 %# primer, mirem si el PDF és encriptat
  
 %% /iDimoni 0 def
 %%{ % loop de decarrega de definicions pels dic creats
 %% currentdict iDimoni 4 string cvs cvn get
  
 TAUxREF
 { %% forall
  exch pop %%dup type /dicttype eq
  %% {
  %% dup /TRaiLeR known
  %% {
  %% /TRaiLeR get
  dup /Encrypt known
  {
  /Encrypt get type /nulltype eq
  { %% te brossa d'encriptats (possiblement l'han passat x un crack)
  BaBeL 20 get print flush
  %% esborrat dels fitxers del tmp
  (\n\n ... quedaran temporals per esborrar!\n\n) print flush
  stop %%quit
  }
  { %% se suposa que els objectes que pengen son vius i x tant l'encriptat es real
  BaBeL 11 get print flush
  %% esborrat dels fitxers del tmp
  (\n\n ... quedaran temporals per esborrar!\n\n) print flush
  stop %%quit
  }ifelse
  }
  {
  pop
  }ifelse
  %% }{pop} ifelse
  %% }{pop}ifelse
 } forall
  
 %% iDimoni 1 add /iDimoni exch def
 %% iDimoni MaxDimoni eq {exit} if
 %%} loop % de descarrega
  
 %# segon, mirem si el PDF estā signat digitalment
 /iDimoni 0 def
 { %% loop de decarrega de definicions pels dic creats
  currentdict iDimoni 4 string cvs cvn get
  /SIGdig false def %% flag x detectar si ho es
  { %% forall
  dup type /dicttype eq
  { %% de moment aturem l'applet si ho es
  dup /Type known
  {
  /Type get /Sig eq {/SIGdig true def pop}{pop}ifelse
  }
  {
  pop pop
  }ifelse
  }
  {
  pop pop
  }ifelse
  } forall
  SIGdig
  {
  BaBeL 16 get print flush
  %% informem dels fitxers del tmp
  (\n\n ... quedaran temporals per esborrar!\n\n) print flush
  stop %%quit
  }if
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
 } loop %% de descarrega
  
 %%% NOU! desactivem
 %% valors inicials del ViaMorta
 %% /QuiEsAra 0 def
  
 %# tercer, ara NO tenim en compte la versiķ de PDF i mirem sempre si pot tenir la
 %# supercompressiķ d'Object Streams activada, doncs la funciķ d'optimitzar de l'A6
 %# permet tenir pdf antics amb la 'compress document structure' posada
 %# llavors també hi ha PDF liniaritzats que també la duen (vegeu PDFReference16.pdf)
 %# i petaven degut a que la supercompressiķ no es comprobava abans
 %%vPDF % la versio de PDF
 %%cvr 1.3 ge
 %%{
  %%COMdimoni
  /iDimoni 0 def
  /OBJstreams false def %% flag x detectar si ho es
  { %% loop de decarrega de definicions pels dic creats
  currentdict iDimoni 4 string cvs cvn get
  { %% forall
  dup type /dicttype eq
  { %% de moment aturem l'applet si ho es
  dup /Type known
  {
  /Type get /ObjStm eq {/OBJstreams true def pop}{pop}ifelse
  }
  {
  pop pop
  }ifelse
  }
  {
  pop pop
  }ifelse
  } forall
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
  } loop %% de descarrega
  OBJstreams
  {
  BaBeL 17 get print flush
  %% informem dels fitxers del tmp del Distiller
  (\n\n ... quedaran temporals per esborrar!\n\n) print flush
  stop %%quit
  }
  if
 %% {
 %% BaBeL 10 get print flush vPDF print flush (\n) print flush
 %% }ifelse
 %%}
 %%{
 %% BaBeL 10 get print flush vPDF print flush (\n) print flush
 %%}ifelse
  
 %# quart, detectem si el PDF estā liniaritzat (Fast Web View ~ ús del byteoffset )
 %% COMdimoni
 /LNRZD false def %% flag unic x detectar si ho es
 /iDimoni 0 def
 { %% loop de decarrega de definicions pels dic creats
  currentdict iDimoni 4 string cvs cvn get dup /TrosDic exch def
  /LNRZD_ false def %% flag x detectar si ho es i l'objecte que te /H esta en el tros que processem
  { %% forall
  dup type /dicttype eq
  {
  /Linearized known
  {
  /LNRZD true def
  /LNRZD_ true def
  /quinObj exch def
  }
  {
  pop
  }ifelse
  }
  {
  pop pop
  }ifelse
  } forall
  LNRZD_
  { %% desliniaritzem si ho esta ...
  BaBeL 2 get print flush
  %% posem a la llista de baixa, l'objecte diccionari amb les dades de la liniaritzacio
  %%OdeBaixa quinObj (objecte de baixa) put
  %% capturem els offsets del paquet d'H (hints)
  TrosDic quinObj get dup
  /L get /Loctets exch def %% bytes exactes del tot fitxer PDF
  /H get dup length 2 eq
  {0 get 1 array astore}{dup 0 get exch 2 get 2 array astore}ifelse
  /elsHints exch def
  %%% NOU! donem de baixa directament l'objecte del diccionari
  TrosDic quinObj undef
  }if
  %%% voleu dir que no podriem sortir del loop un cop ja em trobat l'objecte i el Hints?
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
 } loop %% de descarrega
  
 %% flag x detectar si hi ha brossa de liniaritzacio (fitxers que no estan liniaritzats pero que tenen restes d'objectes que hi estan relacionats)
 /Lbrossa true def
  
 %%% aquest algorisme busca el num. d'objecte mes gran de totes les xref
 %%% per tal de que podem comenįar a donar nums als objectes de nova creacio
  
 %%% NOU! ara no caldra cercar quin es el num d'objecte mes gran (ja el deduirem si de cas al reescriure el PDF)
 %%% doncs ja no treballem per paquets
  
 %% TAUxREF
  
 %% /8408200 get /TRaiLeR get {== ==} forall quit
  
 %%{ % forall
 %% exch pop
 %% { % forall
 %% dup type /arraytype eq
 %% {
 %% exch 10 string cvs cvi
  
 %%% algorisme viaMorta
 %%% per fer-nos una llista d'objectes donats de baixa al dic OdeBaixa
 %%% per tal de no reescriure'n cap en cas que (tot hi amb f) encara existeixi
 %% /ndo exch def
  
 %% {
 %%% treu per la pantalleta l'xref
 %% dup ==
 %% dup 2 get /f eq
 %% {
 %% 1 get ndo exch
 %% pop 0 % substituim el proper gen num de l'objecte de baixa pel zero, doncs segurament sera el gen num original que tenia
 %% R OdeBaixa exch (objecte de baixa) put
 %% }
 %% {
  
 %% si esta liniaritzat mirem si es correcte (bytFITX=Loctets) donc podria NO tenir els Hints Streams que completen la liniaritzacio
 LNRZD
 {
  bytFITX Loctets eq %% els octets reals del fitxer coincideixen amb l'entrada /L ?
  { %% si coincideixen podem donar tranquilament de baixa els objectes corresponents als byteoffsets dels Hints
  elsHints dup length 1 eq {0 get 1 array astore}{dup 0 get exch 1 get 2 array astore}ifelse
  { %%forall
  fApplet (r) file dup 3 -1 roll setfileposition 1024 string readline pop (obj)
  search
  {
  cvx exec R %% convertim a literal
  /BOhint exch def pop pop
  /Lbrossa false def %% assegurem que estigui Liniaritzat de veritat
  /iDimoni 0 def
  { %% loop per donar de baixa els objectes corresponents al byteoffset dels Hints
  currentdict iDimoni 4 string cvs cvn get
  dup BOhint known {BOhint undef exit}{pop}ifelse
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
  } loop
  }
  { %% error de ByteOffset a /H
  pop
  %% cal emetre un MRCT ?
  BaBeL 9 get print flush
  /Lbrossa false def %% aquest flag permet salpassar errors derivats d'aquest ByteOffset fora de la norma
  }ifelse
  }forall
  }
  { %% error de ByteOffset a /L
  %% cal emetre un MRCT ?
  BaBeL 5 get print flush
  /Lbrossa false def %% aquest flag permet salpassar errors derivats d'aquest ByteOffset fora de la norma
  }ifelse
 } if
  
 %% TAUxREF {exch pop {== ==} forall} forall
 %% Lbrossa == quit
  
 %%{pop}ifelse
 %% }ifelse
 %% ndo 1 add /ndo exch def
 %% }forall
 %%% fi d'algorisme viaMorta
  
 %% ndo QuiEsAra gt % el num d'objecte mes gran de la seccio de l'xref es mes gran ?
 %% {
 %% ndo 1 sub /QuiEsAra exch def
 %% } if
 %% }{pop pop}ifelse
 %% }forall
 %%} forall
 %%% fi de QuiEsAra
  
 %% QuiEsAra pstack quit
 %% QuiEsAra 1 add /QuiEsAra exch def
 %% OdeBaixa {== ==} forall quit
  
 %% si LNRZD es a true i te errors de ByteOffset posem /LNRZD a false
 LNRZD
 {
  Lbrossa {/LNRZD false def}if
 } if
  
 %# cinquč, analitzem a fons la versiķ comparant el valor del cap del PDF
 %# amb una possible entrada /Version al /Root de l'xref + nova
 %% pesquem el trailer de la darrera xref (la mes nova)
 %% tret de si esta liniaritzat que sera la primera de totes (amb valor xref+nova=0)
 0 /xref+nova exch def %% valor inicial de l'xref mes nova
  
 LNRZD not %% no ho executem si esta liniaritzat (sempre agafara la xref+nova=0)
 {
  TAUxREF
  { %% l'xref mes nova sera la que tingui el literal mes gran numericament
  exch dup 64 string cvs cvi dup xref+nova gt
  {/xref+nova exch def pop pop}{pop pop pop}ifelse
  }forall
 } if
  
 TAUxREF
  
 xref+nova 10 string cvs cvn get %% el dic del trailer + nou
  
 /Root get /arrel+nova exch def %% n'extraiem el literal del Catalog + nou
  
 /iDimoni 0 def
 { %% loop de cerca entre els dics trencats
  currentdict iDimoni 4 string cvs cvn get
  dup arrel+nova known
  {
  %% al dic del Catalog + nou verifiquem si duu una entrada /Version
  arrel+nova get
  %% posem l'interrogador d'execucions dels gatells de CaLi2CoPi
  dup /PieceInfo known %% ja existeix aquest diccionari?
  {
  dup /PieceInfo get
  %% tret que sigui una referčncia indirecta
  dup type /nametype eq
  {
  /laBranca exch def
  %% pesquem la branca ...
  /iDimoni 0 def
  { %% loop d'interrogacio dels dicts de COMdimoni
  currentdict iDimoni 4 string cvs cvn get
  %% el diccionari de l'objecte
  dup laBranca known {laBranca get exit}{pop}ifelse
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
  }loop %% d'interrogacio dels dicts de COMdimoni
  }if
  dup /MRCT_CaLi2CoPi known
  { %% ja l'hem tractat amb CaLi2CoPi
  /MRCT_CaLi2CoPi get /Private get %% paquet d'execucions i gatells
  {
  QueLiFemFer eq
  {
  [ %% paquet de comportaments si es donen coincidčncies
  %% aixō ens portarā a poder posar un filtre al principi per avaluar si ens interessa
  %% continuar executant determinats PDF que ja s'han tractat amb CaLi2CoPi i/o s'hi s'han
  %% d'activar determinats protocols de neteja d'informaciķ (eliminat de capes, continguts
  %% de pāgina entre BDC EMC, anotacions, bookmarks, etc)
  null %% 0
  null %% 1
  null %% 2
  null %% 3
  null %% 4
  null %% 5
  null %% 6
  null %% 7
  {
  (\n\n >>>> no podem tractar dues vegades un PDF amb el gatell 8 de CaLi2CoPi <<<<\n\n\n) print flush stop
  } %% 8
  null %% 9
  null %% 10
  null %% 11
  {
  (\n\n >>>> no podem tractar dues vegades un PDF amb el gatell 12 de CaLi2CoPi <<<<\n\n\n) print flush stop
  } %% 12
  ]
  QueLiFemFer get cvx exec
  exit %% sortim del forall
  }if
  }forall %% el gatell actual coincideix amb alguna de les execucions anteriors?
  }
  { %% si no existeix MRCT_CaLi2CoPi es que no s'ha executat mai una versiķ recent de CaLi2CoPi (.037 03.2010)
  pop
  }ifelse
  }if %% si no existeix PieceInfo es que no s'ha executat mai una versiķ recent de CaLi2CoPi (.037 03.2010)
  
  %%killMetadata+InfoVell+ObjectesLength% ens carreguem l'objecte Metadata a sac (l'XML)
  dup /Metadata known
  {
  dup /Metadata get
  OdeBaixa exch /Metadata put %% posem el literal de la ref ind de l'objecte al diccionari de matar objectes
  dup /Metadata undef %% ... i matem l'entrada al Catalog
  }if
  %%% fi
  dup /Version known
  {
  /Version get 5 string cvs cvr dup vPDF cvr gt
  { %% sempre que sigui mes nova que la del cap, l'actualitzarem
  5 string cvs /vPDF exch def
  }
  {
  pop
  }ifelse
  }
  {
  pop
  }ifelse
  exit
  }
  {
  pop
  }ifelse
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
 } loop %% de cerca
  
 %%% sise, treiem x la pantalleta la versio del PDF
 BaBeL 10 get print flush vPDF print flush (\n) print flush
  
 %%killMetadata+InfoVell+ObjectesLength
  
 %#%14bis% esborrem de COMdimoni l'objecte Metadata a donar de baixa +InfoVell (en cas que sigui una ref ind) i els objectes que duen el valor Length dels streams
 (%#%14bis%)==
 /iDimoni 0 def
 { %% loop de decarrega de definicions pels dic creats
  OdeBaixa
  {
  pop
  currentdict iDimoni 4 string cvs cvn get
  exch undef
  } forall
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
 } loop %% de descarrega
  
 %% control de temps
 %%usertime Td'ara sub == (gestio d'objectes i baixes\n) print flush
  
 %% control de temps
 %%usertime /Td'ara exch def
  
 %#%15% definim una variable pel final de línia EOL, així podrem variar-la quan interessi
 (%#%15%)==
 [
  (\012) %% 0 salt de linia (LF) 10 decimal
  (\015) %% 1 retorn de carro (CR) 13 decimal
  (\015\012) %% 2 retorn de carro (CR) + salt de linia (LF)
 ] 2 get /EOL exch def %% aquest EOL ha de ser obligatori amb 2 caracters doncs p.e. a la taula xref ho es!
  
 %#%16% loop recursiu entre diccionaris x eliminar duplicats d'objectes
 (%#%16%)==
 BaBeL 19 get print flush
 /iDimoni 0 def
 { %% loop on mirem de forma ascendent, objecte x objecte, el diccionaris trencats del PDF
  currentdict iDimoni 4 string cvs cvn get
  { %% forall x tots els objectes del dic actual
  iDimoni 1 add /iDimoni2 exch def %% per observar els dics de sobre
  iDimoni2 1 add MaxDimoni gt {pop pop exit} if %% pleguem si hem superat MaxDimoni
  pop /obBesso exch def %% nom de l'objecte x cercar-ne el seu besso
  {
  currentdict iDimoni2 4 string cvs cvn get
  %% si el trobem mes amunt, eliminem l'objecte besso al dic mes antic
  obBesso known
  {
  currentdict iDimoni 4 string cvs cvn get obBesso undef exit
  }
  {
  iDimoni2 1 add /iDimoni2 exch def
  }ifelse
  iDimoni2 MaxDimoni eq {exit} if
  } loop
  } forall
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
 } loop %% x eliminar objectes duplicats
  
 %% /Salva'm save def %% anellat important x poder eliminar els fitxers al final
  
 %#%17% generem el diccionari XRay per tal de desar les dades d'anālisi del PDF
 %# tant per l'escriptura del TXT com per consultes a fer en determinats moments
 %# modificarem progressivament aquests continguts xq quedin endreįats a cada pāgina
 (%#%17%)==
 /XRay
 <<
  /PeDeEfa
  <<
  /V vPDF %% versio de PDF
  /O globaldict /objPDF get %% pesquem el nombre intern d'objectes
  /Errades
  << %% si el diccionari es buit voldra dir que no hi hauran hagut errors
  >> %% diccionari on descriurem els errors i els objectes que els produeixen
 %% /EP
 %% << % si el diccionari es buit voldra dir que no hi hauran hagut WARNINGS
 %% >> % diccionari on descriurem els WARNINGS i els objectes que els produeixen (ara nomes fet servir x errors d'arees)
  >>
  /Lleixes
  << %% si el dic es buit es que no n'hi ha
  /nomIE << >> %% diccionari amb els parells /NumObj [NomIntern NomExtern FetaServir? PrintState]
  /Unicode false %% les cadenes de text son en unicode?
  /NoHeEscrit
  << %% si el diccionari es buit voldra dir que no hi hauran hagut incidencies en l'escriptura
  >> %% diccionari on escriurem els noms dels caracters (com a clau) que no hem pogut escriure i com a valor hi haura un diccionari que contindra una entrada pel seu codi (1/2 bytes) i a quina taula ha fallat (PDF o Win)
  /Errades
  << %% si el diccionari es buit voldra dir que no hi hauran hagut errors
  >> %% diccionari on descriurem els errors i els objectes que els produeixen /NumObj (text de l'error)
  /Desconegudes
  << %% diccionari on primer desarem el nom intern de les layers utilitzades a l'stream dels Contents i despres mentre comprovem si estan definides a nomIE les anirem donant de baixa ...
  >> %% de forma que si el dic no queda buit voldra dir que hi ha Layers desconegudes no definides
  /Buides
  << >> %% diccionari on desarem els noms de les Lleixes absolutament buides i que llistarem com a WARNING:EmptyLayer
  >>
  /Separacions
  << %% si el dic es buit es que no n'hi ha
  %% hi desarem directament els noms en parells extern/intern
  >>
  /EstatsGrafics
  << %% si el dic es buit es que no n'hi ha
  /Desconeguts
  << %% diccionari on primer desarem el nom dels estats grafics utilitzats a l'stream dels Contents i despres a partir del ExtGState dic de Resources anirem donant de baixa els que hi coincideixin ...
  >> %% ... de forma que si el dic no queda buit voldra dir que hi ha Estats Grafics desconeguts no definits a Resources
  /Utilitzats << >>
  /NoUtilitzats << >>
  /Errades
  << %% si el diccionari es buit voldra dir que no hi hauran hagut errors
  >> %% diccionari on descriurem els errors i els objectes que els produeixen
  >>
  /EspaisDeColor
  << %% si el dic es buit es que no n'hi ha
  /Desconeguts
  << %% diccionari on primer desarem el nom dels espais de color utilitzats a l'stream dels Contents i despres a partir del ColorSpace dic de Resources anirem donant de baixa els que hi coincideixin ...
  >> %% ... de forma que si el dic no queda buit voldra dir que hi ha Estats Grafics desconeguts no definits a Resources
  /Utilitzats << >>
  /NoUtilitzats << >>
  /Errades
  << %% si el diccionari es buit voldra dir que no hi hauran hagut errors referents als espais de color (tant el directe com l'alternatiu)
  >> %% diccionari on descriurem els errors amb el nom dels espais de color que els produeixen ... /NomInternEspaiColor (text de l'error)
  /TintesiValors
  << %% diccionari on descriurem tots els noms diferents de les tintes (colors) que intervenen i els seus valors perceptuals (valors 0/1)
  >> %% aquesta informacio sera la guia (resultara clau) per fer la Separacio de colors (tintes)
  /Removed << >> %% diccionari on escriurem les Tintes CMYK que donarem de baixa a TintesiValors segons el criteri de comportament de les separacions provinents de /All
  >>
  /ObjectesX
  << %% cal que hi fiquem els contiguts per defecte ara?
  /1 %% iniciem la politica de dades endreįades plana a plana
  <<
  %% deixem de forma fixa el diccionari trEncAclOsqUEs d'analisi de les imatges segmentades
  /trEncAclOsqUEs <<>>
  /Desconeguts
  << %% diccionari on primer desarem el nom dels Objectes X utilitzats a l'stream dels Contents i despres a partir del XObject dic de Resources anirem donant de baixa els que hi coincideixin ...
  >> %% ... de forma que si el dic no queda buit voldra dir que hi ha Objectes X desconeguts no definits a Resources
  /Utilitzats << >>
  /NoUtilitzats << >>
  /Errades
  << %% si el diccionari es buit voldra dir que no hi hauran hagut errors referents als Objectes X
  >> %% diccionari on descriurem els errors amb el nom dels Objectes X que els produeixen ... /NomInternXObject (text de l'error)
  >>
  >>
  /Patterns&Shadings
  << %% de moment farem servir la mateixa estrategia que els XObjects
  %% si el dic es buit es que no n'hi ha
  /Desconeguts
  << %% diccionari on primer desarem el nom dels Patterns utilitzats a l'stream dels Contents i despres a partir del ... anirem donant de baixa els que hi coincideixin ...
  >> %% ... de forma que si el dic no queda buit voldra dir que hi ha Patterns desconeguts no definits a ...
  /Utilitzats << >>
  /NoUtilitzats << >>
  /Errades
  << %% si el diccionari es buit voldra dir que no hi hauran hagut errors referents als Patterns
  >> %% diccionari on descriurem els errors amb el nom dels Patterns que els produeixen ...
  >>
 >> def
 %% fi del diccionari XRay
  
 %#%18% capturem ara el /Root + nou
 (%#%18%)==
 0 /xref+nova exch def %% valor inicial de l'xref mes nova
 LNRZD not %% no ho executem si esta liniaritzat (sempre agafara la xref+nova=0)
 {
  TAUxREF
  { %% l'xref mes nova sera la que tingui el literal mes gran numericament
  exch dup 10 string cvs cvi dup xref+nova gt
  {/xref+nova exch def pop pop}{pop pop pop}ifelse
  }forall
 } if
 TAUxREF xref+nova 10 string cvs cvn get
  
 %% ara de moment nomes modificarem el dic Info si existeix (si no existeix el crearem + avall)
 dup /Info known
 {
  dup /Info get %% se suposa es una referencia indirecte?
  dup type /nametype eq
  { %% si
  /aCercar exch def
  %% pesquem el dic Info ...
  /iDimoni 0 def
  { %% loop d'interrogacio dels dicts de COMdimoni
  currentdict iDimoni 4 string cvs cvn get
  dup aCercar known
  {
  aCercar get dup /elDicInfo exch def
  
  %% control temporal i exclusiu de JBC per evitar execucions amb versions molt anteriors
 %% QueLiFemFer 8 eq
 %% {
 %% dup /Producer get (CaLi2CoPi) search
 %% (:-+)pstack quit
 %% (\n\n >>>> no podem tractar dues vegades un PDF amb el gatell 8 de CaLi2CoPi <<<<\n\n\n)
 %% }if
  
  %%dup
  /Producer
  %% (GNU GPL FemFum CaLi2CoPi ¸.ˇ¯ˇ.¸.ˇ¨Ģ~) %% WinAnsi no es veu bé als nous Viewers
  %% en Unicode per tal que funcioni bé amb tots els sistemes
  <feff0047004e0055002000470050004c002000460065006d00460075006d002000430061004c006900320043006f00500069002000b8002e00b700b400af006000b7002e00b8002e00b700b400a800ab007e>
  put
  %% /Subject (Tint Separation) put
  exit
  }
  {
  pop
  }ifelse
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
  } loop %% d'interrogacio dels dicts de COMdimoni
  }
  { %% encara que seria molt estrany que fos un dic directe ...
  dup /elDicInfo exch def
  %%dup
  /Producer %% (GNU GPL FemFum CaLi2CoPi ¸.ˇ¯ˇ.¸.ˇ¨Ģ~) %% WinAnsi no es veu bé als nous Viewers
  %% en Unicode per tal que funcioni bé amb tots els sistemes
  <feff0047004e0055002000470050004c002000460065006d00460075006d002000430061004c006900320043006f00500069002000b8002e00b700b400af006000b7002e00b8002e00b700b400a800ab007e>
  put
  %% /Subject (Tint Separation) put
  } ifelse
 }
 {
  /elDicInfo null def %% si no existeix hi posem un null x si volem crear-lo al loop de separacions del final
 }ifelse
 %% fi de modificacio del DocInfo
  
 %% de l'xref mes nova pesquem Root
 /Root get
 /CtLg exch def %% el Root + nou
 null /l'arrel exch def %% valor inicial per detectar casos en que no hi hagi /Pages
  
 %% pesquem l'arrel /Pages del document
 /iDimoni 0 def
 { %% loop d'interrogacio dels dicts de COMdimoni
  currentdict iDimoni 4 string cvs cvn get
  dup CtLg known {CtLg get /Pages get /l'arrel exch def exit}{pop}ifelse
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
 } loop %% d'interrogacio dels dicts de COMdimoni
  
 %% no hem trobat l'arrel /Pages !
 l'arrel null eq
 {
  BaBeL 18 get print flush
  %% informem dels fitxers del tmp
  (\n\n ... quedaran temporals per esborrar!\n\n) print flush
  clear stop %%quit
 }if
  
 %#%19% desem l'arbre de pāgines del document dins el diccionari quinaPlana
 %# escrivim l'arbre de pāgines de forma ordenada per la seva numeraciķ
 (%#%19%)==
  
 %% d'on ve tota aquesta merda !!!!!!!!
 %%clear
  
 /quinaPlana <<>> def %% diccionari on guardarem Num. Pagina / Clau de Pagina
 /cntpa 0 def %% valor inicial del compta pagines
  
 %% pesquem el dict arrel de /Pages
 /iDimoni 0 def
 { %% loop d'interrogacio dels dicts de COMdimoni
  currentdict iDimoni 4 string cvs cvn get
  %% el diccionari de l'objecte /Pages arrel
  dup l'arrel known {l'arrel get exit}{pop}ifelse
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
 } loop %% d'interrogacio dels dicts de COMdimoni
  
 /Kids get %% l'array de fills obligatoria
 aload pop
 %% AQUEST LOOP CAPGIRA TOTS ELS ELEMENTS TROBATS A LA PILA
 count dup 1 eq
 {
  pop
 } %% tret de que nomes n'hi hagi 1
 {
  /atura't exch def /ici 2 def
  {ici -1 roll ici 1 add /ici exch def ici atura't gt {exit} if} loop
 } ifelse
 { %% loop d'espia_PagesTree_2.ps
  count 0 eq {exit} if
  { %% loop
  count 0 ne
  {
  dup type /marktype eq {pop}{exit} ifelse
  }
  {
  exit
  }ifelse
  } loop %% elimina les marques d'inici d'array
  count 0 eq {exit} if
  %%dup COMdimoni exch get % el diccionari de l'objecte
  dup /laBranca exch def
  %% pesquem la branca ...
  /iDimoni 0 def
  { %% loop d'interrogacio dels dicts de COMdimoni
  currentdict iDimoni 4 string cvs cvn get
  %% el diccionari de l'objecte
  dup laBranca known {laBranca get exit}{pop}ifelse
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
  } loop %% d'interrogacio dels dicts de COMdimoni
  %% (:::) pstack quit % aqui cal servir el loop de dics de COMdimoni amb una variable
  dup
  dup /Type known
  { %% nou per controlar pagines (/Pages) que no porten la clau /Type (no Linearized)
  /Type get dup /Pages eq
  }
  {
  dup /Kids known {true}{false}ifelse
  } ifelse %% nou per controlar pagines (/Pages) que no porten la clau /Type (en fitxers no optimitzats)
  { %% ifelse
  %% son Pages
  pop exch pop
  /Kids get
  mark exch aload pop
  %% AQUEST LOOP CAPGIRA TOTS ELS ELEMENTS TROBATS A LA PILA
  counttomark dup 1 eq
  {
  pop
  } %% tret de que nomes n'hi hagi 1
  {
  /atura't exch def /ici 2 def
  {
  ici -1 roll ici 1 add /ici exch def ici atura't gt {exit} if
  } loop
  } ifelse
  { %% loop #
  count 0 eq {exit} if
  { %% loop
  count 0 ne
  {
  dup type /marktype eq {pop}{exit} ifelse
  }
  {
  exit
  }ifelse
  } loop %% elimina les marques d'inici d'array
  count 0 eq {exit} if
  %%dup COMdimoni exch get
  dup /laBranca exch def
  %% pesquem la branca ...
  /iDimoni 0 def
  { %% loop d'interrogacio dels dicts de COMdimoni
  currentdict iDimoni 4 string cvs cvn get
  %% el diccionari de l'objecte
  dup laBranca known {laBranca get exit}{pop}ifelse
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
  } loop %% d'interrogacio dels dicts de COMdimoni
  dup
  dup /Type known
  { %% nou per controlar pagines (/Pages) que no porten la clau /Type (no Linearized)
  /Type get dup
  /Pages eq
  }
  {
  dup /Kids known {true}{false}ifelse
  } ifelse %% nou per controlar pagines (/Pages) que no porten la clau /Type (en fitxers no optimitzats)
  { %% son Pages
  pop exch pop
  /Kids get %% posem l'array a la pila per la seguent volta de loop
  mark exch aload pop
  %% AQUEST LOOP CAPGIRA TOTS ELS ELEMENTS TROBATS A LA PILA
  counttomark dup 1 eq
  {
  pop
  } %% tret de que nomes n'hi hagi 1
  {
  /atura't exch def /ici 2 def
  {
  ici -1 roll ici 1 add /ici exch def ici atura't gt {exit} if
  } loop
  } ifelse
  }
  { %% son Pagines
  pop pop %% ens carreguem el diccionari de la pagina
  cntpa 1 add /cntpa exch def %% cntpa 5 string cvs show
  quinaPlana exch cntpa 5 string cvs cvn exch put %% afegim el parell Num. Pagina / Clau de Pagina
  count 0 eq {exit} if
  { %% loop
  count 0 ne
  {
  dup type /marktype eq {pop}{exit} ifelse
  }
  {
  exit
  }ifelse
  } loop %% elimina les marques d'inici d'array
  exit
  } ifelse
  count 0 eq {exit} if
  { %% loop
  count 0 ne
  {
  dup type /marktype eq {pop}{exit} ifelse
  }
  {
  exit
  }ifelse
  } loop %% elimina les marques d'inici d'array
  } loop %% fi de loop #
  count 0 eq {exit} if
  { %% loop
  count 0 ne
  {
  dup type /marktype eq {pop}{exit} ifelse
  }
  {
  exit
  }ifelse
  } loop %% elimina les marques d'inici d'array
  }
  { %% son Pagines
  pop pop %% ens carreguem el diccionari de la pagina
  cntpa 1 add /cntpa exch def %%cntpa 5 string cvs show
  quinaPlana exch cntpa 5 string cvs cvn exch put %% afegim el parell Num. Pagina / Clau de Pagina
  count 0 eq {exit} if
  { %% loop
  count 0 ne
  {
  dup type /marktype eq {pop}{exit} ifelse
  }
  {
  exit
  }ifelse
  } loop %% elimina les marques d'inici d'array
  } ifelse
  count 0 eq {exit} if
  { %% loop
  count 0 ne
  {
  dup type /marktype eq {pop}{exit} ifelse
  }
  {
  exit
  }ifelse
  } loop %% elimina les marques d'inici d'array acomulades
 } loop %% fi d'espia_PagesTree_2.ps
  
 quinaPlana length /maxPlana exch def %% nombre de pagines del document o darrer numero de plana
  
 QueLiFemFer 1 eq %:01 SEPARACIĶ DE TINTES
 {
  %% excedim el nombre de pagines permes (ara 1) per la separacio de colors ?
  maxPlana 1 gt
  {
 %#%19bis0% detector de si hi ha més d'1 pāgina per la separaciķ de colors
 (%#%19bis0%)==
  XRay /PeDeEfa get /Errades get /Pages ( Exceed the maximum allowed) put
  BaBeL 38 get print flush %%maxPlana 5 string cvs print flush % posiblement espia_PagesTree_2.ps no estigui prou afinat
  (\n\n) print flush stop %%quit
  } if
 }if %/01 SEPARACIĶ DE TINTES
  
 %%%CALi2COPi%%% fi de desat de l'arbre de pagines dins quinaPlana
  
 %%% a3copiseny ... DESACTIVEM XRAY
 %%false {
  
 %%19bis1% escrivim la primera part d'XRay
 BaBeL 30 get print flush
 (%#%19bis1%)==
 FitxerXRay
 %% haurem de treure aquesta linia quan el 6Q ens deixi el dir de la DLL pelat (amb el / final) sense Info
 %%dup length 4 sub 0 exch getinterval
 %% l'XRay ara sempre el farem de tot el PDF
 dup length dup /iNSeRT exch def
 nomFITX dup length string copy
 %% filtrem possibles caracter indesitjables per _ (95)
 /dena exch def %% cadena a filtrar
 /idena 0 def %% index de caracters
 /Mai %% (*? .:,;/\\) eren els q filtravem abans
 ( .,;:?*#!§$%&/\(\){}<>=`´|\\'") def %% els caracters indesitjables (els fem quadrar amb filtrat d'executal.php)
 dena
 { %% forall
  /SiMai false def
  /A_ exch def Mai
  { %% forall
  A_ eq {/SiMai true def exit}if
  }forall
  SiMai {dena idena 95 put}if
  idena 1 add /idena exch def
 }forall
 dena
 length add dup /iNSeRT2 exch def 9 add
 string dup 3 -1 roll 0 exch putinterval
 dup iNSeRT dena putinterval
 dup iNSeRT2 (_XRay.txt) putinterval
 /FitxerXRay exch def
 FitxerXRay (w) file dup /wFitxerXRay exch def
 (Preview:) writestring
 [
  { %% 0 (repica el fitxer de forma 'intacte')
  wFitxerXRay (Identity\015\012) writestring
  }
  { %% 1 (separacio de colors --projecte WebProof--)
  wFitxerXRay (Tint Separations\015\012) writestring
  }
  { %% 2 (posa creus de tall)
  wFitxerXRay (Registration Marks\015\012) writestring
  }
  { %% 3 (corrector tipografic de la Ela Geminada)
  wFitxerXRay (Ghyph Correction\015\012) writestring
  }
  { %% 4 (dada variable)
  wFitxerXRay (Merging\015\012) writestring
  }
  { %% 5 (desfa o suma pagines)
  wFitxerXRay (Attach or Detach Pages\015\012) writestring
  }
  { %% 6 (relliga imatges --projecte A3copiseny--)
  wFitxerXRay (Stich Images\015\012) writestring
  }
  { %% 7 (farceix imatges previament exportades --projecte A3copiseny--)
  wFitxerXRay (Embeds Exported Images\015\012) writestring
  }
  { %% 8 (efecte Hans Peter Feldmann)
  wFitxerXRay (Hans Peter Feldmann Effect\015\012) writestring
  }
  { %% 9 (exportador d'imatges segons convencio d'A3copiseny)
  wFitxerXRay (export JPEG images\015\012) writestring
  }
  { %% 10 (verificador de PDF)
  wFitxerXRay (PDF preflight\015\012) writestring
  }
  {
  } %% 11 (torsimany)
  { %% 12 (arbre jerārquic --projecte Polynorma--)
  wFitxerXRay (bookmarks tree\015\012) writestring
  }
 ] QueLiFemFer get cvx exec %% opcio del menu de capįalera
 wFitxerXRay dup (PDF:name:) writestring nomFITX writestring
 wFitxerXRay dup (\015\012PDF:version:) writestring vPDF writestring
 wFitxerXRay dup (\015\012PDF:pages:) writestring maxPlana 7 string cvs writestring
 %% aqui escriurem tots els Bbox definits
 /araPlana 1 def %% valor inicial del ventador de pagines
 { %% loop explorador d'arees pagina a pagina
  quinaPlana araPlana 12 string cvs
  dup XRay /PeDeEfa get exch 5 dict put %% incrustem un dict descriptiu x pagina (ara nomes hi posarem les 5 possibles arees)
  get /actGina exch def %% extraiem la ref ind de la primera pagina
  /iDimoni 0 def
  { %% loop d'interrogacio dels dicts de COMdimoni
  currentdict iDimoni 4 string cvs cvn get
  %% el diccionari de l'objecte
  dup actGina known {actGina get exit}{pop}ifelse
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
  } loop %% d'interrogacio dels dicts de COMdimoni
  %% del dic de la plana interroguem totes les possibles arees Bbox que hi poden haver
  dup
  /sOrtim false def
  /hihaParent false def
  { %% loop que va pujant mentre hi hagi Parent i no hi hagi MediaBox (fins l'arrel /Pages)
  /MediaBox known
  {
  dup /MediaBox get
  %% Ampliem el MediaBox de llUm punts x banda (30 punts x la meitat de les creus), total llUmx2 punts d'X i llUmx2 punts d'Y
  QueLiFemFer 2 eq %:02 MARQUES DE TALL
  { %% modifiquem tambe a l'XRay
  %#%19bis2% definim un format de pāgina per defecte (ara A4 vertical)
  (%#%19bis2%)==
  /paginaXdefecte [0 0 595 842] def
  %#%19bis3% reescrivim les dades de les ārees de treball a l'XRay
  (%#%19bis3%) ==
  [ %% executem un procediment o altre en funcio de l'area de creus de tall triada
  { %% xMediaBox
  aload pop %% desempaquetem
  dup llUm add /Ytrim exch def exch dup llUm add /Xtrim exch def exch %% desem els valors Xur i Yur del TrimBox
  llUm 2 mul add exch llUm 2 mul add exch
  3 index /trimX exch llUm add def 2 index /trimY exch llUm add def %% desem els valors del Xll i Yll TrimBox
  4 array astore %% empaquetem
  count 1 sub index 1 index
  /MediaBox exch put %% deixem a la pila una copia del MediaBox i desem assegurant-nos que copiem el dic que hi ha a la base de la pila (doncs segur q es el /Page)
  %% generem el TrimBox per visualitzar millor la feina
  count 1 sub index %% ens assegurem que copiem el dic que hi ha a la base de la pila (doncs segur q es el /Page)
  /TrimBox [trimX trimY Xtrim Ytrim] put %% el desem a /Page
  
  dup /AMedia exch def %% en desem una copia
  XRay /PeDeEfa get araPlana 12 string cvs get dup /MediaBox AMedia put %% desem al dic numerat de la pagina
  /TrimBox [trimX trimY Xtrim Ytrim] put %% el desem al dic numerat de la pagina
  }
  { %% xCropBox
  %% aqui nomes ens cal endrecar el MediaBox al dic numnerat de la pagina a PeDeEfa de l'XRay, ja farem la resta quan interroguem si hi ha CropBox
  dup /AMedia exch def %% en desem una copia
  XRay /PeDeEfa get araPlana 12 string cvs get /MediaBox AMedia put %% desem al dic numerat de la pagina
  }
  { %% xTrimBox
  %% aqui nomes ens cal endrecar el MediaBox al dic numnerat de la pagina a PeDeEfa de l'XRay, ja farem la resta quan interroguem si hi ha CropBox
  dup /AMedia exch def %% en desem una copia
  XRay /PeDeEfa get araPlana 12 string cvs get /MediaBox AMedia put %% desem al dic numerat de la pagina
  }
  ]
  xQuinaArea get cvx exec
  }if %/02 MARQUES DE TALL
  %% aqui cal endrecar el MediaBox al dic numerat de la pagina a PeDeEfa de l'XRay xq no falli la comprovacio a la seccio seguent
  dup /AMedia exch def %% en desem una copia
  XRay /PeDeEfa get araPlana 12 string cvs get /MediaBox AMedia put %% desem al dic numerat de la pagina
  QueLiFemFer 2 eq xQuinaArea 1 eq xQuinaArea 2 eq or and %% hem de fer creus pel Crop o el Trim per no escriure ara la dada del MediaBox a fitxer XRay
  {
  pop %% ens carreguem l'array del MediaBox
  }
  {
  wFitxerXRay dup dup (\015\012PDF:page) writestring araPlana 12 string cvs writestring (:MediaBox:) writestring
  %% escriu la part sencera mes el punt mes la part decimal (fins al quart) manualment
  { %% forall
  10000 mul cvi 20 string cvs dup
  length 4 sub dup 0 le
  {
  pop (000000) /EmesD exch def
  EmesD /NullEncode filter /XiFRa exch def
  XiFRa (0.) writestring XiFRa exch writestring
  XiFRa closefile
  }
  {
  /pD exch def dup 0 pD getinterval
  dup length 3 -1 roll pD 4 getinterval dup length 3 -1 roll add 1 add string
  /EmesD exch def EmesD /NullEncode filter /XiFRa exch def
  exch XiFRa exch writestring XiFRa 46 write XiFRa exch writestring
  XiFRa closefile
  }ifelse
  EmesD wFitxerXRay exch writestring wFitxerXRay 32 write
  } forall
  }ifelse
  /sOrtim true def
  }
  { %% si no hi es vol dir que l'hereta del Parent (doncs es obligatori)
  dup /Parent known
  {
  hihaParent
  {
  /Parent get
  }
  {
  dup /Parent get
  }ifelse
  /actParent exch def %% extraiem la ref ind de la primera pagina
  /iDimoni 0 def
  { %% loop d'interrogacio dels dicts de COMdimoni
  currentdict iDimoni 4 string cvs cvn get
  %% el diccionari de l'objecte
  dup actParent known {actParent get exit}{pop}ifelse
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
  } loop %% d'interrogacio dels dicts de COMdimoni
  %% el dic de la branca de pagines d'on penja
  dup
  /hihaParent true def
  }
  { %% haura esgotat tots els Parents sense trobar MediaBox
  %% malgrat sigui un error greu no el fem petar? (doncs l'Acrobat l'admet si hi han altres arees)
  XRay /PeDeEfa get /Errades get /MissingMediaBoxPage: araPlana 12 string cvs put
  /sOrtim true def
  }ifelse
  }ifelse
  sOrtim
  {
  hihaParent {pop}if %% si hem tibat de Parent hi haura un dic d'entremig sobrer
  exit
  }if
  } loop %% recursiu per trobar el MediaBox fins l'arrel /Pages si cal
  
  dup
  /sOrtim false def
  /hihaParent false def
  { %% loop que va pujant mentre hi hagi Parent i no hi hagi CropBox (fins l'arrel /Pages)
  /CropBox known
  {
  dup /CropBox get dup /ACrop exch def %% en desem una copia
  %% avaluem si CropBox es dins els marges minim i maxims de MediaBox i si no, fem un WARNING i l'adaptem
  /femWARNING false def
  XRay /PeDeEfa get araPlana 12 string cvs get /MediaBox known %% hi ha MediaBox?
  {
  QueLiFemFer 2 eq %:02 MARQUES DE TALL
  {
  [ %% executem un procediment o altre en funcio de l'area de creus de tall triada
  { %% xMediaBox
  pop AMedia dup dup /ACrop exch def %% igualem el CropBox al MediaBox
  count 1 sub index %% ens assegurem que copiem el dic que hi ha a la base de la pila (doncs segur q es el /Page)
  exch /CropBox exch put %% i redesem a l'objecte /Page
  }
  { %% xCropBox
  %% si posem les creus pel CropBox regenerem el MediaBox als marges necessaris de les creus
  aload pop %% desempaquetem
  dup llUm add /Ytrim exch def exch dup llUm add /Xtrim exch def exch %% desem els valors Xur i Yur del TrimBox
  llUm 2 mul add exch llUm 2 mul add exch
  3 index /trimX exch llUm add def 2 index /trimY exch llUm add def %% desem els valors del Xll i Yll TrimBox
  4 array astore %% empaquetem
  count 1 sub index 1 index
  /MediaBox exch put %% deixem a la pila una copia del MediaBox i desem assegurant-nos que copiem el dic que hi ha a la base de la pila (doncs segur q es el /Page)
  %% generem el TrimBox per visualitzar millor la feina
  count 1 sub index %% ens assegurem que copiem el dic que hi ha a la base de la pila (doncs segur q es el /Page)
  dup /TrimBox [trimX trimY Xtrim Ytrim] put %% el desem a /Page
  /CropBox undef %% ens assegurem d'esborrar el CropBox a /Page
  dup /AMedia exch def %% en desem una copia
  XRay /PeDeEfa get araPlana 12 string cvs get dup dup /MediaBox AMedia put %% desem al dic numerat de la pagina
  /TrimBox [trimX trimY Xtrim Ytrim] put %% el desem al dic numerat de la pagina
  /CropBox undef %% ens assegurem d'esborrar el CropBox al dic numerat d'XRay
  }
  { %% xTrimBox
  }
  ]
  xQuinaArea get cvx exec
  }if %/02 MARQUES DE TALL
  ACrop 0 get AMedia 0 get lt {ACrop 4 array copy dup AMedia 0 get 0 exch put /ACrop exch def /femWARNING true def}if %% si te la Xll + petita la igualem a la del MediaBox
  ACrop 1 get AMedia 1 get lt {ACrop 4 array copy dup AMedia 1 get 1 exch put /ACrop exch def /femWARNING true def}if %% si te la Yll + petita la igualem a la del MediaBox
  ACrop 2 get AMedia 2 get gt {ACrop 4 array copy dup AMedia 2 get 2 exch put /ACrop exch def /femWARNING true def}if %% si te la Xur + gran la igualem a la del MediaBox
  ACrop 3 get AMedia 3 get gt {ACrop 4 array copy dup AMedia 3 get 3 exch put /ACrop exch def /femWARNING true def}if %% si te la Yur + gran la igualem a la del MediaBox
  femWARNING
  {
  %% escrivim el WARNING
  wFitxerXRay dup dup (\015\012PDF:page) writestring araPlana 12 string cvs writestring (:WARNING:CropBox overflows MediaBox!) writestring
  }if
  }
  { %% NO hi ha MediaBox!
  %% fem el mateix que Acrobat: li donem el valor del CropBox tenint en compte que caldra filtra-lo tambe xq es normalitzi (si cal) ...
  ACrop
  %% Ampliem el MediaBox+CropBox de llUm punts x banda (20 de marge + 30 x la meitat de les creus), total llUmx2 punts d'X i llUmx2 punts d'Y
  QueLiFemFer 2 eq %:02 MARQUES DE TALL
  {
  [ %% executem un procediment o altre en funcio de l'area de creus de tall triada
  { %% xMediaBox
  aload pop %% desempaquetem
  dup llUm add /Ytrim exch def exch dup llUm add /Xtrim exch def exch %% desem els valors maxims originals+llUm x generar el TrimBox
  llUm 2 mul add exch llUm 2 mul add exch
  4 array astore %% empaquetem i deixem a la pila
  exch pop dup %% eliminem l'array original sense modificar xq quedi reflectit el canvi a l'XRay
  /trasllX llUm def /trasllY llUm def %% valors del trasllat de l'eix de coordenades per resituar el contingut de pagina
  %% generem el TrimBox per visualitzar millor la feina
  count 1 sub index %% ens assegurem que copiem el dic que hi ha a la base de la pila (doncs segur q es el /Page)
  /TrimBox [trasllX trasllY Xtrim Ytrim] put %% el desem a /Page
  }
  { %% xCropBox
  %% si posem les creus pel CropBox regenerem el MediaBox als marges necessaris de les creus
  aload pop %% desempaquetem
  dup llUm add /Ytrim exch def exch dup llUm add /Xtrim exch def exch %% desem els valors Xur i Yur del TrimBox
  llUm 2 mul add exch llUm 2 mul add exch
  3 index /trimX exch llUm add def 2 index /trimY exch llUm add def %% desem els valors del Xll i Yll TrimBox
  4 array astore %% empaquetem
  count 1 sub index 1 index
  /MediaBox exch put %% deixem a la pila una copia del MediaBox i desem assegurant-nos que copiem el dic que hi ha a la base de la pila (doncs segur q es el /Page)
  %% generem el TrimBox per visualitzar millor la feina
  count 1 sub index %% ens assegurem que copiem el dic que hi ha a la base de la pila (doncs segur q es el /Page)
  dup /TrimBox [trimX trimY Xtrim Ytrim] put %% el desem a /Page
  /CropBox undef %% ens assegurem d'esborrar el CropBox a /Page
  dup /AMedia exch def %% en desem una copia
  XRay /PeDeEfa get araPlana 12 string cvs get dup dup /MediaBox AMedia put %% desem al dic numerat de la pagina
  /TrimBox [trimX trimY Xtrim Ytrim] put %% el desem al dic numerat de la pagina
  /CropBox undef %% ens assegurem d'esborrar el CropBox al dic numerat d'XRay
  }
  { %% xTrimBox
  }
  ]
  xQuinaArea get cvx exec
  }if %/02 MARQUES DE TALL
  QueLiFemFer 2 eq xQuinaArea 1 eq xQuinaArea 2 eq or and %% hem de fer creus pel Crop o el Trim per no repicar de nou el Media, Crop i Trim
  {
  pop
  }
  {
  {dup 0 lt{pop 0}if}forall %% ... si hi ha cap valor menor de zero, el deixem a zero ...
  %% ... llavors restant Xur-Xll i Yur-Yll, en quedaran els valors absoluts que seran els nous Xur i Yur ...
  3 -1 roll sub abs dup 0 eq {pop 3}if %% ... tret que siguin zero, on llavors hi deixariem el valor minim admes de format de pagina de PDF (3x3 pt)
  exch 3 -1 roll sub abs dup 0 eq {pop 3}if exch
  0 3 1 roll 0 4 1 roll 4 array astore %% ... doncs Xll i Yll quedaran a zero, i ho empaquetem
  /ACrop exch def %% desem l'array normalitzada
  XRay /PeDeEfa get araPlana 12 string cvs get dup dup /CropBox ACrop put %% desem al dic numerat de la pagina el CropBox normalitzat
  /MediaBox ACrop put %% desem al dic numerat de la pagina el nou MediaBox
  /TrimBox [trasllX trasllY Xtrim Ytrim] put %% desem al dic numerat de la pagina el nou TrimBox
  %% escrivim el WARNING
  wFitxerXRay dup dup (\015\012PDF:page) writestring araPlana 12 string cvs writestring (:WARNING:MediaBox is now created by CropBox!) writestring
  /femWARNING true def
  }ifelse
  }ifelse
  QueLiFemFer 2 eq xQuinaArea 1 eq and %% els dos han de ser vertaders per que no desem les dades del CropBox a l'XRay, pero si repiquem les del MediaBox
  {
  wFitxerXRay dup dup (\015\012PDF:page) writestring araPlana 12 string cvs writestring (:MediaBox:) writestring
  }
  {
  QueLiFemFer 2 eq xQuinaArea 2 eq and not %% els dos han de ser vertaders per que no desem les dades del MediaBox a l'XRay
  {
  XRay /PeDeEfa get araPlana 12 string cvs get /CropBox ACrop put %% desem al dic numerat de la pagina
  wFitxerXRay dup dup (\015\012PDF:page) writestring araPlana 12 string cvs writestring (:CropBox:) writestring
  }if
  }ifelse
  QueLiFemFer 2 eq xQuinaArea 2 eq and %% els dos han de ser vertaders per que no escriure les dades del Media o CropBox a l'XRay
  {
  pop %% ens carreguem l'array del CropBox
  }
  {
  %% escriu la part sencera mes el punt mes la part decimal (fins al quart) manualment
  { %% forall
  10000 mul cvi 20 string cvs dup
  length 4 sub dup 0 le
  {
  pop (000000) /EmesD exch def
  EmesD /NullEncode filter /XiFRa exch def
  XiFRa (0.) writestring XiFRa exch writestring
  XiFRa closefile
  }
  {
  /pD exch def dup 0 pD getinterval
  dup length 3 -1 roll pD 4 getinterval dup length 3 -1 roll add 1 add string
  /EmesD exch def EmesD /NullEncode filter /XiFRa exch def
  exch XiFRa exch writestring XiFRa 46 write XiFRa exch writestring
  XiFRa closefile
  }ifelse
  EmesD wFitxerXRay exch writestring wFitxerXRay 32 write
  } forall
  }ifelse
  QueLiFemFer 2 eq %:02 MARQUES DE TALL
  { %% modifiquem MediaBox/CropBox si cal ...
  [ %% executem un procediment o altre en funcio de l'area de creus de tall triada
  { %% xMediaBox
  femWARNING %% modifiquem MediaBox/CropBox?
  {
  XRay /PeDeEfa get araPlana 12 string cvs get
  { %% repiquem a sac desant a l'objecte /Page els valors de MediaBox i CropBox
  2 index 3 1 roll put
  }forall
  }if
  }
  { %% xCropBox
  }
  { %% xTrimBox
  }
  ]
  xQuinaArea get cvx exec
  }if %/02 MARQUES DE TALL
  /sOrtim true def
  }
  { %% si no hi es vol dir que el podria heretar del Parent
  dup /Parent known
  {
  hihaParent
  {
  /Parent get
  }
  {
  dup /Parent get
  }ifelse
  /actParent exch def %% extraiem la ref ind de la primera pagina
  /iDimoni 0 def
  { %% loop d'interrogacio dels dicts de COMdimoni
  currentdict iDimoni 4 string cvs cvn get
  %% el diccionari de l'objecte
  dup actParent known {actParent get exit}{pop}ifelse
  iDimoni 1 add /iDimoni exch def
  iDimoni MaxDimoni eq {exit} if
  } loop %% d'interrogacio dels dicts de COMdimoni
  %% el dic de la branca de pagines d'on penja
  dup
  /hihaParent true def
  }
  { %% haura esgotat tots els Parents sense trobar CropBox
  /sOrtim true def
  QueLiFemFer 2 eq xQuinaArea 1 eq and %% els dos han de ser vertaders per que si no hi ha CropBox pleguem i no fem res ...
  {
  %% fitxer TXT de control del resultat pel web+PHP
  (mancabox.txt) %% si HI HA aquest arxiu donarem un error de manca d'area solˇlicitada a CaLi2CoPi
  dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU (w) file dup 32 write closefile
  (\n\nMRCT26 MANCA CropBox: i no hi puc posar les Creus de Tall ... pleguem!\n\n) print flush stop %%quit
  }if
  }ifelse
  }ifelse
  sOrtim
  {
  hihaParent {pop}if %% si hem tibat de Parent hi haura un dic d'entremig sobrer
  exit
  }if
  } loop %% recursiu per trobar el CropBox fins l'arrel /Pages si cal
  %% la resta d'arees no son heretables hi per tant han d'anar directes a l'objecte Page
  dup /TrimBox known
  {
  dup /TrimBox get dup /ATrim exch def %% en desem una copia
  %% avaluem si TrimBox es dins els marges minim i maxims de CropBox i si no, fem un WARNING i l'adaptem
  /femWARNING false def
  XRay /PeDeEfa get araPlana 12 string cvs get /MediaBox known %% hi ha MediaBox?
  {
  XRay /PeDeEfa get araPlana 12 string cvs get dup /CropBox known %% hi ha CropBox?
  {
  pop
  }
  { %% si no hi ha CropBox li donem el valor provisional de la variable de MediaBox
  /MediaBox get /ACrop exch def
  }ifelse
  QueLiFemFer 2 eq %:02 MARQUES DE TALL
  { %% de moment no fem res ...
  [
  {} %% xMediaBox
  {} %% xCropBox
  { %% xTrimBox
  %% si posem les creus pel CropBox regenerem el MediaBox als marges necessaris de les creus
  aload pop %% desempaquetem
  dup llUm add /Ytrim exch def exch dup llUm add /Xtrim exch def exch %% desem els valors Xur i Yur del TrimBox
  llUm 2 mul add exch llUm 2 mul add exch
  3 index /trimX exch llUm add def 2 index /trimY exch llUm add def %% desem els valors del Xll i Yll TrimBox
  4 array astore %% empaquetem
  count 1 sub index 1 index
  /MediaBox exch put %% deixem a la pila una copia del MediaBox i desem assegurant-nos que copiem el dic que hi ha a la base de la pila (doncs segur q es el /Page)
  %% generem el TrimBox per visualitzar millor la feina
  count 1 sub index %% ens assegurem que copiem el dic que hi ha a la base de la pila (doncs segur q es el /Page)
  dup /TrimBox [trimX trimY Xtrim Ytrim] put %% el desem a /Page
  /CropBox undef %% ens assegurem d'esborrar el CropBox a /Page
  dup /AMedia exch def %% en desem una copia
  XRay /PeDeEfa get araPlana 12 string cvs get dup dup /MediaBox AMedia put %% desem al dic numerat de la pagina
  /TrimBox [trimX trimY Xtrim Ytrim] put %% el desem al dic numerat de la pagina
  /CropBox undef %% ens assegurem d'esborrar el CropBox al dic numerat d'XRay
  wFitxerXRay dup dup (\015\012PDF:page) writestring araPlana 12 string cvs writestring (:MediaBox:) writestring
  %% escriu la part sencera mes el punt mes la part decimal (fins al quart) manualment
  AMedia %% paquet del MediaBox
  { %% forall
  10000 mul cvi 20 string cvs dup
  length 4 sub dup 0 le
  {
  pop (000000) /EmesD exch def
  EmesD /NullEncode filter /XiFRa exch def
  XiFRa (0.) writestring XiFRa exch writestring
  XiFRa closefile
  }
  {
  /pD exch def dup 0 pD getinterval
  dup length 3 -1 roll pD 4 getinterval dup length 3 -1 roll add 1 add string
  /EmesD exch def EmesD /NullEncode filter /XiFRa exch def
  exch XiFRa exch writestring XiFRa 46 write XiFRa exch writestring
  XiFRa closefile
  }ifelse
  EmesD wFitxerXRay exch writestring wFitxerXRay 32 write
  } forall
  }
  ]
  xQuinaArea get cvx exec
  }if %/02 MARQUES DE TALL
  ATrim 0 get ACrop 0 get lt {ATrim 4 array copy dup ACrop 0 get 0 exch put /ATrim exch def /femWARNING true def}if %% si te la Xll + petita la igualem a la del CropBox
  ATrim 1 get ACrop 1 get lt {ATrim 4 array copy dup ACrop 1 get 1 exch put /ATrim exch def /femWARNING true def}if %% si te la Yll + petita la igualem a la del CropBox
  ATrim 2 get ACrop 2 get gt {ATrim 4 array copy dup ACrop 2 get 2 exch put /ATrim exch def /femWARNING true def}if %% si te la Xur + gran la igualem a la del CropBox
  ATrim 3 get ACrop 3 get gt {ATrim 4 array copy dup ACrop 3 get 3 exch put /ATrim exch def /femWARNING true def}if %% si te la Yur + gran la igualem a la del CropBox
  femWARNING
  {
  %% escrivim el WARNING
  wFitxerXRay dup dup (\015\012PDF:page) writestring araPlana 12 string cvs writestring (:WARNING:TrimBox overflows CropBox!) writestring
  }if
  }
  { %% NO hi ha MediaBox!
  QueLiFemFer 2 eq %:02 MARQUES DE TALL
  {
  [ %% executem un procediment o altre en funcio de l'area de creus de tall triada
  { %% xMediaBox
  %% amb l'opcio 2, ho fem diferent que l'Acrobat: ara al MediaBox li donem el valor del TrimBox (Acrobat hi posaria el format d pagina x defecte) ...
  %% normalitzem ...
  {dup 0 lt{pop 0}if}forall %% ... si hi ha cap valor menor de zero, el deixem a zero ...
  %% ... llavors restant Xur-Xll i Yur-Yll, en quedaran els valors absoluts que seran els nous Xur i Yur ...
  3 -1 roll sub abs dup 0 eq {pop 3}if %% ... tret que siguin zero, on llavors hi deixariem el valor minim admes de format de pagina de PDF (3x3 pt)
  exch 3 -1 roll sub abs dup 0 eq {pop 3}if exch
  0 3 1 roll 0 4 1 roll %% ... doncs Xll i Yll quedaran a zero
  %% Ampliem el MediaBox+TrimBox de llUm punts x banda (20 de marge + 30 x la meitat de les creus), total llUmx2 punts d'X i llUmx2 punts d'Y
  3 -1 roll sub llUm 2 mul add /YMedia exch def exch sub llUm 2 mul add /XMedia exch def %% desem els valors Xur Yur del MediaBox que regenerem
  YMedia llUm sub /Ytrim exch def XMedia llUm sub /Xtrim exch def %% desem els valors Xur Yur del nou TrimBox
  /trasllX llUm def /trasllY llUm def %% valors del trasllat de l'eix de coordenades per resituar el contingut de pagina i per Xll i Yll del nou TrimBox
  %% generem el nou TrimBox per visualitzar millor la feina
  count 1 sub index %% ens assegurem que copiem el dic que hi ha a la base de la pila (doncs segur q es el /Page)
  /TrimBox [trasllX trasllY Xtrim Ytrim] put %% el desem a /Page
  [trasllX trasllY Xtrim Ytrim] dup /ATrim exch def %% desem l'array normalitzada
  XRay /PeDeEfa get araPlana 12 string cvs get dup/MediaBox [0 0 XMedia YMedia] put %% desem al dic numerat de la pagina el nou MediaBox
  /TrimBox ATrim put %% desem al dic numerat de la pagina el nou TrimBox
  %% escrivim el WARNING
  wFitxerXRay dup dup (\015\012PDF:page) writestring araPlana 12 string cvs writestring (:WARNING:MediaBox is now created by Old TrimBox \(only with CaLi2CoPi option 2\)!) writestring
  /femWARNING true def
  }
  { %% xCropBox
  }
  { %% xTrimBox
  %% si no hi ha MediaBox pleguem de la feina donant un missatge ...
  %% fitxer TXT de control del resultat pel web+PHP
  (mancabox.txt) %% si HI HA aquest arxiu donarem un error de manca d'area solˇlicitada a CaLi2CoPi
  dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU (w) file dup 32 write closefile
  (\n\nMRCT26 MANCA MediaBox: i no posarem les Creus de Tall ... pleguem!\n\n) print flush stop %%quit
  }
  ]
  xQuinaArea get cvx exec
  }if %/02 MARQUES DE TALL
  }ifelse
  wFitxerXRay dup dup (\015\012PDF:page) writestring araPlana 12 string cvs writestring (:TrimBox:) writestring
  %% escriu la part sencera mes el punt mes la part decimal (fins al quart) manualment
  { %% forall
  10000 mul cvi 20 string cvs dup
  length 4 sub dup 0 le
  {
  pop (000000) /EmesD exch def
  EmesD /NullEncode filter /XiFRa exch def
  XiFRa (0.) writestring XiFRa exch writestring
  XiFRa closefile
  }
  {
  /pD exch def dup 0 pD getinterval
  dup length 3 -1 roll pD 4 getinterval dup length 3 -1 roll add 1 add string
  /EmesD exch def EmesD /NullEncode filter /XiFRa exch def
  exch XiFRa exch writestring XiFRa 46 write XiFRa exch writestring
  XiFRa closefile
  }ifelse
  EmesD wFitxerXRay exch writestring wFitxerXRay 32 write
  } forall
  QueLiFemFer 2 eq %:02 MARQUES DE TALL
  { %% de moment no fem res ...
  } %/02 MARQUES DE TALL
  {
  XRay /PeDeEfa get araPlana 12 string cvs get /TrimBox ATrim put %% ens assegurem de desar al dic numerat de la pagina
  }ifelse
  }
  {
  QueLiFemFer 2 eq xQuinaArea 2 eq and %% els dos han de ser vertaders per que si no hi ha TrimBox pleguem i no fem res ...
  {
  %% fitxer TXT de control del resultat pel web+PHP
  (mancabox.txt) %% si HI HA aquest arxiu donarem un error de manca d'area solˇlicitada a CaLi2CoPi
  dup length faPath add string dup /pAthXiU exch def
  0 tEmp putinterval pAthXiU exch faPath exch putinterval %% incrustem la cadena al path
  pAthXiU (w) file dup 32 write closefile
  (\n\nMRCT26 MANCA TrimBox: i no hi puc posar les Creus de Tall ... pleguem!\n\n) print flush stop %%quit
  }if
  }ifelse
  dup /BleedBox known
  {
  dup /BleedBox get
  QueLiFemFer 2 eq %:02 MARQUES DE TALL
  { %% tant si la pagina creix o s'arronsa, ajustem el BleedBox sumant sempre llUm als 4 valors dels seus arrays
  {llUm add}forall
  4 array astore
  dup 2 index exch /BleedBox exch put
  }if %/02 MARQUES DE TALL
  dup /ABleed exch def %% en desem una copia
  wFitxerXRay dup dup (\015\012PDF:page) writestring araPlana 12 string cvs writestring (:BleedBox:) writestring
  %% escriu la part sencera mes el punt mes la part decimal (fins al quart) manualment
  { %% forall
  10000 mul cvi 20 string cvs dup
  length 4 sub dup 0 le
  {
  pop (000000) /EmesD exch def
  EmesD /NullEncode filter /XiFRa exch def
  XiFRa (0.) writestring XiFRa exch writestring
  XiFRa closefile
  }
  {
  /pD exch def dup 0 pD getinterval
  dup length 3 -1 roll pD 4 getinterval dup length 3 -1 roll add 1 add string
  /EmesD exch def EmesD /NullEncode filter /XiFRa exch def
  exch XiFRa exch writestring XiFRa 46 write XiFRa exch writestring
  XiFRa closefile
  }ifelse
  EmesD wFitxerXRay exch writestring wFitxerXRay 32 write
  } forall
  }if
  dup /ArtBox known
  {
  dup /ArtBox get
  QueLiFemFer 2 eq %:02 MARQUES DE TALL
  { %% tant si la pagina creix o s'arronsa, ajustem l'ArtBox sumant sempre llUm als 4 valors dels seus arrays
  {llUm add}forall
  4 array astore
  dup 2 index exch /ArtBox exch put
  }if %/02 MARQUES DE TALL
  dup /AArt exch def %% en desem una copia
  wFitxerXRay dup dup (\015\012PDF:page) writestring araPlana 12 string cvs writestring (:ArtBox:) writestring
  %% escriu la part sencera mes el punt mes la part decimal (fins al quart) manualment
  { %% forall
  10000 mul cvi 20 string cvs dup
  length 4 sub dup 0 le
  {
  pop (000000) /EmesD exch def
  EmesD /NullEncode filter /XiFRa exch def
  XiFRa (0.) writestring XiFRa exch writestring
  XiFRa closefile
  }
  {
  /pD exch def dup 0 pD getinterval
  dup length 3 -1 roll pD 4 getinterval dup length 3 -1 roll add 1 add string
  /EmesD exch def EmesD /NullEncode filter /XiFRa exch def
  exch XiFRa exch writestring XiFRa 46 write XiFRa exch writestring
  XiFRa closefile
  }ifelse
  EmesD wFitxerXRay exch writestring wFitxerXRay 32 write
  } forall
  }if
  %% malgrat haver explorat totes les arees, si no hi ha ni Media, ni Crop, ni Trim ...
  XRay /PeDeEfa get araPlana 12 string cvs get length 0 eq
  { %% generem un MediaBox amb la paginaXdefecte
  %% Ampliem el MediaBox de la paginaXdefecte de 50 punts x banda (20 de marge + 30 x la meitat de les creus), total 100x100 punts
  QueLiFemFer 2 eq %:02 MARQUES DE TALL
  {
  paginaXdefecte {llUm add}forall 4 array astore /ATrim exch def
  paginaXdefecte aload pop llUm 2 mul add exch llUm 2 mul add exch 4 array astore /AMedia exch def
  }if %/02 MARQUES DE TALL
  XRay /PeDeEfa get araPlana 12 string cvs get dup /MediaBox AMedia put /TrimBox ATrim put %% desem al dic numerat de la pagina
  %% escrivim el WARNING
  wFitxerXRay dup dup (\015\012PDF:page) writestring araPlana 12 string cvs writestring (:WARNING:MediaBox is now created by page default!) writestring
  dup /MediaBox AMedia put %% restablim el MediaBox a l'objecte /Page
  /TrimBox ATrim put %% restablim el TrimBox a l'objecte /Page
  }
  {
  pop
  }ifelse
  araPlana 1 add dup maxPlana gt {pop exit}{/araPlana exch def}ifelse
 } loop %% fi del loop explorador d'arees pagina a pagina
  
 %%% a3copiseny ... DESACTIVEM XRAY
 %%}if
  
 QueLiFemFer 7 eq %:07 REINSEREIX IMATGES JPEG
 {
  %#%19bis4% mirem si hi ha jpegs al directori d'exportaciķ, els validem i n'emmagatzemem els path i les dades que necessitem
  %# cadascun dins un paquet docJpeg on desem pāgina a pāgina en arrays d'imatges, on l'índex ens descriu l'ordre d'exportaciķ
  (%#%19bis4%)==
  XRay /PeDeEfa get %% el desem en aquest dic per que aixi el podrem actualitzar sense problemes dins l'execucio dels Contents
  /imatgesXordre
  [ %% si volem permetre q es puguin reinserir nomes determinades imatges exportades ...
  null %% index 0, sempre sera null x tal que quadri el num de plana amb l'index
  maxPlana {null}repeat %% ... necessitem generar aquest array amb el nombre de nulls exacte q determini el nombre de pagines del document
  ] put %% en aquest paquet hi haura una array per cada plana amb els noms de les imatges ordenats tal com venen dins l'stream de Contents
  /docJpeg
  [ %% si volem permetre q es puguin reinserir nomes determinades imatges exportades ...
  null %% index 0, sempre sera null x tal que quadri el num de plana amb l'index
  maxPlana {null}repeat %% ... necessitem generar aquest array amb el nombre de nulls exacte q determini el nombre de pagines del document
  ] def %% en aquest paquet hi haura una array per cada plana que tingui imatges exportades i si no hi haura un null
  imatgesXreinserir dup dup length 1 sub get 47 eq %% duu la barra al final?
  { %% hi afegim l'asterisc
  dup length dup 1 add string dup 4 -1 roll 0 exch putinterval dup 3 -1 roll (*) putinterval
  }
  { %% hi afegim la barra i l'asterisc
  dup length dup 2 add string dup 4 -1 roll 0 exch putinterval dup 3 -1 roll (/*) putinterval
  }ifelse
  dup /niuJpeg exch def %% desem el path generic
  /niuBuit true def %% gatell x saber si el directori existeix o es buit
  { %% filelor explorem tot el directori on hi ha d'haver els jpegs a refarcir
  %% metode per esbrinar el num de pagina i el num d'imatge: for endarrera i search endavant
  null /tercer_ exch def %% gatell x saber si hem localitzat el tercer _
  0 /i95 exch def %% comptador de guions baixos
  dup length /faS exch def dup /potserJpeg exch def
  faS 1 sub -1 0
  { %% for enrera fins el tercer _ (95) per esbrinar-ne el seu index
  2 copy get 95 eq
  {
  i95 1 add /i95 exch def
  }if
  i95 3 eq {/tercer_ exch def exit}{pop}ifelse %% index on hem de parar el for
  }for
  tercer_ null eq
  
  { %% no s'adiu al format de nom d'imatge exportat per Acrobat
  == ( <<< NO s'adiu al format de nom d'imatge exportat per Acrobat!) ==
  %% /niuBuit true def % gatell x saber si el directori existeix o es buit
  }
  {
  /niuBuit false def %% gatell x saber si el directori existeix o es buit
  %% i llavors llegir la cadena extreta cap endavant amb search ...
  tercer_ 1 add faS tercer_ sub 1 sub getinterval
  %% Pesquem El Num De Pagina On Reincrustar Les imatges
  (_) search pop /PENDPORLi exch def pop
  %% Pesquem El Sequencial De La imatge
  (_) search pop pop pop
  (.) search
  {
  /PESDLi exch def pop pop
  { %% stopped on ens assegurem que el num de pagina i el num d'imatge siguin numerics (hi ha fatals coincidencies!)
  mark
  PENDPORLi cvx exec PESDLi cvx exec add
  }stopped
  {
  cleartomark
  potserJpeg == ( <<< NO s'adiu al format de nom d'imatge exportat per Acrobat!) ==
  }
  {
  /elJPEGteproblemes false def %% gatell x filtrar JPEG que no s'adiuen
  %% analitzem el jpeg per extreure'n les dades necessaries
  potserJpeg
  %%% lector de jpeg
  { %%d'stopped
  %% captura de dades del JPEG i comprovacio de si existeix ...
  dup status
  {
  pop pop
  %% el fitxer fa ...
  /FiFtxr exch def pop
  dup /elD'ara exch def %% path+Nom del fitxer que processem
  (r) file /tesela exch def %% fitxer de lectura
  %% mirem el cap i els peus (marcadors d'inici i final) del fitxer aviam si son normatius ...
  tesela FiFtxr 2 sub setfileposition
  tesela 2 string readstring pop <FFD9> eq
  {
  %%(PEUS OK) ==
  tesela dup 0 setfileposition
  2 string readstring pop <FFD8> eq
  {
  %%(CAP OK) ==
  /SoRTiM false def %% pestell de sortida
  %% explorem el fitxer per localitzar els marcadors significatius que duen les dades d'imatge (qualsevol d'ells es valid)
  { %% loop
  tesela 2 string readstring %% llegim el segment
  {
  /SeGMeNT exch def
  0 1 6
  { %% for
  [<FFC0> <FFC1> <FFC2> <FFC3> <FFC5> <FFC6> <FFC7>] %% marcadors significatius
  exch get SeGMeNT eq
  {
  %%(JA EL TINC !!!) ==
  tesela 10 string readstring pop
  %% captura del valor de files (y)
  dup dup 3 get 256 mul exch 4 get add (\n >>>> Files (Y) ... ) print flush dup ==
  /_B exch def %% (Y) FILES D'IMATGE
  %% captura del valor de columnes (x)
  dup dup 5 get 256 mul exch 6 get add ( >>>> Columnes (X) ... ) print flush dup ==
  /_A exch def %% (X) COLUMNES D'IMATGE
  %% captura dels components de color (1, 3 o 4 canals)
  dup dup 7 get ( >>>> Components de Color ... ) print flush dup ==
  /CNL exch def
  %% bits per component de color (o per pixel)
  dup dup 2 get ( >>>> Bits x Comp ... ) print flush dup == elD'ara print flush (\n) print flush
  /bXp exch def
  /SoRTiM true def
  }if
  } for
  SoRTiM not
  {
  tesela 2 string readstring
  { %% llegim la llargada del segment per saltar al seguent ...
  dup 0 get 256 mul exch 1 get add
  2 sub string tesela exch readstring {pop}{pop tesela closefile exit}ifelse
  }
  {
  pop tesela closefile exit
  }ifelse
  }if
  }
  {
  pop tesela closefile exit
  }ifelse
  SoRTiM {tesela closefile exit} if
  } loop
  SoRTiM not
  {
  (\n\n <<<< NO podem llegir correctament les dades d'aquest JPEG\n\n) print flush
  /elJPEGteproblemes true def %% n'hi ha
  } if
  %% construim la imatge
  { %% stopped
  [ %% fem petar l'algorisme si l'espai de color no es de 3 canals (RGB)
  (zero) %%0
  %% 1 canal (ploma, escala de grisos)
  (zero) %%{/DCD [0 1] def /SCE {/DeviceGray setcolorspace} def}
  (zero) %%0
  %% 3 canals (RGB)
  {/DCD [0 1 0 1 0 1] def /SCE {/DeviceRGB setcolorspace} def}
  %% 4 canals (CMYK)
  (zero) %%{/DCD [1 0 1 0 1 0 1 0] def /SCE {/DeviceCMYK setcolorspace} def}
  ]
  CNL get exec
  } stopped
  { %% canals incorrectes
  (\n\n <<<< Canals Incorrectes ... \n\n) print flush
  /elJPEGteproblemes true def %% n'hi ha
  }if
  %% escala 1 = 100% = 72 dpi
  1 /Scl exch def
  [ _A Scl mul _B Scl mul ] /frmtPGN exch def
  { %% stopped
  <</PageSize frmtPGN>> setpagedevice
  SCE %% cridem l'espai de color
  gsave
  0 0 translate
  _A Scl mul _B Scl mul scale
  <<
  /ImageType 1
  /Width _A
  /Height _B
  /BitsPerComponent bXp
  /Decode DCD
  /ImageMatrix [_A 0 0 _B neg 0 _B]
  /DataSource elD'ara (r) file <</ColorTransform 1>> /DCTDecode filter
  >> image grestore
  } stopped
  {
  %%elD'ara print flush ( JPEG incompatible amb el filtre DCTDecode de PostScript ... \n\n) print flush
  /elJPEGteproblemes true def %% n'hi ha
  }
  {
  showpage
  } ifelse
  }
  {
  %%(CAP KAPPUT)==
  /elJPEGteproblemes true def %% n'hi ha
  }ifelse
  }
  { %% desactivem x TEST
  %%(PEUS KAPPUT)==
  /elJPEGteproblemes true def %% n'hi ha
  }ifelse
  }
  {
  %%(NO HI ES ...) == tesela closefile quit
  /elJPEGteproblemes true def %% n'hi ha
  }ifelse
  }stopped
  {
  %%clear ( ... PETADA !!\n\n) print flush
  /elJPEGteproblemes true def %% n'hi ha
  }if
  %%% fi del lector de jpeg
  elJPEGteproblemes
  { %% algun dels gatells clau peta
  cleartomark
  (\n\n)print flush potserJpeg print flush (\n <<< JPEG erroni o malmes ...\n ... CaLi2CoPi no continuara fins que no el torneu a desar correctament!\n\n)print flush stop %%quit
  }
  { %% tot correcte
  cleartomark
  %% aqui hem d'ampliar l'array del document pel num de pagina q toqui (si es q no existeix)
  %% farem coincidir el num de pagina i el num d'imatge amb l'index
  %% llavors el length sempre ha de ser PENDPORLi + 1
  PENDPORLi cvx exec 1 add docJpeg length gt %% amb el length sabem si el num d pagina existeix o no
  { %% no existeix el num de pagina i per aixo hem d'ampliar l'array del document fins on demani
  PENDPORLi cvx exec 1 add docJpeg length sub docJpeg length add array dup docJpeg 0 exch putinterval /docJpeg exch def
  docJpeg PENDPORLi cvx exec PESDLi cvx exec 1 add array dup PESDLi cvx exec
  <<
  /Width _A
  /Height _B
  /xiu potserJpeg dup length string copy %% per profilaxi
  >> put %% afegim el dic de la imatge al seu lloc de l'array de pagina
  put %% i ara la nova array de pagina al paquet general del document
 %%docJpeg (+++++1+++++)pstack quit
  }
  { %% podria existir o no
  docJpeg PENDPORLi cvx exec get null eq
  { %% no existeix l'array de pagina
  docJpeg PENDPORLi cvx exec PESDLi cvx exec 1 add array dup PESDLi cvx exec
  <<
  /Width _A
  /Height _B
  /xiu potserJpeg dup length string copy %% per profilaxi
  >> put %% afegim el dic de la imatge al seu lloc de l'array de pagina
  put %% i ara la nova array de pagina al paquet general del document
 %%docJpeg(+++++2+++++)pstack quit
  }
  { %% ja existeix l'array de pagina ...
  %% llavors capturem el paquet de pagina ...
  docJpeg PENDPORLi cvx exec get
  %% ... i posem el dic de la imatge al seu lloc
  dup length PESDLi cvx exec 1 add exch gt
  { %% hem d'ampliar el paquet de pagina
  PESDLi cvx exec 1 add 1 index length sub 1 index length add array dup 3 -1 roll 0 exch putinterval
  }if
  dup PESDLi cvx exec
  <<
  /Width _A
  /Height _B
  /xiu potserJpeg dup length string copy %% per profilaxi
  >> put %% afegim el dic de la imatge al seu lloc de l'array de pagina
  docJpeg exch PENDPORLi cvx exec exch put %% i ara l'array de pagina reformada al paquet general del document
 %%docJpeg(+++++3+++++)pstack quit
  }ifelse
  }ifelse
  }ifelse
  }ifelse
  }
  {
  pop
  potserJpeg == ( <<< NO s'adiu al format de nom d'imatge exportat per Acrobat!) ==
  }ifelse
  }ifelse
  }256 string filenameforall
  niuBuit
  {
  (\n) print flush niuJpeg print flush
  ( <<< directori BUIT o INEXISTENT ... PLEGUEM!\n\n)print flush stop
  }if
 }if %/07 REINSEREIX IMATGES JPEG
  
 QueLiFemFer 9 eq %:09 EXTRAU IMATGES JPEG
 {
  %#%19bis5% preparem XRay per acollir l'exportaciķ d'imatges
  (%#%19bis5%)==
  XRay /PeDeEfa get %% el desem en aquest dic per que aixi el podrem actualitzar sense problemes dins l'execucio dels Contents
  /imatgesXordre
  [ %% si volem permetre q es puguin reinserir nomes determinades imatges exportades ...
  null %% index 0, sempre sera null x tal que quadri el num de plana amb l'index
  maxPlana {null}repeat %% ... necessitem generar aquest array amb el nombre de nulls exacte q determini el nombre de pagines del document
  ] put %% en aquest paquet hi haura una array per cada plana amb els noms de les imatges ordenats tal com venen dins l'stream de Contents
 }if %/09 EXTRAU IMATGES JPEG
  
 %#%20% definim el fitxer on reescriurem els Contents x 1er cop
 (%#%20%)==
 l'objectenet (w) file %% repicats a traves de les redefinicions d'OpContents_QueLiFemFer#
 /sEdAs exch def
  
 %%% definim xifrats (encoding) diversos a utilitzar
 /StandardEncoding ISOLatin1Encoding
 %% StandardEncoding % no ens cal marejar la perdiu?
  256 array copy def
 /WinAnsiEncoding %% encoding d'escriptura de l'XRay i afegits als noms de fitxers
 [/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /bullet /Euro /bullet /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft /OE /bullet /Zcaron /bullet /bullet /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash /tilde /trademark /scaron /guilsinglright /oe /bullet /zcaron /Ydieresis /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis]
 def
 /WinAnsiEncoding2Bytes %% hem convertit la taula WinAnsiEncoding a 2ByteHexa/NomDelCaracter (veure UnicodeadobeglyphlistXwinAnsi.ps)
 <<(0020) /space (0021) /exclam (0022) /quotedbl (0023) /numbersign (0024) /dollar (0025) /percent (0026) /ampersand (0027) /quotesingle (0028) /parenleft (0029) /parenright (002a) /asterisk (002b) /plus (002c) /comma (2212) /hyphen (002e) /period (002f) /slash (0030) /zero (0031) /one (0032) /two (0033) /three (0034) /four (0035) /five (0036) /six (0037) /seven (0038) /eight (0039) /nine (003a) /colon (003b) /semicolon (003c) /less (003d) /equal (003e) /greater (003f) /question (0040) /at (0041) /A (0042) /B (0043) /C (0044) /D (0045) /E (0046) /F (0047) /G (0048) /H (0049) /I (004a) /J (004b) /K (004c) /L (004d) /M (004e) /N (004f) /O (0050) /P (0051) /Q (0052) /R (0053) /S (0054) /T (0055) /U (0056) /V (0057) /W (0058) /X (0059) /Y (005a) /Z (005b) /bracketleft (005c) /backslash (005d) /bracketright (005e) /asciicircum (005f) /underscore (0060) /grave (0061) /a (0062) /b (0063) /c (0064) /d (0065) /e (0066) /f (0067) /g (0068) /h (0069) /i (006a) /j (006b) /k (006c) /l (006d) /m (006e) /n (006f) /o (0070) /p (0071) /q (0072) /r (0073) /s (0074) /t (0075) /u (0076) /v (0077) /w (0078) /x (0079) /y (007a) /z (007b) /braceleft (007c) /bar (007d) /braceright (007e) /asciitilde (2022) /bullet (20ac) /Euro (2022) /bullet (201a) /quotesinglbase (0192) /florin (201e) /quotedblbase (2026) /ellipsis (2020) /dagger (2021) /daggerdbl (02c6) /circumflex (2030) /perthousand (0160) /Scaron (2039) /guilsinglleft (0152) /OE (2022) /bullet (017d) /Zcaron (2022) /bullet (2022) /bullet (2018) /quoteleft (2019) /quoteright (201c) /quotedblleft (201d) /quotedblright (2022) /bullet (2013) /endash (2014) /emdash (2122) /trademark (0161) /scaron (203a) /guilsinglright (0153) /oe (2022) /bullet (017e) /zcaron (0178) /Ydieresis (0020) /space (00a1) /exclamdown (00a2) /cent (00a3) /sterling (00a4) /currency (00a5) /yen (00a6) /brokenbar (00a7) /section (00a8) /dieresis (00a9) /copyright (00aa) /ordfeminine (00ab) /guillemotleft (00ac) /logicalnot (002d) /hyphen (00ae) /registered (00af) /macron (00b0) /degree (00b1) /plusminus (00b2) /twosuperior (00b3) /threesuperior (00b4) /acute (00b5) /mu (00b6) /paragraph (00b8) /cedilla (00b9) /onesuperior (00ba) /ordmasculine (00bb) /guillemotright (00bc) /onequarter (00bd) /onehalf (00be) /threequarters (00bf) /questiondown (00c0) /Agrave (00c1) /Aacute (00c2) /Acircumflex (00c3) /Atilde (00c4) /Adieresis (00c5) /Aring (00c6) /AE (00c7) /Ccedilla (00c8) /Egrave (00c9) /Eacute (00ca) /Ecircumflex (00cb) /Edieresis (00cc) /Igrave (00cd) /Iacute (00ce) /Icircumflex (00cf) /Idieresis (00d0) /Eth (00d1) /Ntilde (00d2) /Ograve (00d3) /Oacute (00d4) /Ocircumflex (00d5) /Otilde (00d6) /Odieresis (00d7) /multiply (00d8) /Oslash (00d9) /Ugrave (00da) /Uacute (00db) /Ucircumflex (00dc) /Udieresis (00dd) /Yacute (00de) /Thorn (00df) /germandbls (00e0) /agrave (00e1) /aacute (00e2) /acircumflex (00e3) /atilde (00e4) /adieresis (00e5) /aring (00e6) /ae (00e7) /ccedilla (00e8) /egrave (00e9) /eacute (00ea) /ecircumflex (00eb) /edieresis (00ec) /igrave (00ed) /iacute (00ee) /icircumflex (00ef) /idieresis (00f0) /eth (00f1) /ntilde (00f2) /ograve (00f3) /oacute (00f4) /ocircumflex (00f5) /otilde (00f6) /odieresis (00f7) /divide (00f8) /oslash (00f9) /ugrave (00fa) /uacute (00fb) /ucircumflex (00fc) /udieresis (00fd) /yacute (00fe) /thorn (00ff) /ydieresis>>
 def
 /WinAnsiEncoding2Identity-H
 %% aquest xifrat (q no s'ha d'on ha sortit) es incorrecte
 %%[/.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /bullet /Euro /bullet /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft /OE /bullet /Zcaron /bullet /bullet /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash /trademark /scaron /guilsinglright /oe /bullet /zcaron /Ydieresis /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis]
 %% aquest altre xifrat l'hem deduit amb ... l'algorisme empaquetemIdentity_H.ps
 %% llegint directament i dexifrant el recurs CMap Identity-H
 [/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /bullet /Euro /bullet /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft /OE /bullet /Zcaron /bullet /bullet /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash /tilde /trademark /scaron /guilsinglright /oe /bullet /zcaron /Ydieresis /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis]
 def
 /PDFDocEncoding %% encoding de lectura de les cadenes de text (de fet tots els strings no streams de PDF) pero ara l'utilitzem pel Nom de les Layers
 [/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /bullet /dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction /guilsinglleft /guilsinglright /minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft /quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron /Ydieresis /Zcaron /dotlessi /lslash /oe /scaron /zcaron /.notdef /Euro /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /.notdef /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis]
 def
 %% els PDF Predefined Font Encodings hi son tots?
 /MacRomanEncoding
 [/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /degree /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /plusminus /.notdef /.notdef /yen /mu /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /space /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /divide /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron]
 def
 /MacExpertEncoding
 [/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclamsmall /Hungarumlautsmall /centoldstyle /dollaroldstyle /dollarsuperior /ampersandsmall /Acutesmall /parenleftsuperior /parenrightsuperior /twodotenleader /onedotenleader /comma /hyphen /period /fraction /zerooldstyle /oneoldstyle /twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle /sixoldstyle /sevenoldstyle /eightoldstyle /nineoldstyle /colon /semicolon /.notdef /threequartersemdash /.notdef /questionsmall /.notdef /.notdef /.notdef /.notdef /Ethsmall /.notdef /.notdef /onequarter /onehalf /threequarters /oneeighth /threeeighths /fiveeighths /seveneighths /onethird /twothirds /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ff /fi /fl /ffi /ffl /parenleftinferior /.notdef /parenrightinferior /Circumflexsmall /hypheninferior /Gravesmall /Asmall /Bsmall /Csmall /Dsmall /Esmall /Fsmall /Gsmall /Hsmall /Ismall /Jsmall /Ksmall /Lsmall /Msmall /Nsmall /Osmall /Psmall /Qsmall /Rsmall /Ssmall /Tsmall /Usmall /Vsmall /Wsmall /Xsmall /Ysmall /Zsmall /colonmonetary /onefitted /rupiah /Tildesmall /.notdef /.notdef /asuperior /centsuperior /.notdef /.notdef /.notdef /.notdef /Aacutesmall /Agravesmall /Acircumflexsmall /Adieresissmall /Atildesmall /Aringsmall /Ccedillasmall /Eacutesmall /Egravesmall /Ecircumflexsmall /Edieresissmall /Iacutesmall /Igravesmall /Icircumflexsmall /Idieresissmall /Ntildesmall /Oacutesmall /Ogravesmall /Ocircumflexsmall /Odieresissmall /Otildesmall /Uacutesmall /Ugravesmall /Ucircumflexsmall /Udieresissmall /.notdef /eightsuperior /fourinferior /threeinferior /sixinferior /eightinferior /seveninferior /Scaronsmall /.notdef /centinferior /twoinferior /.notdef /Dieresissmall /.notdef /Caronsmall /osuperior /fiveinferior /.notdef /commainferior /periodinferior /Yacutesmall /.notdef /dollarinferior /.notdef /.notdef /Thornsmall /.notdef /nineinferior /zeroinferior /Zcaronsmall /AEsmall /Oslashsmall /questiondownsmall /oneinferior /Lslashsmall /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /Cedillasmall /.notdef /.notdef /.notdef /.notdef /.notdef /OEsmall /figuredash /hyphensuperior /.notdef /.notdef /.notdef /.notdef /exclamdownsmall /.notdef /Ydieresissmall /.notdef /onesuperior /twosuperior /threesuperior /foursuperior /fivesuperior /sixsuperior /sevensuperior /ninesuperior /zerosuperior /.notdef /esuperior /rsuperior /tsuperior /.notdef /.notdef /isuperior /ssuperior /dsuperior /.notdef /.notdef /.notdef /.notdef /.notdef /lsuperior /Ogoneksmall /Brevesmall /Macronsmall /bsuperior /nsuperior /msuperior /commasuperior /periodsuperior /Dotaccentsmall /Ringsmall /.notdef /.notdef /.notdef /.notdef]
 def
 /GIDEncoding
 [ /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /exclamdown /cent /sterling /fraction /yen /florin /section /currency /quotesingle /quotedblleft /guillemotleft /guilsinglleft /guilsinglright /fi /fl /endash /dagger /daggerdbl /periodcentered /paragraph /bullet /quotesinglbase /quotedblbase /quotedblright /guillemotright /ellipsis /perthousand /questiondown /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /ring /cedilla /hungarumlaut /ogonek /caron /emdash /AE /ordfeminine /Lslash /Oslash /OE /ordmasculine /ae /dotlessi /lslash /oslash /oe /germandbls /onesuperior /logicalnot /mu /trademark /Eth /onehalf /plusminus /Thorn /onequarter /divide /brokenbar /degree /thorn /threequarters /twosuperior /registered /minus /eth /multiply /threesuperior /copyright /Aacute /Acircumflex /Adieresis /Agrave /Aring /Atilde /Ccedilla /Eacute /Ecircumflex /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Ntilde /Oacute /Ocircumflex /Odieresis /Ograve /Otilde /Scaron /Uacute /Ucircumflex /Udieresis /Ugrave /Yacute /Ydieresis /Zcaron /aacute /acircumflex /adieresis /agrave /aring /atilde /ccedilla /eacute /ecircumflex /edieresis /egrave /iacute /icircumflex /idieresis /igrave /ntilde /oacute /ocircumflex /odieresis /ograve /otilde /scaron /uacute /ucircumflex /udieresis /ugrave /yacute /ydieresis /zcaron /exclamsmall /Hungarumlautsmall /dollaroldstyle /dollarsuperior /ampersandsmall /Acutesmall /parenleftsuperior /parenrightsuperior /twodotenleader /onedotenleader /zerooldstyle /oneoldstyle /twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle /sixoldstyle /sevenoldstyle /eightoldstyle /nineoldstyle /commasuperior /threequartersemdash /periodsuperior /questionsmall /asuperior /bsuperior /centsuperior /dsuperior /esuperior /isuperior /lsuperior /msuperior /nsuperior /osuperior /rsuperior /ssuperior /tsuperior /ff /ffi /ffl /parenleftinferior /parenrightinferior /Circumflexsmall /hyphensuperior /Gravesmall /Asmall /Bsmall /Csmall /Dsmall /Esmall /Fsmall /Gsmall /Hsmall /Ismall /Jsmall /Ksmall /Lsmall /Msmall /Nsmall /Osmall /Psmall /Qsmall /Rsmall /Ssmall /Tsmall /Usmall /Vsmall /Wsmall /Xsmall /Ysmall /Zsmall /colonmonetary /onefitted /rupiah /Tildesmall /exclamdownsmall /centoldstyle /Lslashsmall /Scaronsmall /Zcaronsmall /Dieresissmall /Brevesmall /Caronsmall /Dotaccentsmall /Macronsmall /figuredash /hypheninferior /Ogoneksmall /Ringsmall /Cedillasmall /questiondownsmall /oneeighth /threeeighths /fiveeighths /seveneighths /onethird /twothirds /zerosuperior /foursuperior /fivesuperior /sixsuperior /sevensuperior /eightsuperior /ninesuperior /zeroinferior /oneinferior /twoinferior /threeinferior /fourinferior /fiveinferior /sixinferior /seveninferior /eightinferior /nineinferior /centinferior /dollarinferior /periodinferior /commainferior /Agravesmall /Aacutesmall /Acircumflexsmall /Atildesmall /Adieresissmall /Aringsmall /AEsmall /Ccedillasmall /Egravesmall /Eacutesmall /Ecircumflexsmall /Edieresissmall /Igravesmall /Iacutesmall /Icircumflexsmall /Idieresissmall /Ethsmall /Ntildesmall /Ogravesmall /Oacutesmall /Ocircumflexsmall /Otildesmall /Odieresissmall /OEsmall /Oslashsmall /Ugravesmall /Uacutesmall /Ucircumflexsmall /Udieresissmall /Yacutesmall /Thornsmall /Ydieresissmall /001.000 /001.001 /001.002 /001.003 /Black /Bold /Book /Light /Medium /Regular /Roman /Semibold ]
 def
 %% encoding de tipus privat que es pot personalitzar segons necessitats
 %% el vam canviar a WinAnsi per contemplar el cas del fitxer d'AD 02001004.pdf
 /SMBLCEncoding
 [ /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /exclamdown /cent /sterling /fraction /yen /florin /section /currency /quotesingle /quotedblleft /guillemotleft /guilsinglleft /guilsinglright /fi /fl /endash /dagger /daggerdbl /periodcentered /paragraph /bullet /quotesinglbase /quotedblbase /quotedblright /guillemotright /ellipsis /perthousand /questiondown /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /ring /cedilla /hungarumlaut /ogonek /caron /emdash /AE /ordfeminine /Lslash /Oslash /OE /ordmasculine /ae /dotlessi /lslash /oslash /oe /germandbls /onesuperior /logicalnot /mu /trademark /Eth /onehalf /plusminus /Thorn /onequarter /divide /brokenbar /degree /thorn /threequarters /twosuperior /registered /minus /eth /multiply /threesuperior /copyright /Aacute /Acircumflex /Adieresis /Agrave /Aring /Atilde /Ccedilla /Eacute /Ecircumflex /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Ntilde /Oacute /Ocircumflex /Odieresis /Ograve /Otilde /Scaron /Uacute /Ucircumflex /Udieresis /Ugrave /Yacute /Ydieresis /Zcaron /aacute /acircumflex /adieresis /agrave /aring /atilde /ccedilla /eacute /ecircumflex /edieresis /egrave /iacute /icircumflex /idieresis /igrave /ntilde /oacute /ocircumflex /odieresis /ograve /otilde /scaron /uacute /ucircumflex /udieresis /ugrave /yacute /ydieresis /zcaron /exclamsmall /Hungarumlautsmall /dollaroldstyle /dollarsuperior /ampersandsmall /Acutesmall /parenleftsuperior /parenrightsuperior /twodotenleader /onedotenleader /zerooldstyle /oneoldstyle /twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle /sixoldstyle /sevenoldstyle /eightoldstyle /nineoldstyle /commasuperior /threequartersemdash /periodsuperior /questionsmall /asuperior /bsuperior /centsuperior /dsuperior /esuperior /isuperior /lsuperior /msuperior /nsuperior /osuperior /rsuperior /ssuperior /tsuperior /ff /ffi /ffl /parenleftinferior /parenrightinferior /Circumflexsmall /hyphensuperior /Gravesmall /Asmall /Bsmall /Csmall /Dsmall /Esmall /Fsmall /Gsmall /Hsmall /Ismall /Jsmall /Ksmall /Lsmall /Msmall /Nsmall /Osmall /Psmall /Qsmall /Rsmall /Ssmall /Tsmall /Usmall /Vsmall /Wsmall /Xsmall /Ysmall /Zsmall /colonmonetary /onefitted /rupiah /Tildesmall /exclamdownsmall /centoldstyle /Lslashsmall /Scaronsmall /Zcaronsmall /Dieresissmall /Brevesmall /Caronsmall /Dotaccentsmall /Macronsmall /figuredash /hypheninferior /Ogoneksmall /Ringsmall /Cedillasmall /questiondownsmall /oneeighth /threeeighths /fiveeighths /seveneighths /onethird /twothirds /zerosuperior /foursuperior /fivesuperior /sixsuperior /sevensuperior /eightsuperior /ninesuperior /zeroinferior /oneinferior /twoinferior /threeinferior /fourinferior /fiveinferior /sixinferior /seveninferior /eightinferior /nineinferior /centinferior /dollarinferior /periodinferior /commainferior /Agravesmall /Aacutesmall /Acircumflexsmall /Atildesmall /Adieresissmall /Aringsmall /AEsmall /Ccedillasmall /Egravesmall /Eacutesmall /Ecircumflexsmall /Edieresissmall /Igravesmall /Iacutesmall /Icircumflexsmall /Idieresissmall /Ethsmall /Ntildesmall /Ogravesmall /Oacutesmall /Ocircumflexsmall /Otildesmall /Odieresissmall /OEsmall /Oslashsmall /Ugravesmall /Uacutesmall /Ucircumflexsmall /Udieresissmall /Yacutesmall /Thornsmall /Ydieresissmall /001.000 /001.001 /001.002 /001.003 /Black /Bold /Book /Light /Medium /Regular /Roman /Semibold ]
 def
 %% EP! mancaria definir un encoding per la ZapfDingbats ??
 %% EP! si fes falta hi ha el dic /NomsAdobeGlyphList a ... FF_Coromines_ieDiBa_008.ps
 %% amb l'Adobe Glyph List sencera (nom literal/string unicode)
 %% i tambe dins el GS podem cridar-la amb ... systemdict /AdobeGlyphList get (nom literal/integer unicode)
 %% test x fi
 %%systemdict /AdobeGlyphList get
 %% /fi get rengsDtext (w) file dup 3 -1 roll write closefile quit
 %% /PDFDocEncoding2Bytes % hem convertit la taula PDFDocEncoding a 2ByteHexa/NomDelCaracter
 %%<<
 %%(0000) /.notdef (0001) /.notdef (0002) /.notdef (0003) /.notdef (0004) /.notdef (0005) /.notdef (0006) /.notdef (0007) /.notdef (0008) /.notdef (0009) /.notdef (000a) /.notdef (000b) /.notdef (000c) /.notdef (000d) /.notdef (000e) /.notdef (000f) /.notdef (0010) /.notdef (0011) /.notdef (0012) /.notdef (0013) /.notdef (0014) /.notdef (0015) /.notdef (0016) /.notdef (0017) /.notdef (0018) /breve (0019) /caron (001a) /circumflex (001b) /dotaccent (001c) /hungarumlaut (001d) /ogonek (001e) /ring (001f) /tilde (0020) /space (0021) /exclam (0022) /quotedbl (0023) /numbersign (0024) /dollar (0025) /percent (0026) /ampersand (0027) /quoteright (0028) /parenleft (0029) /parenright (002a) /asterisk (002b) /plus (002c) /comma (002d) /minus (002e) /period (002f) /slash (0030) /zero (0031) /one (0032) /two (0033) /three (0034) /four (0035) /five (0036) /six (0037) /seven (0038) /eight (0039) /nine (003a) /colon (003b) /semicolon (003c) /less (003d) /equal (003e) /greater (003f) /question (0040) /at (0041) /A (0042) /B (0043) /C (0044) /D (0045) /E (0046) /F (0047) /G (0048) /H (0049) /I (004a) /J (004b) /K (004c) /L (004d) /M (004e) /N (004f) /O (0050) /P (0051) /Q (0052) /R (0053) /S (0054) /T (0055) /U (0056) /V (0057) /W (0058) /X (0059) /Y (005a) /Z (005b) /bracketleft (005c) /backslash (005d) /bracketright (005e) /asciicircum (005f) /underscore (0060) /quoteleft (0061) /a (0062) /b (0063) /c (0064) /d (0065) /e (0066) /f (0067) /g (0068) /h (0069) /i (006a) /j (006b) /k (006c) /l (006d) /m (006e) /n (006f) /o (0070) /p (0071) /q (0072) /r (0073) /s (0074) /t (0075) /u (0076) /v (0077) /w (0078) /x (0079) /y (007a) /z (007b) /braceleft (007c) /bar (007d) /braceright (007e) /asciitilde (007f) /.notdef (0080) /bullet (0081) /dagger (0082) /daggerdbl (0083) /ellipsis (0084) /emdash (0085) /endash (0086) /florin (0087) /fraction (0088) /guilsinglleft (0089) /guilsinglright (008a) /minus (008b) /perthousand (008c) /quotedblbase (008d) /quotedblleft (008e) /quotedblright (008f) /quoteleft (0090) /quoteright (0091) /quotesinglbase (0092) /trademark (0093) /fi (0094) /fl (0095) /Lslash (0096) /OE (0097) /Scaron (0098) /Ydieresis (0099) /Zcaron (009a) /dotlessi (009b) /lslash (009c) /oe (009d) /scaron (009e) /zcaron (009f) /.notdef (00a0) /Euro (00a1) /exclamdown (00a2) /cent (00a3) /sterling (00a4) /currency (00a5) /yen (00a6) /brokenbar (00a7) /section (00a8) /dieresis (00a9) /copyright (00aa) /ordfeminine (00ab) /guillemotleft (00ac) /logicalnot (00ad) /.notdef (00ae) /registered (00af) /macron (00b0) /degree (00b1) /plusminus (00b2) /twosuperior (00b3) /threesuperior (00b4) /acute (00b5) /mu (00b6) /paragraph (00b7) /periodcentered (00b8) /cedilla (00b9) /onesuperior (00ba) /ordmasculine (00bb) /guillemotright (00bc) /onequarter (00bd) /onehalf (00be) /threequarters (00bf) /questiondown (00c0) /Agrave (00c1) /Aacute (00c2) /Acircumflex (00c3) /Atilde (00c4) /Adieresis (00c5) /Aring (00c6) /AE (00c7) /Ccedilla (00c8) /Egrave (00c9) /Eacute (00ca) /Ecircumflex (00cb) /Edieresis (00cc) /Igrave (00cd) /Iacute (00ce) /Icircumflex (00cf) /Idieresis (00d0) /Eth (00d1) /Ntilde (00d2) /Ograve (00d3) /Oacute (00d4) /Ocircumflex (00d5) /Otilde (00d6) /Odieresis (00d7) /multiply (00d8) /Oslash (00d9) /Ugrave (00da) /Uacute (00db) /Ucircumflex (00dc) /Udieresis (00dd) /Yacute (00de) /Thorn (00df) /germandbls (00e0) /agrave (00e1) /aacute (00e2) /acircumflex (00e3) /atilde (00e4) /adieresis (00e5) /aring (00e6) /ae (00e7) /ccedilla (00e8) /egrave (00e9) /eacute (00ea) /ecircumflex (00eb) /edieresis (00ec) /igrave (00ed) /iacute (00ee) /icircumflex (00ef) /idieresis (00f0) /eth (00f1) /ntilde (00f2) /ograve (00f3) /oacute (00f4) /ocircumflex (00f5) /otilde (00f6) /odieresis (00f7) /divide (00f8) /oslash (00f9) /ugrave (00fa) /uacute (00fb) /ucircumflex (00fc) /udieresis (00fd) /yacute (00fe) /thorn (00ff) /ydieresis
 %%>> def
  
 QueLiFemFer 3 eq %:03 CORRECTOR TIPOGRĀFIC
 QueLiFemFer 4 eq %:04 ANĀLISI TEXTUAL
 QueLiFemFer 5 eq %:05 dada variable
 QueLiFemFer 8 eq %:08 ETIQUETA TEXT
 QueLiFemFer 12 eq %:12 arbre jerārquic
 or or or or
 {
  %#%20bis% mōdul d'anālisi i extracciķ de text
  (%#%20bis%)==
  
  %%% CAL VEURE COM ADAPTEM AIXO PEL PROJECTE DE JBC
  %%% diccionari de substitucio sofisticada de caracters en cas de no existir
  %%% encara queden entrar alguns caracters de WinAnsi que no existeixen
  %%% queden per entrar tots els de la font ZapfDingbats que puguin tenir equivalencies
  %%% queden per entrar alguns de la font Symbol que puguin tenir equivalencies
  /SOFIglyphs
  <<
  /dotaccent (--)
  /quotedblbase (,,)
  /quotesinglbase (,)
  /quotedblleft (")
  /quotedblright (")
  /quoteleft (')
  /quoteright (')
  /emdash (--)
  /endash (-)
  /minus (-) %% afegit x JBC
  /copyright (\(c\))
  /registered (\(r\))
  /ffl (ffl)
  /ffi (ffi)
  /ff (ff)
  /fi (fi)
  /fl (fl)
  /guillemotleft (<<)
  /guillemotright (>>)
  /bullet ( )
  /periodcentered (.)
  /oe (oe)
  /OE (OE)
  /AE (AE)
  /ae (ae)
  /NUL ( ) %% cal esbrinar perque s'activa aquest caracter al PDF casiājust..pdf i l'utilitza per espai en blanc
  /breve (-)
  /circumflex (')
  /tilde (-)
  /Euro.037 (EUR)
  /Euro (EUR)
  >> def
  
  %%% repicat d'alguns caracters per la seva compatibilitat/llegibilitat d'ascii pur
  %%% s'ha de fer al Mac encoding tambe pero ara de moment nomes ho fem per Win (tema AD)
  
  /Win2AsciiPur
  { %% com que aquest nom de caracter sera desconegut ...
  dup 132 /_SOFIglyphs put %% desviem a SOFIglyphs /quotedblbase
  dup 147 /_SOFIglyphs put %% desviem a SOFIglyphs /quotedblleft
  dup 148 /_SOFIglyphs put %% desviem a SOFIglyphs /quotedblright
  dup 145 /_SOFIglyphs put %% desviem a SOFIglyphs /quoteleft
  dup 146 /_SOFIglyphs put %% desviem a SOFIglyphs /quoteright
  dup 130 /_SOFIglyphs put %% desviem a SOFIglyphs /quotesinglbase
  dup 151 /_SOFIglyphs put %% desviem a SOFIglyphs /emdash
  dup 150 /_SOFIglyphs put %% desviem a SOFIglyphs /endash
  dup 169 /_SOFIglyphs put %% desviem a SOFIglyphs /copyright
  dup 174 /_SOFIglyphs put %% desviem a SOFIglyphs /registered
  dup 171 /_SOFIglyphs put %% desviem a SOFIglyphs /guillemotleft
  dup 187 /_SOFIglyphs put %% desviem a SOFIglyphs /guillemotright
  dup 127 /space put %% (/bullet) en blanc
  dup 128 /space put %% (/bullet) en blanc
  dup 129 /space put %% (/bullet) en blanc
  dup 141 /space put %% (/bullet) en blanc
  dup 142 /space put %% (/bullet) en blanc
  dup 143 /space put %% (/bullet) en blanc
  dup 144 /space put %% (/bullet) en blanc
  dup 149 /_SOFIglyphs put %% desviem a SOFIglyphs /bullet
  dup 157 /space put %% (/bullet) en blanc
  dup 158 /space put %% (/bullet) en blanc
  dup 183 /_SOFIglyphs put %% desviem a SOFIglyphs /periodcentered
  dup 156 /_SOFIglyphs put %% desviem a SOFIglyphs /oe
  dup 140 /_SOFIglyphs put %% desviem a SOFIglyphs /OE
  dup 198 /_SOFIglyphs put %% desviem a SOFIglyphs /AE
  dup 230 /_SOFIglyphs put %% desviem a SOFIglyphs /ae
  dup 136 /_SOFIglyphs put %% desviem a SOFIglyphs /circumflex
  dup 152 /_SOFIglyphs put %% desviem a SOFIglyphs /tilde
  } bind def
  
  userdict /WinAnsiEncoding get 256 array copy %% posem l'encoding del SO a la pila (mes endavant hi haura d'anar una funcio que posi automaticament l'encoding del SO (Win Mac o Unix)
  %%% executem la funcio per activar el diccionari de substitucio sofisticada
  Win2AsciiPur /traductorEncoding exch def
  %%% fi CAL VEURE COM ADAPTEM AIXO PEL PROJECTE DE JBC
  
  %% KTCS diccionari detector de linies (rengs)
  <<
  /iniciXreng 0 %% posicio X d'inici del reng
  /iniciYreng 0 %% posicio Y d'inici del reng
  /finalXreng 0 %% posicio X final del reng
  /finalYreng 0 %% posicio Y final del reng
  /Ulinia [] %% paquet on desarem totes les cadenes (o arrays?) de text que detectem pertanyin a una mateixa linia
  /Linies [] %% paquet on desarem (els index quadraran amb capLpeus) totes les linies detectades (dins una array cadascuna)
  /capLpeus [] %% paquet on desarem (els index quadraran amb Linies) totes les 4 coordenades (dins una array de 4 posicions) dels inici i final de cada linia
  /Areng true %% gatell per saber si encara estem dins el mateix reng (caldra?)
  /Cinyell 0 %% maxim valor detectat (dins una mateixa linia) d'ample de caracter (de l'inici d'un caracter a l'inici del proper) amb tots els seus espaiats addicionals!
  /MesEnlla 0 %% maxima posicio X admesa pel proper caracter (llavors trencarem la linia i caldra utilitzar el flag)
  /Ylinia 0 %% valor actual de la posicio Y de la linia
  >> /ReNG exch def
  
  %% x JBC
  %% aquí desarem, pāgina a pāgina, les posicions Y de tots els rengs de text diferents (clau),
  %% on el seu valor serā una array amb quatre elements:
  %% 0: el primer, una array que contindrā una array per a cada carācter amb les posicions:
  %% índex 0: coordenada X d'inici del carācter (mesurada en horitzontal)
  %% índex 1: coordenada X de final del carācter: el seu Width sumat (mesurada en horitzontal)
  %% índex 2: coordenada real X d'inici del carācter (punt de línia de base corregit a l'eix no rotat)
  %% índex 3: coordenada real Y d'inici del carācter (punt de línia de base corregit a l'eix no rotat)
  %% índex 4: coordenada real X de final del carācter (punt de línia de base corregit a l'eix no rotat)
  %% índex 5: coordenada real Y de final del carācter (punt de línia de base corregit a l'eix no rotat)
  %% ... si hi ha una separaciķ (espai o no) en comptes d'array contindrā un null
  %% 1: el segon, una array on hi hauran els noms literals dels signes ordenats
  %% correctament on, si hi hagués una separaciķ (espai o no), contindria un null
  %% 2: el tercer, una array amb el nom PDF del tipus (QuinaFONT) utilitzat a cada signe
  %% 3: el quart, una array amb el cos real (CyTm) utilitzat en cada signe
  %% 4: el cinquč, ens indica si la línia és rotada (null=NO angle=SI)
  
  << >> /yRENGS exch def
  
  %% detector d'amplada fixa (Fixed Width o Fixed Pitch)
  /mqndscrr false def
  
  %% Font Descriptor Flags (seccio 5.7.1 de la PDF Reference 1.7)
  /FlagsFontDescriptor
  [ %% posicio del bit (aixo no es un index!)
  {(FixedPitch ... Font Descriptor Flag 1\n) print flush /mqndscrr true def} %% 1
  %% {(\n\nMRCTstatus 101\n) print flush}
  {(Serif ... Font Descriptor Flag 2\n) print flush} %% 2
  %% {(\n\nMRCTstatus 102\n) print flush}
  {(Symbolic ... Font Descriptor Flag 3\n) print flush /SMBLC true def} %% 3
  %% {(\n\nMRCTstatus 103\n) print flush}
  {(Script ... Font Descriptor Flag 4\n) print flush} %% 4
  %% {(\n\nMRCTstatus 104\n) print flush}
  {(Reserved ... Font Descriptor Flag 5\n) print flush} %% 5
  %% {(\n\nMRCTstatus 105\n) print flush}
  {(Nonsymbolic ... Font Descriptor Flag 6\n) print flush /SMBLC false def} %% 6
  %% {(\n\nMRCTstatus 106\n) print flush}
  {(Italic ... Font Descriptor Flag 7\n) print flush} %% 7
  %% {(\n\nMRCTstatus 107\n) print flush}
  {(Reserved ... Font Descriptor Flag 8\n) print flush} %% 8
  %% {(\n\nMRCTstatus 108\n) print flush}
  {(Reserved ... Font Descriptor Flag 9\n) print flush} %% 9
  %% {(\n\nMRCTstatus 109\n) print flush}
  {(Reserved ... Font Descriptor Flag 10\n) print flush} %% 10
  %% {(\n\nMRCTstatus 110\n) print flush}
  {(Reserved ... Font Descriptor Flag 11\n) print flush} %% 11
  %% {(\n\nMRCTstatus 111\n) print flush}
  {(Reserved ... Font Descriptor Flag 12\n) print flush} %% 12
  %% {(\n\nMRCTstatus 112\n) print flush}
  {(Reserved ... Font Descriptor Flag 13\n) print flush} %% 13
  %% {(\n\nMRCTstatus 113\n) print flush}
  {(Reserved ... Font Descriptor Flag 14\n) print flush} %% 14
  %% {(\n\nMRCTstatus 114\n) print flush}
  {(Reserved ... Font Descriptor Flag 15\n) print flush} %% 15
  %% {(\n\nMRCTstatus 115\n) print flush}
  {(Reserved ... Font Descriptor Flag 16\n) print flush} %% 16
  %% {(\n\nMRCTstatus 116\n) print flush}
  {(AllCap ... Font Descriptor Flag 17\n) print flush} %% 17
  %% {(\n\nMRCTstatus 117\n) print flush}
  {(SmallCap ... Font Descriptor Flag 18\n) print flush} %% 18
  %% {(\n\nMRCTstatus 118\n) print flush}
  {(ForceBold ... Font Descriptor Flag 19\n) print flush} %% 19
  %% {(\n\nMRCTstatus 119\n) print flush}
  {(Reserved ... Font Descriptor Flag 20\n) print flush} %% 20
  %% {(\n\nMRCTstatus 120\n) print flush}
  {(Reserved ... Font Descriptor Flag 21\n) print flush} %% 21
  %% {(\n\nMRCTstatus 121\n) print flush}
  {(Reserved ... Font Descriptor Flag 22\n) print flush} %% 22
  %% {(\n\nMRCTstatus 122\n) print flush}
  {(Reserved ... Font Descriptor Flag 23\n) print flush} %% 23
  %% {(\n\nMRCTstatus 123\n) print flush}
  {(Reserved ... Font Descriptor Flag 24\n) print flush} %% 24
  %% {(\n\nMRCTstatus 124\n) print flush}
  {(Reserved ... Font Descriptor Flag 25\n) print flush} %% 25
  %% {(\n\nMRCTstatus 125\n) print flush}
  {(Reserved ... Font Descriptor Flag 26\n) print flush} %% 26
  %% {(\n\nMRCTstatus 126\n) print flush}
  {(Reserved ... Font Descriptor Flag 27\n) print flush} %% 27
  %% {(\n\nMRCTstatus 127\n) print flush}
  {(Reserved ... Font Descriptor Flag 28\n) print flush} %% 28
  %% {(\n\nMRCTstatus 128\n) print flush}
  {(Reserved ... Font Descriptor Flag 29\n) print flush} %% 29
  %% {(\n\nMRCTstatus 129\n) print flush}
  {(Reserved ... Font Descriptor Flag 30\n) print flush} %% 30
  %% {(\n\nMRCTstatus 130\n) print flush}
  {(Reserved ... Font Descriptor Flag 31\n) print flush} %% 31
  %% {(\n\nMRCTstatus 131\n) print flush}
  {(Reserved ... Font Descriptor Flag 32\n) print flush} %% 32
  %% {(\n\nMRCTstatus 132\n) print flush}
  ] def
  
  
  %% KTCS
  %% passem el paquet WinAnsi a un dic (d_WAE) per fer + rapida la cerca del codi de l'etiqueta de fusio a escriure
  /d_WAE 2 dict def
  %% aqui hi havia /WinAnsiEncoding definit (ara es definit a %20%)
  WinAnsiEncoding
  0 1 255 {dup 2 index exch get exch d_WAE 3 1 roll put}for
  pop
  %% KTCS
  %% aqui definim els diccionaris de la metrica de les 14 Core PDF fonts
  /14PDFcoreFonts 14 dict def
  14PDFcoreFonts begin
  /Symbol
  <<
  /space 250
  /exclam 333
  /universal 713
  /numbersign 500
  /existential 549
  /percent 833
  /ampersand 778
  /suchthat 439
  /parenleft 333
  /parenright 333
  /asteriskmath 500
  /plus 549
  /comma 250
  /minus 549
  /period 250
  /slash 278
  /zero 500
  /one 500
  /two 500
  /three 500
  /four 500
  /five 500
  /six 500
  /seven 500
  /eight 500
  /nine 500
  /colon 278
  /semicolon 278
  /less 549
  /equal 549
  /greater 549
  /question 444
  /congruent 549
  /Alpha 722
  /Beta 667
  /Chi 722
  /Delta 612
  /Epsilon 611
  /Phi 763
  /Gamma 603
  /Eta 722
  /Iota 333
  /theta1 631
  /Kappa 722
  /Lambda 686
  /Mu 889
  /Nu 722
  /Omicron 722
  /Pi 768
  /Theta 741
  /Rho 556
  /Sigma 592
  /Tau 611
  /Upsilon 690
  /sigma1 439
  /Omega 768
  /Xi 645
  /Psi 795
  /Zeta 611
  /bracketleft 333
  /therefore 863
  /bracketright 333
  /perpendicular 658
  /underscore 500
  /radicalex 500
  /alpha 631
  /beta 549
  /chi 549
  /delta 494
  /epsilon 439
  /phi 521
  /gamma 411
  /eta 603
  /iota 329
  /phi1 603
  /kappa 549
  /lambda 549
  /mu 576
  /nu 521
  /omicron 549
  /pi 549
  /theta 521
  /rho 549
  /sigma 603
  /tau 439
  /upsilon 576
  /omega1 713
  /omega 686
  /xi 493
  /psi 686
  /zeta 494
  /braceleft 480
  /bar 200
  /braceright 480
  /similar 549
  /Euro 750
  /Upsilon1 620
  /minute 247
  /lessequal 549
  /fraction 167
  /infinity 713
  /florin 500
  /club 753
  /diamond 753
  /heart 753
  /spade 753
  /arrowboth 1042
  /arrowleft 987
  /arrowup 603
  /arrowright 987
  /arrowdown 603
  /degree 400
  /plusminus 549
  /second 411
  /greaterequal 549
  /multiply 549
  /proportional 713
  /partialdiff 494
  /bullet 460
  /divide 549
  /notequal 549
  /equivalence 549
  /approxequal 549
  /ellipsis 1000
  /arrowvertex 603
  /arrowhorizex 1000
  /carriagereturn 658
  /aleph 823
  /Ifraktur 686
  /Rfraktur 795
  /weierstrass 987
  /circlemultiply 768
  /circleplus 768
  /emptyset 823
  /intersection 768
  /union 768
  /propersuperset 713
  /reflexsuperset 713
  /notsubset 713
  /propersubset 713
  /reflexsubset 713
  /element 713
  /notelement 713
  /angle 768
  /gradient 713
  /registerserif 790
  /copyrightserif 790
  /trademarkserif 890
  /product 823
  /radical 549
  /dotmath 250
  /logicalnot 713
  /logicaland 603
  /logicalor 603
  /arrowdblboth 1042
  /arrowdblleft 987
  /arrowdblup 603
  /arrowdblright 987
  /arrowdbldown 603
  /lozenge 494
  /angleleft 329
  /registersans 790
  /copyrightsans 790
  /trademarksans 786
  /summation 713
  /parenlefttp 384
  /parenleftex 384
  /parenleftbt 384
  /bracketlefttp 384
  /bracketleftex 384
  /bracketleftbt 384
  /bracelefttp 494
  /braceleftmid 494
  /braceleftbt 494
  /braceex 494
  /angleright 329
  /integral 274
  /integraltp 686
  /integralex 686
  /integralbt 686
  /parenrighttp 384
  /parenrightex 384
  /parenrightbt 384
  /bracketrighttp 384
  /bracketrightex 384
  /bracketrightbt 384
  /bracerighttp 494
  /bracerightmid 494
  /bracerightbt 494
  /apple 790
  >> def
  /ZapfDingbats
  <<
  /space 278
  /a1 974
  /a2 961
  /a202 974
  /a3 980
  /a4 719
  /a5 789
  /a119 790
  /a118 791
  /a117 690
  /a11 960
  /a12 939
  /a13 549
  /a14 855
  /a15 911
  /a16 933
  /a105 911
  /a17 945
  /a18 974
  /a19 755
  /a20 846
  /a21 762
  /a22 761
  /a23 571
  /a24 677
  /a25 763
  /a26 760
  /a27 759
  /a28 754
  /a6 494
  /a7 552
  /a8 537
  /a9 577
  /a10 692
  /a29 786
  /a30 788
  /a31 788
  /a32 790
  /a33 793
  /a34 794
  /a35 816
  /a36 823
  /a37 789
  /a38 841
  /a39 823
  /a40 833
  /a41 816
  /a42 831
  /a43 923
  /a44 744
  /a45 723
  /a46 749
  /a47 790
  /a48 792
  /a49 695
  /a50 776
  /a51 768
  /a52 792
  /a53 759
  /a54 707
  /a55 708
  /a56 682
  /a57 701
  /a58 826
  /a59 815
  /a60 789
  /a61 789
  /a62 707
  /a63 687
  /a64 696
  /a65 689
  /a66 786
  /a67 787
  /a68 713
  /a69 791
  /a70 785
  /a71 791
  /a72 873
  /a73 761
  /a74 762
  /a203 762
  /a75 759
  /a204 759
  /a76 892
  /a77 892
  /a78 788
  /a79 784
  /a81 438
  /a82 138
  /a83 277
  /a84 415
  /a97 392
  /a98 392
  /a99 668
  /a100 668
  /a89 390
  /a90 390
  /a93 317
  /a94 317
  /a91 276
  /a92 276
  /a205 509
  /a85 509
  /a206 410
  /a86 410
  /a87 234
  /a88 234
  /a95 334
  /a96 334
  /a101 732
  /a102 544
  /a103 544
  /a104 910
  /a106 667
  /a107 760
  /a108 760
  /a112 776
  /a111 595
  /a110 694
  /a109 626
  /a120 788
  /a121 788
  /a122 788
  /a123 788
  /a124 788
  /a125 788
  /a126 788
  /a127 788
  /a128 788
  /a129 788
  /a130 788
  /a131 788
  /a132 788
  /a133 788
  /a134 788
  /a135 788
  /a136 788
  /a137 788
  /a138 788
  /a139 788
  /a140 788
  /a141 788
  /a142 788
  /a143 788
  /a144 788
  /a145 788
  /a146 788
  /a147 788
  /a148 788
  /a149 788
  /a150 788
  /a151 788
  /a152 788
  /a153 788
  /a154 788
  /a155 788
  /a156 788
  /a157 788
  /a158 788
  /a159 788
  /a160 894
  /a161 838
  /a163 1016
  /a164 458
  /a196 748
  /a165 924
  /a192 748
  /a166 918
  /a167 927
  /a168 928
  /a169 928
  /a170 834
  /a171 873
  /a172 828
  /a173 924
  /a162 924
  /a174 917
  /a175 930
  /a176 931
  /a177 463
  /a178 883
  /a179 836
  /a193 836
  /a180 867
  /a199 867
  /a181 696
  /a200 696
  /a182 874
  /a201 874
  /a183 760
  /a184 946
  /a197 771
  /a185 865
  /a194 771
  /a198 888
  /a186 967
  /a195 888
  /a187 831
  /a188 873
  /a189 927
  /a190 970
  /a191 918
  >> def
  /Times-Roman
  <<
  /space 250
  /exclam 333
  /quotedbl 408
  /numbersign 500
  /dollar 500
  /percent 833
  /ampersand 778
  /quoteright 333
  /parenleft 333
  /parenright 333
  /asterisk 500
  /plus 564
  /comma 250
  /hyphen 333
  /period 250
  /slash 278
  /zero 500
  /one 500
  /two 500
  /three 500
  /four 500
  /five 500
  /six 500
  /seven 500
  /eight 500
  /nine 500
  /colon 278
  /semicolon 278
  /less 564
  /equal 564
  /greater 564
  /question 444
  /at 921
  /A 722
  /B 667
  /C 667
  /D 722
  /E 611
  /F 556
  /G 722
  /H 722
  /I 333
  /J 389
  /K 722
  /L 611
  /M 889
  /N 722
  /O 722
  /P 556
  /Q 722
  /R 667
  /S 556
  /T 611
  /U 722
  /V 722
  /W 944
  /X 722
  /Y 722
  /Z 611
  /bracketleft 333
  /backslash 278
  /bracketright 333
  /asciicircum 469
  /underscore 500
  /quoteleft 333
  /a 444
  /b 500
  /c 444
  /d 500
  /e 444
  /f 333
  /g 500
  /h 500
  /i 278
  /j 278
  /k 500
  /l 278
  /m 778
  /n 500
  /o 500
  /p 500
  /q 500
  /r 333
  /s 389
  /t 278
  /u 500
  /v 500
  /w 722
  /x 500
  /y 500
  /z 444
  /braceleft 480
  /bar 200
  /braceright 480
  /asciitilde 541
  /exclamdown 333
  /cent 500
  /sterling 500
  /fraction 167
  /yen 500
  /florin 500
  /section 500
  /currency 500
  /quotesingle 180
  /quotedblleft 444
  /guillemotleft 500
  /guilsinglleft 333
  /guilsinglright 333
  /fi 556
  /fl 556
  /endash 500
  /dagger 500
  /daggerdbl 500
  /periodcentered 250
  /paragraph 453
  /bullet 350
  /quotesinglbase 333
  /quotedblbase 444
  /quotedblright 444
  /guillemotright 500
  /ellipsis 1000
  /perthousand 1000
  /questiondown 444
  /grave 333
  /acute 333
  /circumflex 333
  /tilde 333
  /macron 333
  /breve 333
  /dotaccent 333
  /dieresis 333
  /ring 333
  /cedilla 333
  /hungarumlaut 333
  /ogonek 333
  /caron 333
  /emdash 1000
  /AE 889
  /ordfeminine 276
  /Lslash 611
  /Oslash 722
  /OE 889
  /ordmasculine 310
  /ae 667
  /dotlessi 278
  /lslash 278
  /oslash 500
  /oe 722
  /germandbls 500
  /Idieresis 333
  /eacute 444
  /abreve 444
  /uhungarumlaut 500
  /ecaron 444
  /Ydieresis 722
  /divide 564
  /Yacute 722
  /Acircumflex 722
  /aacute 444
  /Ucircumflex 722
  /yacute 500
  /scommaaccent 389
  /ecircumflex 444
  /Uring 722
  /Udieresis 722
  /aogonek 444
  /Uacute 722
  /uogonek 500
  /Edieresis 611
  /Dcroat 722
  /commaaccent 250
  /copyright 760
  /Emacron 611
  /ccaron 444
  /aring 444
  /Ncommaaccent 722
  /lacute 278
  /agrave 444
  /Tcommaaccent 611
  /Cacute 667
  /atilde 444
  /Edotaccent 611
  /scaron 389
  /scedilla 389
  /iacute 278
  /lozenge 471
  /Rcaron 667
  /Gcommaaccent 722
  /ucircumflex 500
  /acircumflex 444
  /Amacron 722
  /rcaron 333
  /ccedilla 444
  /Zdotaccent 611
  /Thorn 556
  /Omacron 722
  /Racute 667
  /Sacute 556
  /dcaron 588
  /Umacron 722
  /uring 500
  /threesuperior 300
  /Ograve 722
  /Agrave 722
  /Abreve 722
  /multiply 564
  /uacute 500
  /Tcaron 611
  /partialdiff 476
  /ydieresis 500
  /Nacute 722
  /icircumflex 278
  /Ecircumflex 611
  /adieresis 444
  /edieresis 444
  /cacute 444
  /nacute 500
  /umacron 500
  /Ncaron 722
  /Iacute 333
  /plusminus 564
  /brokenbar 200
  /registered 760
  /Gbreve 722
  /Idotaccent 333
  /summation 600
  /Egrave 611
  /racute 333
  /omacron 500
  /Zacute 611
  /Zcaron 611
  /greaterequal 549
  /Eth 722
  /Ccedilla 667
  /lcommaaccent 278
  /tcaron 326
  /eogonek 444
  /Uogonek 722
  /Aacute 722
  /Adieresis 722
  /egrave 444
  /zacute 444
  /iogonek 278
  /Oacute 722
  /oacute 500
  /amacron 444
  /sacute 389
  /idieresis 278
  /Ocircumflex 722
  /Ugrave 722
  /Delta 612
  /thorn 500
  /twosuperior 300
  /Odieresis 722
  /mu 500
  /igrave 278
  /ohungarumlaut 500
  /Eogonek 611
  /dcroat 500
  /threequarters 750
  /Scedilla 556
  /lcaron 344
  /Kcommaaccent 722
  /Lacute 611
  /trademark 980
  /edotaccent 444
  /Igrave 333
  /Imacron 333
  /Lcaron 611
  /onehalf 750
  /lessequal 549
  /ocircumflex 500
  /ntilde 500
  /Uhungarumlaut 722
  /Eacute 611
  /emacron 444
  /gbreve 500
  /onequarter 750
  /Scaron 556
  /Scommaaccent 556
  /Ohungarumlaut 722
  /degree 400
  /ograve 500
  /Ccaron 667
  /ugrave 500
  /radical 453
  /Dcaron 722
  /rcommaaccent 333
  /Ntilde 722
  /otilde 500
  /Rcommaaccent 667
  /Lcommaaccent 611
  /Atilde 722
  /Aogonek 722
  /Aring 722
  /Otilde 722
  /zdotaccent 444
  /Ecaron 611
  /Iogonek 333
  /kcommaaccent 500
  /minus 564
  /Icircumflex 333
  /ncaron 500
  /tcommaaccent 278
  /logicalnot 564
  /odieresis 500
  /udieresis 500
  /notequal 549
  /gcommaaccent 500
  /eth 500
  /zcaron 444
  /ncommaaccent 500
  /onesuperior 300
  /imacron 278
  /Euro 500
  >> def
  /Times-Italic
  <<
  /space 250
  /exclam 333
  /quotedbl 420
  /numbersign 500
  /dollar 500
  /percent 833
  /ampersand 778
  /quoteright 333
  /parenleft 333
  /parenright 333
  /asterisk 500
  /plus 675
  /comma 250
  /hyphen 333
  /period 250
  /slash 278
  /zero 500
  /one 500
  /two 500
  /three 500
  /four 500
  /five 500
  /six 500
  /seven 500
  /eight 500
  /nine 500
  /colon 333
  /semicolon 333
  /less 675
  /equal 675
  /greater 675
  /question 500
  /at 920
  /A 611
  /B 611
  /C 667
  /D 722
  /E 611
  /F 611
  /G 722
  /H 722
  /I 333
  /J 444
  /K 667
  /L 556
  /M 833
  /N 667
  /O 722
  /P 611
  /Q 722
  /R 611
  /S 500
  /T 556
  /U 722
  /V 611
  /W 833
  /X 611
  /Y 556
  /Z 556
  /bracketleft 389
  /backslash 278
  /bracketright 389
  /asciicircum 422
  /underscore 500
  /quoteleft 333
  /a 500
  /b 500
  /c 444
  /d 500
  /e 444
  /f 278
  /g 500
  /h 500
  /i 278
  /j 278
  /k 444
  /l 278
  /m 722
  /n 500
  /o 500
  /p 500
  /q 500
  /r 389
  /s 389
  /t 278
  /u 500
  /v 444
  /w 667
  /x 444
  /y 444
  /z 389
  /braceleft 400
  /bar 275
  /braceright 400
  /asciitilde 541
  /exclamdown 389
  /cent 500
  /sterling 500
  /fraction 167
  /yen 500
  /florin 500
  /section 500
  /currency 500
  /quotesingle 214
  /quotedblleft 556
  /guillemotleft 500
  /guilsinglleft 333
  /guilsinglright 333
  /fi 500
  /fl 500
  /endash 500
  /dagger 500
  /daggerdbl 500
  /periodcentered 250
  /paragraph 523
  /bullet 350
  /quotesinglbase 333
  /quotedblbase 556
  /quotedblright 556
  /guillemotright 500
  /ellipsis 889
  /perthousand 1000
  /questiondown 500
  /grave 333
  /acute 333
  /circumflex 333
  /tilde 333
  /macron 333
  /breve 333
  /dotaccent 333
  /dieresis 333
  /ring 333
  /cedilla 333
  /hungarumlaut 333
  /ogonek 333
  /caron 333
  /emdash 889
  /AE 889
  /ordfeminine 276
  /Lslash 556
  /Oslash 722
  /OE 944
  /ordmasculine 310
  /ae 667
  /dotlessi 278
  /lslash 278
  /oslash 500
  /oe 667
  /germandbls 500
  /Idieresis 333
  /eacute 444
  /abreve 500
  /uhungarumlaut 500
  /ecaron 444
  /Ydieresis 556
  /divide 675
  /Yacute 556
  /Acircumflex 611
  /aacute 500
  /Ucircumflex 722
  /yacute 444
  /scommaaccent 389
  /ecircumflex 444
  /Uring 722
  /Udieresis 722
  /aogonek 500
  /Uacute 722
  /uogonek 500
  /Edieresis 611
  /Dcroat 722
  /commaaccent 250
  /copyright 760
  /Emacron 611
  /ccaron 444
  /aring 500
  /Ncommaaccent 667
  /lacute 278
  /agrave 500
  /Tcommaaccent 556
  /Cacute 667
  /atilde 500
  /Edotaccent 611
  /scaron 389
  /scedilla 389
  /iacute 278
  /lozenge 471
  /Rcaron 611
  /Gcommaaccent 722
  /ucircumflex 500
  /acircumflex 500
  /Amacron 611
  /rcaron 389
  /ccedilla 444
  /Zdotaccent 556
  /Thorn 611
  /Omacron 722
  /Racute 611
  /Sacute 500
  /dcaron 544
  /Umacron 722
  /uring 500
  /threesuperior 300
  /Ograve 722
  /Agrave 611
  /Abreve 611
  /multiply 675
  /uacute 500
  /Tcaron 556
  /partialdiff 476
  /ydieresis 444
  /Nacute 667
  /icircumflex 278
  /Ecircumflex 611
  /adieresis 500
  /edieresis 444
  /cacute 444
  /nacute 500
  /umacron 500
  /Ncaron 667
  /Iacute 333
  /plusminus 675
  /brokenbar 275
  /registered 760
  /Gbreve 722
  /Idotaccent 333
  /summation 600
  /Egrave 611
  /racute 389
  /omacron 500
  /Zacute 556
  /Zcaron 556
  /greaterequal 549
  /Eth 722
  /Ccedilla 667
  /lcommaaccent 278
  /tcaron 300
  /eogonek 444
  /Uogonek 722
  /Aacute 611
  /Adieresis 611
  /egrave 444
  /zacute 389
  /iogonek 278
  /Oacute 722
  /oacute 500
  /amacron 500
  /sacute 389
  /idieresis 278
  /Ocircumflex 722
  /Ugrave 722
  /Delta 612
  /thorn 500
  /twosuperior 300
  /Odieresis 722
  /mu 500
  /igrave 278
  /ohungarumlaut 500
  /Eogonek 611
  /dcroat 500
  /threequarters 750
  /Scedilla 500
  /lcaron 300
  /Kcommaaccent 667
  /Lacute 556
  /trademark 980
  /edotaccent 444
  /Igrave 333
  /Imacron 333
  /Lcaron 611
  /onehalf 750
  /lessequal 549
  /ocircumflex 500
  /ntilde 500
  /Uhungarumlaut 722
  /Eacute 611
  /emacron 444
  /gbreve 500
  /onequarter 750
  /Scaron 500
  /Scommaaccent 500
  /Ohungarumlaut 722
  /degree 400
  /ograve 500
  /Ccaron 667
  /ugrave 500
  /radical 453
  /Dcaron 722
  /rcommaaccent 389
  /Ntilde 667
  /otilde 500
  /Rcommaaccent 611
  /Lcommaaccent 556
  /Atilde 611
  /Aogonek 611
  /Aring 611
  /Otilde 722
  /zdotaccent 389
  /Ecaron 611
  /Iogonek 333
  /kcommaaccent 444
  /minus 675
  /Icircumflex 333
  /ncaron 500
  /tcommaaccent 278
  /logicalnot 675
  /odieresis 500
  /udieresis 500
  /notequal 549
  /gcommaaccent 500
  /eth 500
  /zcaron 389
  /ncommaaccent 500
  /onesuperior 300
  /imacron 278
  /Euro 500
  >> def
  /Times-BoldItalic
  <<
  /space 250
  /exclam 389
  /quotedbl 555
  /numbersign 500
  /dollar 500
  /percent 833
  /ampersand 778
  /quoteright 333
  /parenleft 333
  /parenright 333
  /asterisk 500
  /plus 570
  /comma 250
  /hyphen 333
  /period 250
  /slash 278
  /zero 500
  /one 500
  /two 500
  /three 500
  /four 500
  /five 500
  /six 500
  /seven 500
  /eight 500
  /nine 500
  /colon 333
  /semicolon 333
  /less 570
  /equal 570
  /greater 570
  /question 500
  /at 832
  /A 667
  /B 667
  /C 667
  /D 722
  /E 667
  /F 667
  /G 722
  /H 778
  /I 389
  /J 500
  /K 667
  /L 611
  /M 889
  /N 722
  /O 722
  /P 611
  /Q 722
  /R 667
  /S 556
  /T 611
  /U 722
  /V 667
  /W 889
  /X 667
  /Y 611
  /Z 611
  /bracketleft 333
  /backslash 278
  /bracketright 333
  /asciicircum 570
  /underscore 500
  /quoteleft 333
  /a 500
  /b 500
  /c 444
  /d 500
  /e 444
  /f 333
  /g 500
  /h 556
  /i 278
  /j 278
  /k 500
  /l 278
  /m 778
  /n 556
  /o 500
  /p 500
  /q 500
  /r 389
  /s 389
  /t 278
  /u 556
  /v 444
  /w 667
  /x 500
  /y 444
  /z 389
  /braceleft 348
  /bar 220
  /braceright 348
  /asciitilde 570
  /exclamdown 389
  /cent 500
  /sterling 500
  /fraction 167
  /yen 500
  /florin 500
  /section 500
  /currency 500
  /quotesingle 278
  /quotedblleft 500
  /guillemotleft 500
  /guilsinglleft 333
  /guilsinglright 333
  /fi 556
  /fl 556
  /endash 500
  /dagger 500
  /daggerdbl 500
  /periodcentered 250
  /paragraph 500
  /bullet 350
  /quotesinglbase 333
  /quotedblbase 500
  /quotedblright 500
  /guillemotright 500
  /ellipsis 1000
  /perthousand 1000
  /questiondown 500
  /grave 333
  /acute 333
  /circumflex 333
  /tilde 333
  /macron 333
  /breve 333
  /dotaccent 333
  /dieresis 333
  /ring 333
  /cedilla 333
  /hungarumlaut 333
  /ogonek 333
  /caron 333
  /emdash 1000
  /AE 944
  /ordfeminine 266
  /Lslash 611
  /Oslash 722
  /OE 944
  /ordmasculine 300
  /ae 722
  /dotlessi 278
  /lslash 278
  /oslash 500
  /oe 722
  /germandbls 500
  /Idieresis 389
  /eacute 444
  /abreve 500
  /uhungarumlaut 556
  /ecaron 444
  /Ydieresis 611
  /divide 570
  /Yacute 611
  /Acircumflex 667
  /aacute 500
  /Ucircumflex 722
  /yacute 444
  /scommaaccent 389
  /ecircumflex 444
  /Uring 722
  /Udieresis 722
  /aogonek 500
  /Uacute 722
  /uogonek 556
  /Edieresis 667
  /Dcroat 722
  /commaaccent 250
  /copyright 747
  /Emacron 667
  /ccaron 444
  /aring 500
  /Ncommaaccent 722
  /lacute 278
  /agrave 500
  /Tcommaaccent 611
  /Cacute 667
  /atilde 500
  /Edotaccent 667
  /scaron 389
  /scedilla 389
  /iacute 278
  /lozenge 494
  /Rcaron 667
  /Gcommaaccent 722
  /ucircumflex 556
  /acircumflex 500
  /Amacron 667
  /rcaron 389
  /ccedilla 444
  /Zdotaccent 611
  /Thorn 611
  /Omacron 722
  /Racute 667
  /Sacute 556
  /dcaron 608
  /Umacron 722
  /uring 556
  /threesuperior 300
  /Ograve 722
  /Agrave 667
  /Abreve 667
  /multiply 570
  /uacute 556
  /Tcaron 611
  /partialdiff 494
  /ydieresis 444
  /Nacute 722
  /icircumflex 278
  /Ecircumflex 667
  /adieresis 500
  /edieresis 444
  /cacute 444
  /nacute 556
  /umacron 556
  /Ncaron 722
  /Iacute 389
  /plusminus 570
  /brokenbar 220
  /registered 747
  /Gbreve 722
  /Idotaccent 389
  /summation 600
  /Egrave 667
  /racute 389
  /omacron 500
  /Zacute 611
  /Zcaron 611
  /greaterequal 549
  /Eth 722
  /Ccedilla 667
  /lcommaaccent 278
  /tcaron 366
  /eogonek 444
  /Uogonek 722
  /Aacute 667
  /Adieresis 667
  /egrave 444
  /zacute 389
  /iogonek 278
  /Oacute 722
  /oacute 500
  /amacron 500
  /sacute 389
  /idieresis 278
  /Ocircumflex 722
  /Ugrave 722
  /Delta 612
  /thorn 500
  /twosuperior 300
  /Odieresis 722
  /mu 576
  /igrave 278
  /ohungarumlaut 500
  /Eogonek 667
  /dcroat 500
  /threequarters 750
  /Scedilla 556
  /lcaron 382
  /Kcommaaccent 667
  /Lacute 611
  /trademark 1000
  /edotaccent 444
  /Igrave 389
  /Imacron 389
  /Lcaron 611
  /onehalf 750
  /lessequal 549
  /ocircumflex 500
  /ntilde 556
  /Uhungarumlaut 722
  /Eacute 667
  /emacron 444
  /gbreve 500
  /onequarter 750
  /Scaron 556
  /Scommaaccent 556
  /Ohungarumlaut 722
  /degree 400
  /ograve 500
  /Ccaron 667
  /ugrave 556
  /radical 549
  /Dcaron 722
  /rcommaaccent 389
  /Ntilde 722
  /otilde 500
  /Rcommaaccent 667
  /Lcommaaccent 611
  /Atilde 667
  /Aogonek 667
  /Aring 667
  /Otilde 722
  /zdotaccent 389
  /Ecaron 667
  /Iogonek 389
  /kcommaaccent 500
  /minus 606
  /Icircumflex 389
  /ncaron 556
  /tcommaaccent 278
  /logicalnot 606
  /odieresis 500
  /udieresis 556