fites i gatells del codi font PS | FemFum CaLi2CoPi v0.037 | flags PS source code and milestones

fites i gatells del codi font PS | FemFum CaLi2CoPi v0.037 | flags PS source code and milestones


 %# 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/>

 %#% execució amb GS per línia de comandes
 %# gs -q -dNOSAFER -o re.pdf -sDEVICE=pdfwrite -c .setpdfwrite -f FemFum_CaLi2CoPi_037.ps

 %#%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ú)

 %#% A path i nom del PDF a tractar %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 %#% B path + tram del nom del nou PDF reescrit i tractat segons l'opció escollida %%%%%%%%%%%%%

 %#% 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)

 %#% D extrau o reinsereix imatges JPEG %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %# path del directori on hi hagin les imatges a exportar (~9) o a reinserir (~7)

 %#% 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

 %#% path i nom del fitxer dels rengs de text fruit de l'anàlisi de sortida (es llegeix o s'escriu)

 %#% posem les etiquetes transparents en una lleixa NO imprimible? true:SI false:NO

 %#% missatge tipus Tooltip, Sticky Note o Post-It per als fitxers no localitzats a la base de dades

 %#% #11 torsimany: preparem el fitxer TXT de l'anàlisi de sortida pels traductors en línia?

 %#% F dada variable %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %# 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
 %# array pel patró dels noms clau per cada línia (registre) de dada variable llegida
 %# 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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %# array dels nivells jeràrquics de l'índex
 %# generem l'índex amb bookmarks?
 %# generem l'índex amb pàgines?
 %# numerem les pàgines?
 %# fins a quina jerarquia despleguem la visibilitat inicial dels bookmarks?

 %#% 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)

 %#% H path + inici del nom del fitxer TXT informatiu XRay %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 %#% J path de treball dels fitxers temporals %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 %#% fi de dades de capçalera (opcions de menú) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 %#%02% paquet de missatges BaBeL
 %# 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

 %#%03% captura de dades de capçalera

 %:07 REINSEREIX IMATGES JPEG
 %/07 REINSEREIX IMATGES JPEG

 %:02 MARQUES DE TALL
 %/02 MARQUES DE TALL

 %:03 CORRECTOR TIPOGRÀFIC

 %:04 ANÀLISI TEXTUAL

 %:05 dada variable

 %:08 ETIQUETA TEXT

 %:12 arbre jeràrquic
 %/12 arbre jeràrquic
 %/08 ETIQUETA TEXT
 %/05 dada variable
 %/04 ANÀLISI TEXTUAL
 %/03 CORRECTOR TIPOGRÀFIC

 %#%04% Detecta intèrprets Distiller i Ghostscript (o desconeguts) i n'avalua la versió

 %#%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

 %#%06% %%%DLL%%% Atenció: això no li agrada a la DLL i al comprimir-lo (Flate) cal treure-ho!!!

 %#%08% aquí llistem x la pantalla el nom del PDF que explorem ...

 %#%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)

 %#%10% trillador de PDF per superar la limitació 65535 famosa
 %# de passada podem saber d'antuvi de quants objectes disposa

 %#%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!)

 %#%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!)

 %#%13% aquí comença el nucli original de comdimoni

 %#%14% anàlisi per validar el PDF
 %# primer, mirem si el PDF és encriptat
 %# segon, mirem si el PDF està signat digitalment
 %# 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
 %# quart, detectem si el PDF està liniaritzat (Fast Web View ~ ús del byteoffset )
 %# cinquè, analitzem a fons la versió comparant el valor del cap del PDF
 %# amb una possible entrada /Version al /Root de l'xref + nova

 %#%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

 %#%15% definim una variable pel final de línia EOL, així podrem variar-la quan interessi

 %#%16% loop recursiu entre diccionaris x eliminar duplicats d'objectes

 %#%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

 %#%18% capturem ara el /Root + nou

 %#%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ó

 %:01 SEPARACIÓ DE TINTES

 %#%19bis0% detector de si hi ha més d'1 pàgina per la separació de colors
 %/01 SEPARACIÓ DE TINTES

 %:02 MARQUES DE TALL

 %#%19bis2% definim un format de pàgina per defecte (ara A4 vertical)

 %#%19bis3% reescrivim les dades de les àrees de treball a l'XRay
 %/02 MARQUES DE TALL

 %:02 MARQUES DE TALL
 %/02 MARQUES DE TALL

 %:02 MARQUES DE TALL
 %/02 MARQUES DE TALL

 %:02 MARQUES DE TALL
 %/02 MARQUES DE TALL

 %:02 MARQUES DE TALL
 %/02 MARQUES DE TALL

 %:02 MARQUES DE TALL
 %/02 MARQUES DE TALL

 %:02 MARQUES DE TALL
 %/02 MARQUES DE TALL

 %:02 MARQUES DE TALL
 %/02 MARQUES DE TALL

 %:02 MARQUES DE TALL
 %/02 MARQUES DE TALL

 %:02 MARQUES DE TALL
 %/02 MARQUES DE TALL

 %: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ó
 %/07 REINSEREIX IMATGES JPEG

 %:09 EXTRAU IMATGES JPEG

 %#%19bis5% preparem XRay per acollir l'exportació d'imatges
 %/09 EXTRAU IMATGES JPEG

 %#%20% definim el fitxer on reescriurem els Contents x 1er cop

 %:03 CORRECTOR TIPOGRÀFIC

 %:04 ANÀLISI TEXTUAL

 %:05 dada variable

 %:08 ETIQUETA TEXT

 %:12 arbre jeràrquic

 %#%20bis% mòdul d'anàlisi i extracció de text

 %#%20bis2% de cada tipografia deduim el width+mig (la mitja de tots) x desar-lo a l'índex 4 de l'array de CalaixDeTipus
 %/12 arbre jeràrquic
 %/08 ETIQUETA TEXT
 %/05 dada variable
 %/04 ANÀLISI TEXTUAL
 %/03 CORRECTOR TIPOGRÀFIC

 %#%21% diccionari per replicar de forma idèntica els Contents (OpContents_QueLiFemFer1)

 %#%21bis% activem els valors d'índex corresponents a QueLiFemFer

 %#%21bis2% diccionari on desarem els paquets amb les 4 coordenades de posicio de totes les imatges

 %#%22% procediments de replicat idèntic dels Contents (sense comprimir) dins un fitxer

 %:02 MARQUES DE TALL

 %#%22bis2% dibuix de la creu de tall: aquesta és quadrada amb 4 braços de 30 punts (60x60) de .25 p de gruix a trams de blanc i negre que tapen
 %/02 MARQUES DE TALL

 %:06 COSIT D'IMATGES

 %#%22bis3% diccionari on desarem les ref ind de les imatges considerades frontisa (o isolades normals o claus d'un mosaic)
 %/06 COSIT D'IMATGES

 %:10 PREFLIGHT AMB CAPES

 %#%22bis4% definim el flag VectorViu i l'array de materials digitals amb els noms interns/externs de les llesques (layers) i si han estat detectats
 %/10 PREFLIGHT AMB CAPES

 %:08 ETIQUETA TEXT

 %#%22bis5% definim l'array de noms interns/externs la llesca de vincles transparents
 %/08 ETIQUETA TEXT

 %:05 dada variable

 %#%22bis6% definim el diccionari on hi haura la clau del núm de pàgina i de valor un diccionari on la clau serà nomDADAclau i el valor el nom PDF de la tipografia, per muntar el diccionari tipusDADAv haurem de fer una redefinició dels operadors Tf BDC EMC i Tj TJ ' "
 %# gatell per controlar l'activat d'operadors amb funcions de dada variable
 %/05 dada variable

 %#%23% repiquem els Contents a partir del diccionari decodificador OpContents_QueLiFemFer1

 %:04 ANÀLISI TEXTUAL

 %:12 arbre jeràrquic
 %/12 arbre jeràrquic
 %/04 ANÀLISI TEXTUAL

 %:02 MARQUES DE TALL

 %#%23bis% extraiem les dades del TrimBox per traslladar l'orígen de l'eix de coordenades i pintar les creus
 %/02 MARQUES DE TALL

 %:08 ETIQUETA TEXT

 %:12 arbre jeràrquic
 %/08 ETIQUETA TEXT

 %:02 MARQUES DE TALL
 %/02 MARQUES DE TALL

 %:08 ETIQUETA TEXT
 %/08 ETIQUETA TEXT

 %:12 arbre jeràrquic

 %:02 MARQUES DE TALL

 %#%23bis% extraiem les dades del TrimBox per traslladar l'orígen de l'eix de coordenades i pintar les creus
 %/02 MARQUES DE TALL

 %:08 ETIQUETA TEXT

 %:12 arbre jeràrquic
 %/08 ETIQUETA TEXT

 %:02 MARQUES DE TALL
 %/02 MARQUES DE TALL

 %:08 ETIQUETA TEXT
 %/08 ETIQUETA TEXT

 %:12 arbre jeràrquic

 %:02 MARQUES DE TALL

 %#%23bis% extraiem les dades del TrimBox per traslladar l'orígen de l'eix de coordenades i pintar les creus
 %/02 MARQUES DE TALL

 %:08 ETIQUETA TEXT

 %:12 arbre jeràrquic
 %/08 ETIQUETA TEXT

 %:02 MARQUES DE TALL
 %/02 MARQUES DE TALL

 %:08 ETIQUETA TEXT
 %/08 ETIQUETA TEXT

 %:12 arbre jeràrquic

 %:01 SEPARACIÓ DE TINTES

 %#%23bis2% si fem la separació de colors, sortim per que no té continguts
 %/01 SEPARACIÓ DE TINTES

 %:00 REESCRIPTURA IDEM

 %#%23bis53% aquí és on unificarem els Contents en 1 sol stream
 %/00 REESCRIPTURA IDEM

 %:00 REESCRIPTURA IDEM

 %:01 SEPARACIÓ DE TINTES

 %:02 MARQUES DE TALL

 %:03 CORRECTOR TIPOGRÀFIC

 %:04 ANÀLISI TEXTUAL

 %:05 dada variable

 %:07 REINSEREIX IMATGES JPEG

 %:08 ETIQUETA TEXT

 %:09 EXTRAU IMATGES JPEG

 %:10 PREFLIGHT AMB CAPES

 %:12 arbre jeràrquic

 %#%23bis3% reincrustem els streams reinterpretats, als seus corresponents objectes
 %/12 arbre jeràrquic
 %/10 PREFLIGHT AMB CAPES
 %/09 EXTRAU IMATGES JPEG
 %/08 ETIQUETA TEXT
 %/07 REINSEREIX IMATGES JPEG
 %/05 dada variable
 %/04 ANÀLISI TEXTUAL
 %/03 CORRECTOR TIPOGRÀFIC
 %/02 MARQUES DE TALL
 %/01 SEPARACIÓ DE TINTES
 %/00 REESCRIPTURA IDEM

 %:06 COSIT D'IMATGES

 %#%23bis4% algorisme muntador del trencaclosques
 %/06 COSIT D'IMATGES

 %:06 COSIT D'IMATGES

 %#%24% anàlisi de si hi ha trencaclosques d'imatges ...
 %/06 COSIT D'IMATGES

 %#%25% exploració de les Layers del document

 %:08 ETIQUETA TEXT
 %/08 ETIQUETA TEXT

 %:10 PREFLIGHT AMB CAPES

 %#%25bis% desem el diccionari del Catalog més nou, actualitzem a 1.5 si s'escau, i activem l'obertura de PDF amb solapa de Layers
 %/10 PREFLIGHT AMB CAPES

 %:08 ETIQUETA TEXT

 %#%25bis2% desem el diccionari del Catalog més nou, actualitzem a 1.5 si s'escau
 %/08 ETIQUETA TEXT

 %#%26% ara anem a pescar els Resources de cada plana per localitzar /XObject

 %:01 SEPARACIÓ DE TINTES

 %#%26bis% sortim, doncs ara no tractem els plomes a les separacions de color
 %/01 SEPARACIÓ DE TINTES

 %:08 ETIQUETA TEXT

 %#%26bis1% ja hem tractat abans aquest PDF amb el gatell #8?
 %/08 ETIQUETA TEXT

 %#%26bis2% sortim si no hi ha XObjects ?

 %:07 REINSEREIX IMATGES JPEG
 %/07 REINSEREIX IMATGES JPEG

 %#%27% filtrat d'arrays directes d'espai de color als XObjects

 %#%27bis% Exploració dels Form XObject donats d'alta

 %:10 PREFLIGHT AMB CAPES

 %#%27bis2% reescriurem o redefinirem l'stream del FormXObject reinterpretat, a string o a fitxer, amb les llesques (Layers) posades
 %/10 PREFLIGHT AMB CAPES

 %:07 REINSEREIX IMATGES JPEG

 %#%27bis3% aquí és on comprovem l'absència definitiva d'imatges XObject
 %/07 REINSEREIX IMATGES JPEG

 %#%28% Exploració dels Patterns i els Shadings del document

 %:01 SEPARACIÓ DE TINTES

 %#%28bis% error no controlat en la separació de colors dels Patterns i Shadings
 %/01 SEPARACIÓ DE TINTES

 %:01 SEPARACIÓ DE TINTES

 %#%28bis% error no controlat en la separació de colors dels Patterns i Shadings
 %/01 SEPARACIÓ DE TINTES

 %:01 SEPARACIÓ DE TINTES

 %#%28bis% error no controlat en la separació de colors dels Patterns i Shadings
 %/01 SEPARACIÓ DE TINTES

 %#%28bis0% aquí explorem els Shadings ...

 %:01 SEPARACIÓ DE TINTES

 %#%28bis% error no controlat en la separació de colors dels Patterns i Shadings
 %/01 SEPARACIÓ DE TINTES

 %:01 SEPARACIÓ DE TINTES

 %#%28bis% error no controlat en la separació de colors dels Patterns i Shadings
 %/01 SEPARACIÓ DE TINTES

 %:01 SEPARACIÓ DE TINTES

 %#%28bis% error no controlat en la separació de colors dels Patterns i Shadings
 %/01 SEPARACIÓ DE TINTES

 %#%28bis2% dins els nous Resources particulars dels Patterns esbrinem si hi ha /Shading

 %:01 SEPARACIÓ DE TINTES

 %#%28bis% error no controlat en la separació de colors dels Patterns i Shadings
 %/01 SEPARACIÓ DE TINTES

 %:01 SEPARACIÓ DE TINTES

 %#%28bis% error no controlat en la separació de colors dels Patterns i Shadings
 %/01 SEPARACIÓ DE TINTES

 %:01 SEPARACIÓ DE TINTES

 %#%28bis% error no controlat en la separació de colors dels Patterns i Shadings
 %/01 SEPARACIÓ DE TINTES

 %#%28bis3% definim el fitxer on reescriurem l'stream del Pattern

 %#%28bis4% farcim l'array totalRSRCS amb els diccionaris directes dels Resources dels Patterns&Shadings

 %#%29% Exploració dels Estats Gràfics del document

 %#%30% explorem els Espais de Color del document

 %#%30bis% posem l'espai de color que toca a l'array del Pattern

 %#%31% Exploració dels XObjects del document

 %#%31bis% afegim els noms dels FormXObject al dicicionari Paleta de l'espai de color corresponent
 %# i afegim també els noms com a valors de l'array TanX100

 %:07 REINSEREIX IMATGES JPEG

 %#%31bis2% modificació dels diccionaris XObject, pàgina a pàgina, sobre el mapa ordenat d'imatges cridades per Do a l'stream de Contents
 %/07 REINSEREIX IMATGES JPEG

 %#%32% Valors inicials per l'anàlisi complementari dels Espais de Color per saber ...
 %# 1. si hi ha CS amb valor zero de tinta (i quins són) i si aquest valor és sol o no
 %# 2. si hi ha CS PureCMYK

 %#%33% descabdellem totes les Tintes diferents i els seus valors perceptuals

 %#%33bis% forall per desar dins tots els noms diferents (TiV) tots els seus valors perceptuals diferents

 %#%33bis2% ara tractem l'entrada /All si hi és ...

 %#%33bis3% pentinem l'existència d'alguna de les Tintes /Cyan/Magenta/Yellow/Black (Process Colors)
 %# doncs en el cas que n'hi hagi alguna de creada, All (pel que sembla) força la creació de la resta, per dipositar-hi també els seus valors

 %#%33bis4% Tintes que només existeixen com a /Separation i que cal donar d'alta per l'acció de /All? (ara se'm presenta el dubte de que si no existís All també hauríem d'actuar així o no)
 %# per solucionar el cas 21_8034.pdf
 %# com que All actúa, mirem si existeix algun color a /Separacions que no haguem donat d'alta a TiV (ni a EspaisDeColor?)

 %#%33bis4bis% degut a que les imatges (XObject+inLine) descrites amb DeviceGray les donem d'alta com si fossin CMYK, activem
 %# un filtre per eliminar de TiV totes les imatges (XObject+inLine) DeviceGray que estiguin referenciades fora de Black
 %# doncs si no es produiria un error en el procés de separació de colors %43

 %#%33bis5% eliminem qualsevol Tinta que només dugui valor zero

 %#%34% escriptura del fitxer XRay (segona part)

 %#%35% filtrat d'errades a XRay per determinar què fem ...

 %:09 EXTRAU IMATGES JPEG

 %#%35bis% mòdul exportador d'imatges a RGB pur
 %/09 EXTRAU IMATGES JPEG

 %:12 arbre jeràrquic

 %:04 ANÀLISI TEXTUAL
 %/04 ANÀLISI TEXTUAL
 %/12 arbre jeràrquic

 %:12 arbre jeràrquic
 %/12 arbre jeràrquic

 %:04 ANÀLISI TEXTUAL

 %#%35bis1% repiquem el mapa d'exportació de vincles al txt, segons convencions ...
 %/04 ANÀLISI TEXTUAL

 %:01 SEPARACIÓ DE TINTES

 %#%35bis2% aquí decidirem si fem el repicat del PDF, sempre que NO fem l'opció 9 o 4

 %#%36% analitzem a fons tots els estats gràfics per controlar l'Overprint i preparar-nos a fer els Previews

 %#%37% Analitzem ara el diccionari especial csZero dels Espais de Color per saber ...
 %# 1. si hi ha CS amb valor zero de tinta o no
 %# 2. si el valor de color zero es únic o no
 %# 3. si és DeviceN o PureCMYK
 %/01 SEPARACIÓ DE TINTES

 %:01 SEPARACIÓ DE TINTES

 %:08 ETIQUETA TEXT

 %:10 PREFLIGHT AMB CAPES

 %#%38% inici del depurador de l'estructura de Layers
 %# aquest depurador cal tenir en compte que només actua sobre unes determinades entrades (/OCProperties /Properties /D)
 %# doncs per desactivar l'estructura ja es suficient, però donada la complexitat d'aquest apartat les anirem incorporant
 %# progressivament com a profilaxi de continguts inútils a mida que ens faci falta

 %#%38bis% esborrem de COMdimoni els objectes indirectes depurats al desmuntar l'estructura de Layers
 %/10 PREFLIGHT AMB CAPES
 %/08 ETIQUETA TEXT
 %/01 SEPARACIÓ DE TINTES

 %:01 SEPARACIÓ DE TINTES

 %:05 dada variable

 %#%39% clonarem els diccionaris trencats del PDF per ComDimoni per poder reescriure cada vegada
 %# el PDF de sortida amb les mateixes condicions
 %/05 dada variable
 %/01 SEPARACIÓ DE TINTES

 %:01 SEPARACIÓ DE TINTES

 %:05 dada variable

 %:06 COSIT D'IMATGES

 %:10 PREFLIGHT AMB CAPES

 %:12 arbre jeràrquic

 %#%40% segon diccionari de repicat de Contents (versió revisada fins la 1.7)

 %#%40bis% activem els valors d'índex corresponents a QueLiFemFer
 %# per activar la corresponent redefinició de cada operador
 %/12 arbre jeràrquic
 %/10 PREFLIGHT AMB CAPES
 %/06 COSIT D'IMATGES
 %/05 dada variable
 %/01 SEPARACIÓ DE TINTES

 %:01 SEPARACIÓ DE TINTES

 %#%41% separem Patterns&Shadings

 %#%42% fem la separació de colors de totes les imatges

 %#%42bis% esborrem a cada tinta de FotoCrom els noms de les imatges que ja hem donat de baixa d'JectesXclon

 %#%42bis2% generem un paquet per renombrar parcialment el(s) PDF(s) i afegir al Subject
 %# segons la quantitat de fitxers PDF que haguem de reescriure (opcions 01 i 05)
 %# on si fem (01) separarem les tintes per un determinat ordre ...
 %# ... de moment ens interessa ordenar primer les tintes que duen Shadings pel davant
 %# de les que no en duen, doncs aixó afecta a l'estabilitat de modificació dels diccionaris
 %# dels Shadings, funcions de tipus 3 i tipus 2. Paràmetres com ColorSpace, C0/C1 i Range
 %# es veuen afectats per l'odre en que se'n modifica el contingut
 %/01 SEPARACIÓ DE TINTES

 %:05 dada variable

 %#%42bis3% bastim /TNTSxORDRE amb tots els noms únics per reescriure els PDF de dada variable
 %# i generem el paquet DADAmestre amb tots els continguts de dada variable per reincrustar
 %# índex per llegir l'array DADAmestre contenint una array de dades per fitxer a reescriure
 %/05 dada variable

 %:00 REESCRIPTURA IDEM

 %:01 SEPARACIÓ DE TINTES

 %:02 MARQUES DE TALL

 %:03 CORRECTOR TIPOGRÀFIC

 %:05 dada variable

 %:06 COSIT D'IMATGES

 %:07 REINSEREIX IMATGES JPEG

 %:08 ETIQUETA TEXT

 %:10 PREFLIGHT AMB CAPES

 %:12 arbre jeràrquic

 %#%43% reescriptura de fitxers
 %# separació de tintes: un PDF de sortida per a cada una de les Tintes
 %# dada variable: un PDF de sortida per cada registre de dada variable
 %# la resta d'opcions només generen un sol fitxer de sortida
 %/12 arbre jeràrquic
 %/10 PREFLIGHT AMB CAPES
 %/08 ETIQUETA TEXT
 %/07 REINSEREIX IMATGES JPEG
 %/06 COSIT D'IMATGES
 %/05 dada variable
 %/03 CORRECTOR TIPOGRÀFIC
 %/02 MARQUES DE TALL
 %/01 SEPARACIÓ DE TINTES
 %/00 REESCRIPTURA IDEM

 %:01 SEPARACIÓ DE TINTES

 %#%43bis% hi ha alguna imatge? (XObject o inLine), doncs en aquest punt és on n'hem de modificar
 %# el diccionari /Filter /XIU /Decode[0 1] /Length i /ColorSpace per activar la seva separació

 %#%43bis2% aquí és on modificarem l'stream dels dics dels Patterns&Shadings x separar la Tinta que llistem
 %/01 SEPARACIÓ DE TINTES

 %:00 REESCRIPTURA IDEM

 %:01 SEPARACIÓ DE TINTES

 %:02 MARQUES DE TALL

 %:03 CORRECTOR TIPOGRÀFIC

 %:05 dada variable

 %:06 COSIT D'IMATGES

 %:07 REINSEREIX IMATGES JPEG

 %:08 ETIQUETA TEXT

 %:10 PREFLIGHT AMB CAPES

 %:12 arbre jeràrquic

 %#%44% filtrem el nom de: el PDF a reescriure o la Tinta a separar
 %/01 SEPARACIÓ DE TINTES

 %#%45% posem el farcidor de _ per als caràcters indesitjables

 %#%46% redefinició dels path i els índex pel repicat dels nous streams

 %#%47% tanquem fitxers per profilaxi (és necessari?)

 %#%48% donem de baixa l'única entrada que no és un objecte
 %/12 arbre jeràrquic
 %/10 PREFLIGHT AMB CAPES
 %/08 ETIQUETA TEXT
 %/07 REINSEREIX IMATGES JPEG
 %/06 COSIT D'IMATGES
 %/05 dada variable
 %/03 CORRECTOR TIPOGRÀFIC
 %/02 MARQUES DE TALL
 %/01 SEPARACIÓ DE TINTES
 %/00 REESCRIPTURA IDEM

 %:01 SEPARACIÓ DE TINTES

 %#%48bis# aquí donem de baixa l'entrada /Range a uns objectes, que si hi són, no hi havia manera d'esborrar-la abans
 %/01 SEPARACIÓ DE TINTES

 %:00 REESCRIPTURA IDEM

 %:01 SEPARACIÓ DE TINTES

 %:02 MARQUES DE TALL

 %:03 CORRECTOR TIPOGRÀFIC

 %:05 dada variable

 %:06 COSIT D'IMATGES

 %:07 REINSEREIX IMATGES JPEG

 %:08 ETIQUETA TEXT

 %:10 PREFLIGHT AMB CAPES

 %:12 arbre jeràrquic

 %#%49% busquem el número del darrer objecte actiu (QuiEsAra) i del primer (elPrimer)

 %#%49bis% tractem el Subject + Title + Author + Creator + CreationDate/ModDate de l'Info ...

 %#%49bis2% definim el contingut del Subject del DocInfo
 %/12 arbre jeràrquic
 %/10 PREFLIGHT AMB CAPES
 %/08 ETIQUETA TEXT
 %/07 REINSEREIX IMATGES JPEG
 %/06 COSIT D'IMATGES
 %/05 dada variable
 %/03 CORRECTOR TIPOGRÀFIC
 %/02 MARQUES DE TALL
 %/01 SEPARACIÓ DE TINTES
 %/00 REESCRIPTURA IDEM

 %:00 REESCRIPTURA IDEM

 %:01 SEPARACIÓ DE TINTES

 %:02 MARQUES DE TALL

 %:03 CORRECTOR TIPOGRÀFIC

 %:05 dada variable

 %:06 COSIT D'IMATGES

 %:07 REINSEREIX IMATGES JPEG

 %:10 PREFLIGHT AMB CAPES

 %:12 arbre jeràrquic
 %/12 arbre jeràrquic
 %/10 PREFLIGHT AMB CAPES
 %/07 REINSEREIX IMATGES JPEG
 %/06 COSIT D'IMATGES
 %/05 dada variable
 %/03 CORRECTOR TIPOGRÀFIC
 %/02 MARQUES DE TALL
 %/01 SEPARACIÓ DE TINTES
 %/00 REESCRIPTURA IDEM

 %:00 REESCRIPTURA IDEM

 %:01 SEPARACIÓ DE TINTES

 %:02 MARQUES DE TALL

 %:03 CORRECTOR TIPOGRÀFIC

 %:05 dada variable

 %:06 COSIT D'IMATGES

 %:07 REINSEREIX IMATGES JPEG

 %:08 ETIQUETA TEXT

 %:10 PREFLIGHT AMB CAPES

 %:12 arbre jeràrquic

 %#%49bis3% generem o redefinim PieceInfo per segellar l'ús de CaLi2CoPi
 %/12 arbre jeràrquic
 %/10 PREFLIGHT AMB CAPES
 %/08 ETIQUETA TEXT
 %/07 REINSEREIX IMATGES JPEG
 %/06 COSIT D'IMATGES
 %/05 dada variable
 %/03 CORRECTOR TIPOGRÀFIC
 %/02 MARQUES DE TALL
 %/01 SEPARACIÓ DE TINTES
 %/00 REESCRIPTURA IDEM

 %:05 dada variable
 %/05 dada variable

 %:12 arbre jeràrquic
 %/12 arbre jeràrquic

 %:01 SEPARACIÓ DE TINTES

 %#%50% definim el fitxer on reescriurem els Contents repicats aplicant el tractament a través de les redefinicions d'OpContents_QueLiFemFer#

 %#%51% procediments de replicat idèntic dels Contents (sense comprimir) dins un fitxer

 %#%51bis% procediment de replicat idèntic de l'stream de Contents dels Form XObject (sense comprimir) dins un fitxer

 %#%52% reinterpretem els Contents unificats en un sol fitxer per fer-li el tractament
 %/01 SEPARACIÓ DE TINTES

 %:05 dada variable

 %:06 COSIT D'IMATGES

 %:10 PREFLIGHT AMB CAPES

 %:12 arbre jeràrquic

 %#%52bis.5.0% gatell per controlar l'activat d'operadors amb funcions de dada variable

 %#%52bis.6.0% inicialitzem novament el valor de l'array dels diccionaris de /EstatGrafic

 %#%52bis.6.1% definim el fitxer on reescriurem els Contents repicats aplicant el tractament a traves de les redefinicions d'OpContents_QueLiFemFer#

 %#%52bis.6.2% procediments de replicat idèntic dels Contents (sense comprimir) dins un fitxer
 %/10 PREFLIGHT AMB CAPES

 %#%52bis.6.3% generem el diccionari KaMPoRa amb totes les imatges d'una mateixa pàgina a eliminar

 %:10 PREFLIGHT AMB CAPES

 %:12 arbre jeràrquic

 %:12 arbre jeràrquic

 %:12 arbre jeràrquic

 %:12 arbre jeràrquic

 %:12 arbre jeràrquic
 %/10 PREFLIGHT AMB CAPES

 %#%52bis.6.4% algorisme culcosit

 %:10 PREFLIGHT AMB CAPES
 %/06 COSIT D'IMATGES

 %#%52bis.6.5% aquí repicarem els streams dels Forms recursius
 %# atenció que a 52.bis tindríem l'oportunitat de repicar x tercer cop els streams dels Forms (ara només si fem 1)
 %# repiquem l'stream de cada Form per primer o segon cop (semblant a %23)

 %:06 COSIT D'IMATGES

 %:05 dada variable
 %/12 arbre jeràrquic
 %/10 PREFLIGHT AMB CAPES
 %/06 COSIT D'IMATGES
 %/05 dada variable

 %:01 SEPARACIÓ DE TINTES

 %#%52bis% reescriurem l'stream del Form XObject repicat aplicant el tractament a través de les redefinicions d'OpContents_QueLiFemFer#

 %#%53% aquí és on unificarem els Contents en un sol stream
 %/01 SEPARACIÓ DE TINTES

 %:10 PREFLIGHT AMB CAPES

 %:08 ETIQUETA TEXT

 %#%53bis% incrustem l'estructura de llesques (layers) per la verificació
 %/10 ETIQUETA TEXT

 %:10 ETIQUETA TEXT
 %/08 ETIQUETA TEXT

 %:08 ETIQUETA TEXT
 %/10 ETIQUETA TEXT

 %:10 ETIQUETA TEXT
 %/08 ETIQUETA TEXT
 %/10 PREFLIGHT AMB CAPES

 %:08 ETIQUETA TEXT

 %#%53bis2% generem l'estat gràfic pels objectes transparents i tot el seu mapa de vincles
 %/08 ETIQUETA TEXT

 %:08 ETIQUETA TEXT

 %#%53bis3% ... com en el cas del projecte JBC, és la DLL qui controla el nom i el path del fitxer de sortida
 %/08 ETIQUETA TEXT

 %:00 REESCRIPTURA IDEM

 %:01 SEPARACIÓ DE TINTES

 %:02 MARQUES DE TALL

 %:03 CORRECTOR TIPOGRÀFIC

 %:05 dada variable

 %:06 COSIT D'IMATGES

 %:07 REINSEREIX IMATGES JPEG

 %:08 ETIQUETA TEXT

 %:10 PREFLIGHT AMB CAPES

 %:12 arbre jeràrquic

 %#%54% fitxer on reconstruirem el PDF

 %#%55% aquí s'inicia la reescriptura del PDF

 %#%56% just abans podríem donar d'alta als nous objectes
 %/12 arbre jeràrquic
 %/10 PREFLIGHT AMB CAPES
 %/08 ETIQUETA TEXT
 %/07 REINSEREIX IMATGES JPEG
 %/06 COSIT D'IMATGES
 %/05 dada variable
 %/03 CORRECTOR TIPOGRÀFIC
 %/02 MARQUES DE TALL
 %/01 SEPARACIÓ DE TINTES
 %/00 REESCRIPTURA IDEM

 %:01 SEPARACIÓ DE TINTES

 %:05 dada variable

 %#%57% restaurem els diccionaris trencats de ComDimoni a partir del clònic
 %/05 dada variable
 %/01 SEPARACIÓ DE TINTES

 %:00 REESCRIPTURA IDEM

 %:01 SEPARACIÓ DE TINTES

 %:02 MARQUES DE TALL

 %:03 CORRECTOR TIPOGRÀFIC

 %:05 dada variable

 %:06 COSIT D'IMATGES

 %:07 REINSEREIX IMATGES JPEG

 %:08 ETIQUETA TEXT

 %:10 PREFLIGHT AMB CAPES

 %:12 arbre jeràrquic

 %#%58% hem canviat l'estratègia i esborrarem els temporals al principi
 %# ara només informarem que hi queden temporals (demanarem a la DLL que acabi de netejar si cal)

 %#%59% fitxer TXT de control final del resultat pel web+PHP
 %/12 arbre jeràrquic
 %/10 PREFLIGHT AMB CAPES
 %/08 ETIQUETA TEXT
 %/07 REINSEREIX IMATGES JPEG
 %/06 COSIT D'IMATGES
 %/05 dada variable
 %/03 CORRECTOR TIPOGRÀFIC
 %/02 MARQUES DE TALL
 %/01 SEPARACIÓ DE TINTES
 %/00 REESCRIPTURA IDEM