Generator de Fisiere Pdf
LUCRARE DE LICENȚĂ
GENERATOR DE FIȘIERE PDF
Cuprins
Introducere
Capitolul 1. Formatul PDF
1.1 Istoria formatului PDF
1.2 Specificațiile Adobe
1.3 Standardizarea ISO
1.4 Subseturi standardizate ale PDF-urilor
1.5 Versiunile PDF 1.7 și 2.0
1.5.1 PDF 1.7
1.5.2 PDF 2.0
1.5.3 Structura ISO TC 171 SC 2 WG 8
1.6 Fundamente tehnice
1.6.1 Limbajul PostScript
1.6.1 Structura fișierului
1.6.2 Modul de reprezentare al imaginilor
1.6.3 Grafica vectorială
1.6.4 Imagini rasterizate
1.6.5 Text
1.6.6 Fonturi
Capitolul 2. Mediul de dezvoltare Eclipse
2.1 Generalități
2.2 Istoric
2.3 Versiuni
2.4 Arhitectură
2.5 Platforme
2.5.1 Rich Client Platform
2.5.2 Server Platform
2.5.3 WebTools Platform
2.5.4 Modeling Platform
2.6 Extensii
Capitolul 3. Librăria PDFlib
3.1 Introducere
3.1.1 PDFlib
3.1.2 PDFlib+PDI
3.1.3 PDFlib Personalizat ion Server (PPS) și Plug-inul PDFlib Block
Capitolul 4. Aplicația ”PDF Creator”
4.1 Comparație între PDF creator și alte aplicații similare
4.2 Descrierea aplicației ”PDF Creator”
4.3 Măsurători ale timpilor necesari creării fișierelor
4.3.1 Numărul de fișiere vs numărul de obiecte
4.3.2 Tipul obiectelor
4.3.3 Fișiere color vs alb-negru
4.3.4 Dimensiuni fișier
Concluzii
Bibliografie
Introducere
Compania în care lucrez, SC. Océ Software S.R.L. are o tradiție îndelungată în domeniul imprimării profesionale. Fiind membru în echipa de testare a software-lui folosit la imprimare am întâlnit problema lipsei unei baze destul de mari de fișiere pentru teste. Acest lucru împreună cu lipsa de pe piață a unei aplicații care să ofere un mod ușor și rapid de generare a fișierelor PDF a dus la crearea aplicației ”PDF Creator”.
Aplicația are performanțe ridicate fiind capabilă să creeze 10.000 de fișiere cu 1000 de obiecte într-un timp aproximativ 13 minute. Datorită acestui fapt sarcina echipei de testare de a crea fișiere de test a devenit simplă, reducându-se semnificativ timpii necesari, care puteau fi considerați timpi morți.
Fișierele de tip PDF constituie la ora actuală cel mai folosit și răspândit tip de fișier folosit la crearea, vizualizarea și imprimarea de documente. Acest fapt se datorează mai multor factori:
universalitate – fișierele de tip PDF sunt independente de platforma pe care au fost create/vizualizate/imprimate. Un fișier PDF, indiferent dacă a fost creat pe o mașină cu sistem de operate Windows, OSX, Unix, va fi compatibil cu restul platformelor;
securitate – fișierele de tip PDF pot fi protejate pe mai multe nivele. Ele pot fi protejate la deschidere, citire, scriere, imprimare, sau copiere a conținutului;
dimensiuni reduse datorită algoritmilor de compresie folosiți;
multitudinea de programe gratuite pentru citirea sau scrierea documentelor.
Necesitatea acestei aplicații a apărut datorită faptului că în cazul imprimării profesionale timpii necesari pentru transmiterea și procesarea documentelor sunt esențiali. Am vrut să putem crea fișiere al căror conținut să fie controlat în totalitate pentru a putea stabili cu exactitate care parametrii influențează și modul în care aceștia o fac, timpii de procesare și de imprimare.
Aplicația este creată cu scopul de a putea reproduce cât mai exact modelul de fișiere folosit de clienții noștii. Datorită faptului că aceștia imprimă doar planșe CAD posibilitatea de a genera text nu a fost inclusă în aplicație.
Pentru realizarea acestei aplicații am folosit mediul de dezvoltare Java Eclipse, la care am adăugat librăria PDFlib, această librărie oferă posibilitatea de a genera fișiere de tip PDF.
În primă fază am căutat aplicații similare, gratuite, datorită faptului că nu am găsit nicio aplicație care să corespundă cerințelor mele cu privire la modul de generare al fișierelor am decis să creez aplicația, pentru a putea controla modul în care aceasta lucrează.
Înainte de a crea această aplicație am folosit pentru testare fișiere obținute de la clienții noștri. În acest mod am creat o bază de date conținând 2156 de fișiere. Deși pare un număr suficient de fișiere pentru testare, aceste fișiere prezintă un dezavantaj major: conform bazelor testării nu este indicat să se folosească aceleași fișiere de test o perioadă îndelungată de timp datorită faptului că după o perioadă de timp repetând aceleași teste cu aceleași fișiere nu vor mai duce la descoperirea unor probleme noi.
Din acest motiv era necesar ca echipa să aibă posibilitatea de a crea fișiere noi, care să îndeplinească anumite condiții legate de structură (formatul paginii, numărul de pagini, numărul de layere) și complexitate (numărul și tipul obiectelor conținute, fișiere color sau alb-negru).
Datorită factorilor menționați anterior crearea unei asemenea aplicații era necesară.
Capitolul 1. Formatul PDF
1.1 Istoria formatului PDF
Foarte apreciat datorită potențialului său tehnologic, formatul PDF, așa cum există el astăzi, a evoluat dintr-un limbaj deja existent cunoscut sub numele de PostScript[1]. Când limbajului descriptiv i-a fost rafinată structura și conceptul, noi idei pentru tehnologia nou dezvoltată au fost publicate in lucrarea „Camelot”, scrisă in 1991 de specialistul în calculatoare, și viitor co-fondator Adobe, Dr. John E. Warnock.[2] Din ideile documentate de el în această lucrare au apărut primele concepte ale formatului PDF.
Formatul PDF a fost dezvoltat ca o cale de a partaja documente care includeau formatare de text, imagini, între utilizatorii de calculatoare cu platforme diferite, care nu aveau acces la un software compatibil. La început a avut un număr mare de competitori, de exemplu: DjVu, Envoy, Farallon Replica. În acei primi ani înaintea de ascensiunea WorldWideWeb-ului și a documentelor HTML, PDF-ul a devenit popular mai ales în tehnoredactarea computerizată a documentelor.
În prima etapă a adoptării formatului, asimilarea lui a fost una lentă. Pachetul Adobe Acrobat pentru citirea și crearea PDF-urilor nu era gratuit și accesibil, primele versiuni nu suportau link-uri externe, astfel utilizabilitatea lui pe Internet era redusă; dimensiunea mare a fișierelor PDF, comparativ cu documentele „plain text” necesita timpi de descărcare mai mari datorită echipamentelor modem, foarte populare la acea vreme, iar randarea fișierelor de tip PDF era înceată pe mașinile mult mai încete decât cele din ziua de azi.
De la versiunea 2.0 înainte, Adobe a început să distribuie programul de citit PDF-uri, Acrobat Reader (acum Adobe Reader), gratuit și a continuat să suporte formatul original PDF, care în cele din urmă a devenit standardul pentru documentele electronice cu format fix.
În 2008 Adobe System’s Reference 1.7 a devenit standardul ISO 32000:1:2008.[3] De acum înainte viitoarele dezvoltări ale formatului PDF (inclusiv PDF 2.0) este în concordanță cu standardul ISO TC 171 SC 2 WG8 și cu participarea Adobe System’s și al altor experți în domeniu.
1.2 Specificațiile Adobe[4]
Între 1993 – 2006 Adobe Systems a schimbat specificațiile formatului PDF în câteva rânduri pentru a adăuga funcționalități noi. Numeroase aspecte ale extensiilor Adobe Levels publicate după 2006 au fost acceptate în schițe funcționale ale ISO 32000-2 (PDF 2.0), dar dezvoltatorii sunt atenționați asupra faptului că Extensiile Adobe nu sunt parte a standardului PDF.
Standardul ISO 32000-1:2008 și Adobe PDF versiunea 1.7 sunt consistente din punct de vedere tehnic. Adobe a declarat că nu va produce o referință pentru PDF 1.8. Viitoare versiuni ale specificațiilor PDF vor fi produse de comitetul tehnic ISO. Cu toate acestea, Adobe a publicat documentație în care specifică care dintre funcționalitățile extinse pentru PDF , dincolo de standardul ISO 32000-1 (PDF 1.7), sunt suportate în produsele nou lansate.
Toate versiunile noi ale specificațiilor PDF includ versiunile din urmă. Specificațiile pentru versiunea PDF 1.7 include toate specificațiile de la versiunile 1.0 la 1.6. Când Adobe a scos anumite funcționalități ale PDF din standardul lor, au fost scoase și din ISO 32000-1 de asemenea. Unele funcționalități sunt marcate ca învechite.
Documentele PDF conforme cu standardul ISO 32000-1 au versiunea PDF 1.7. Documentele care conțin funcționalități extinse Adobe au tot versiunea 1.7 dar totodată mai conțin și un indicator care spune ce extensie a fost urmărită în timpul creării documentului.[5]
1.3 Standardizarea ISO
Începând cu anul 1995, Adobe a participat în mai multe grupuri de lucru care au creat specificațiile tehnice pentru a fi publicate de către ISO și a cooperat în cadrul procesului ISO pentru subseturi specifice standardului PDF pentru crearea versiunilor specializate pentru industrie (PDF/X sau PDF/A). Scopul subseturilor specializate ale specificațiilor complete este de a elimina acele funcționalități care nu sunt necesare sau care pot crea probleme pentru scopuri precise, sau care necesită folosirea anumitor funcționalități care sunt doar opționale în specificațiile PDF complete.
La data de 29 ianuarie 2007, Adobe a anunțat ca va emite specificațiile complete ale Portable Document Format (PDF) către American National Standards Institute (ANSI) și către Enterprise Content Management Association (AIIM), cu scopul de a fi publicate de către International Organization for Standardization (ISO). ISO va produce versiunile viitoare ale specificațiilor PDF iar Adobe va fi doar unul dintre membrii comitetului tehnic al ISO.[6]
Specificațiile ISO pentru funcționalitatea complete ale formatului PDF sunt publicate sub numărul ISO 32000. Specificațiile complete ale formatului PDF înseamnă că nu doar unul dintre subseturile specificațiilor Adobe PDF sunt incluse ci toată funcționalitatea definită în standardul ISO 32000-1 este inclusă în PDF 1.7. Cu toate acestea, Adobe a publicat mai târziu extensii care nu sunt incluse în standardul ISO. Mai sunt de asemenea funcționalități cu alți proprietari în specificațiile PDF, acestea sunt referite doar ca specificații externe .
1.4 Subseturi standardizate ale PDF-urilor
Următoarele subseturi specializate ale specificațiilor formatului PDF au fost standardizate ca standard ISO sau sunt în curs de standardizare.
PDF/X (începând cu anul 2001 – seria de standarde ISO 15929 și ISO 15930) sunt denumite ca ”PDF-uri pentru schimburi (PDF for exchange) și sunt pentru tehnologia grafică – Schimb de date pentru pretipărirea digitală (Graphic technology – Prepress digital data exchange ) ” – (comitetul tehnic ISO 130) sunt bazate pe versiunile PDF 1.3, PDF 1.4 și mai târziu și pe versiunea PDF 1.6
PDF/A (începând cu anul 2005 – seria de standard ISO 19005) denumite PDF-uri pentru arhivare – Management de documente – Format de fișiere electronic pentru păstrare îndelungată – (comitetul tehnic ISO 171), sunt bazate pe versiunile PDF 1.4 și mai târziu pe ISO 32000-1 – PDF 1.7
PDF/E (începând cu anul 2008 – ISO24517) – denumit ”PDF pentru inginerie” – Management de documente – Format de document pentru inginerie folosind PDF (comitetul tehnic ISO 171), bazat pe versiunea PDF 1.6
PDF/VT (începând cu anul 2010 – ISO16612-2) – denumit ”PDF pentru schimb de date variabile și imprimare tranzacțională” – Tehnologie grafică – Schimb de date variabile (comitetul tehnic ISO 130) bazat pe versiunea PDF 1.6, cu restricții date de PDF/X-4 și PDF/X-5
PDF/UA (începând cu anul 2012 – ISO 14289-1) denumit ”PDF pentru acces universal” – Aplicații de management de documente – Format electronic de document pentru accesibilitate îmbunătățită (comitetul tehnic ISO 171), bazat pe Versiunea PDF 1.7 – ISO 32001-1
Mai există, de asemenea PDF/H denumit PDF pentru servicii de sănătate, bazat pe un ghid de ”bune practici” (BPG) suplimentat cu un ghid de implementare (IG), publicat în 2008. PDF/H nu este un standard sau un standard propus, ci doar un ghid de folosire cu standardele actuale. BPG pentru PDF/H este bazat pe versiunea PDF 1.6.[7]
1.5 Versiunile PDF 1.7 și 2.0
1.5.1 PDF 1.7
Ultima versiune finală și revizuită a documentației pentru PDF 1.7 a fost aprobată de Comitetul.7
PDF/E (începând cu anul 2008 – ISO24517) – denumit ”PDF pentru inginerie” – Management de documente – Format de document pentru inginerie folosind PDF (comitetul tehnic ISO 171), bazat pe versiunea PDF 1.6
PDF/VT (începând cu anul 2010 – ISO16612-2) – denumit ”PDF pentru schimb de date variabile și imprimare tranzacțională” – Tehnologie grafică – Schimb de date variabile (comitetul tehnic ISO 130) bazat pe versiunea PDF 1.6, cu restricții date de PDF/X-4 și PDF/X-5
PDF/UA (începând cu anul 2012 – ISO 14289-1) denumit ”PDF pentru acces universal” – Aplicații de management de documente – Format electronic de document pentru accesibilitate îmbunătățită (comitetul tehnic ISO 171), bazat pe Versiunea PDF 1.7 – ISO 32001-1
Mai există, de asemenea PDF/H denumit PDF pentru servicii de sănătate, bazat pe un ghid de ”bune practici” (BPG) suplimentat cu un ghid de implementare (IG), publicat în 2008. PDF/H nu este un standard sau un standard propus, ci doar un ghid de folosire cu standardele actuale. BPG pentru PDF/H este bazat pe versiunea PDF 1.6.[7]
1.5 Versiunile PDF 1.7 și 2.0
1.5.1 PDF 1.7
Ultima versiune finală și revizuită a documentației pentru PDF 1.7 a fost aprobată de Comitetul Tehnic al ISO nr. 171 în ianuarie 2008 și a fost publicat ca și ISO 32000-1:2008 și s-a numit Document management – Portable document format Part 1: PDF1.7
ISO 32000-1:2008 este primul standard ISO pentru PDF ce conținut toată funcționalitatea. Standardele precedente (PDF/A, PDF/X, etc.) erau destinate folosirii mult mai specializate. ISO 32000-1 include toate funcționalitățile documentate în specificațiile Adobe PDF de la versiunile 1.0 la 1.6. Adobe a scos anumite funcționalități din versiunile PDF anterioare; aceste funcționalități nu sunt conținute in PDF 1.7.
Documentul ISO 32000-1 a fost creat de către Adobe Systems Incorporated bazat pe PDF Reference, ediția a șasea și pe Adobe Portable Document Format versiunea 1.7 din noiembrie 2006. A fost revizuit, editat și adoptat în urma unei proceduri rapide speciale de către Comitetul tehnic ISO 171 (ISO/TC 171), aplicație pentru management de documente, Subcomitetul SC2, în paralel cu aprobarea de către comitetul ISO.
Conform standardului ISO pentru PDF:
ISO 32000-1:2008 specifică o formă digitală de reprezentare a documentelor electronice, independent de mediul de în care au fost create, vizualizat sau tipărit. Este destinat dezvoltatorilor de programe care creează fișiere PDF, programelor care citesc și interpretează conținutul PDF-ul pentru afișare și interacțiuni, și a produselor care scriu și/sau citesc fișiere PDF pentru alte scopuri.
Câteva specificații care sunt sub controlul Adobe Systems ( Adobe acrobat, JavaScript sau arhitectura formurilor XML) sunt referințe normative ale ISO 32000-1 și sunt indispensabile pentru aplicarea standardului ISO 32000-1.
1.5.2 PDF 2.0
O nouă versiune a standardului PDF este încă în dezvoltare sub același nume ISO/CD 32000-2 Management de documente – Formatul documentelor portabile – Partea a 2-a: PSD 2.0 (începând cu luna august 2013).
PDF 2.0 a fost acceptat de către ISO ca o propunere nouă în anul 2009 (ISO/NP 32000-2). Comitetul tehnic 171 SC2 WG 8 care lucrează la ISO 32000-2 (PDF 2.0) continuă să dezvolte documentul; procesând sute de cerințe tehnice și operând 8 comitete ad-hoc formate din numeroși parteneri interesați de document, printre care și Adobe Systems. Pentru a oferi mai mult timp pentru dezvoltarea documentației, proiectul ISO original a fost anulat în 2012 și în locul său a fost început un nou proiect.
Adobe a trimis specificațiile conținute în Adobe Extension Level 5 și Adobe Extension Level 3 către ISO pentru a fi incluse în specificațiile ISO 32000-2, dar doar o parte din funcționalitățile noi propuse de către ei au fost acceptate.
Scopul comitetului ISO care dezvoltă PDF 2.0 include fiecare îmbunătățire și rafinare a limbajului PDF dar și scoaterea funcționalităților care nu mai sunt folosite ( ex: Form Xobject) și standardizarea specificațiilor aflate în proprietatea Adobe (Adobe JavaScript, Rich Text).
PDF 2.0 va conține XML Forms Arhitecture 3.1. În 2011 comitetul ISO a forțat Adobe Systems să trimită specificațiile XFA (XML Forms Arhitecture) către ISO pentru standardizare și a cerut ca Adobe Systems să stabilizeze specificațiile XFA. Comitetul ISO și-a exprimat îngrijorarea față de stabilitatea specificațiilor XFA.[11]
1.5.3 Structura ISO TC 171 SC 2 WG 8
Constituit în 2008 ca să transforme PDF Reference într-un standard ISO, Grupul de Lucru 8 se întâlnește de 2 ori pe an, cu membrii din alte 10 țări. Întâlnirile cometului ISO pentru ISO 32000 sunt deschise pentru toți experții în domeniu. Grupurile interesate de acest standard trebuie să contacteze membrii ISO atribuiți lor pentru informații despre modul de a se alătura ISO 32000
Conducerea actuală a proiectului este formată, în prezent, din Cherie Ekholm de la Microsoft și Duff Johnson, consultând independent.
În trecut conducerea proiectului a fost atribuită lui James King de la Adobe Systems.
Secretarul ISO: Betsy Fanning de la AIIM.
1.6 Fundamente tehnice
Oricine poate crea aplicații care pot citi și scrie fișiere PDF fără a fi nevoit să plătească drepturi de autor către Adobe Systems; Adobe deține patentul pentru formatul PDF, dar oferă gratuit licențe folosite în crearea de programe care respectă standardul PDF.
Formatul PDF combină 3 tehnologii:
Un subset al limbajului de programare PostScript, care creează layout-ul și grafica.
Un sistem de includere/înlocuire a fonturilor care sunt încorporate în document și sunt transmise cu acesta.
Un sistem structurat de stocare ca să încorporeze aceste elemente și orice conținut asociat într-un singur fișier, în plus oferă compresie a datelor acolo unde este cazul.[12]
1.6.1 Limbajul PostScript
PostScript este un limbaj de programare de descriere a paginilor, care rulează într-un interpretator care generează o imagine, acest proces consumă multe resurse. Poate lucra cu mult mai mult decât grafică, dar și funcționalități standard ale limbajelor de programare, cu ar fi instrucțiunile ”if” și ”loop”. PDF este bazat în mare parte pe limbajul PostScript, dar simplificat pentru a înlătura funcționalități de control ca aceasta, în timp ce comenzi grafice , de exemplu ”lineto” sunt păstrate.
Foarte des, cod PDF este generat dintr-un fișier PostScript. Comenzile pentru grafică care sunt ieșirea codului PostScript sunt colectate și li se oferă un token; toate fișierele, grafica, sau fonturile la care documentul face referire de asemenea sunt colectate, apoi totul este comprimat într-un singur fișier.
Ca format destinat documentelor, formatul PDF are mai multe avantaje față de PostScript:
PDF-ul conține rezultate ce sunt interpretate și au un token atribuit ale codului sursă PostScript, pentru corespondență directă între schimbările apărute în descrierea paginilor PDF la nivel de cod și modul cum aceste schimbări sunt reflectate.
PDF (de la versiunea 1.4) suportă transparență grafică. PostScript nu suportă.
PostScript este un limbaj interpretat, cu o stare globală generală, adică instrucțiunile care acompaniază descrierea unei pagini pot afecta modul cum arată toate paginile care urmează. Din acest motiv toate paginile precedente, dintr-un document PostScript trebuie procesate pentru a determina afișarea corectă a unei anumite pagini, în timp ce într-un document PDF fiecare pagină este independentă și nu este afectată de celelalte pagini. Din acest motiv programele de vizualizare ale PDF-urilor permit utilizatorilor să sară rapid la ultimele pagini ale unui document lung, în timp ce programele de vizualizare ale fișierelor PostScript trebuie să parcurgă toate paginile secvențial pentru a afișa o anumită pagină.
1.6.1 Structura fișierului
Un fișier PDF este un subtip al formatului COS (Structură a obiectelor de tip ”Carusel”). Un fișier tip COS este format din obiecte. Acestea sunt de opt tipuri:[8]
Boolean reprezentând adevărat sau fals
Numere
Șiruri de caractere
Nume
Tablouri, colecții de obiecte ordonate
Dicționare, colecții de obiecte indexate după nume
Fluxuri(Streams), în mod normal conțin cantități mari de date
Obiectul ”Null”
Obiectele pot fi directe sau indirecte. Obiectele indirecte sunt numerotate cu un număr al obiectului și un numără reprezentând generația obiectului. Un tabel de indecși, denumit tabel xref, păstrează adresa fiecărui obiect. Acest model permite un acces aleator eficient la obiectele din fișier și, de asemenea, permite ca schimbările minore să fie făcute fără a rescrie tot fișierul (actualizare incrementală). Începând cu versiunea PDF 1.5, obiectele indirecte pot fi localizate în fluxuri speciale cunoscute sub numele de ”Fluxuri de obiecte”. Această tehnică reduce considerabil dimensiunea fișierelor care conțin foarte multe obiecte indirecte mici și sunt în special folosite la fișierele PDF de tip Tagged PDF.
Există două tipuri de layout-uri ale fișierelor PDF: neliniare (neorganizate) și liniare (organizate). Fișierele neliniare consumă mai puțin spațiu pe disc față de cele liniare, dar sunt mai lente la accesare deoarece porțiuni ale datelor necesare pentru compunerea unei pagini de document sunt împrăștiate prin tot fișierul PDF. PDF-urile liniare (numite și ”optimizate” sau ”optimizate pentru web”) sunt construite în așa fel încât să poate fi citite într-un web browser fără a se mai aștepta ca tot fișierul să fie descărcat, deoarece sunt scrise pe disc într-un mod liniar (în ordinea paginilor). Fișierele PDF pot fi optimizate cu ajutorul programelor Adobe Acrobat sau cu QPDF.
1.6.2 Modul de reprezentare al imaginilor
Modul în care sunt reprezentate imaginile în PDF-uri este foarte similar cu acela în care sunt reprezentate în PostScript, exceptând faptul că începând cu PDF 1.4 în PDF-uri se poate folosi transparența.
Grafica din PDF-uri folosește un sistem de coordonate carteziene independent de dispozitivul pe care este folosit pentru a reda suprafața unei pagini. Descrierea unei pagini PDF poate folosi o matrice pentru scalarea, rotirea sau înclinarea elementelor grafice. Un concept cheie în PDF-uri este acela că starea graficii, care este o colecție a parametrilor grafici, poate fi schimbată, salvată și restaurată din descrierea paginii. Formatul PDF are 24 de proprietăți ale stărilor grafice, dinte care cele mai importante sunt:
The current transformation matrix (CTM), care determină sistemul de coordonate
The clipping path
The color space
The alpha constant, care este o component cheie a transparenței
1.6.3 Grafica vectorială
Grafica vectorială în PDF-uri, ca de altfel și în PostScript este construită cu ”căi” (paths). Căile sunt alcătuite, în mod obișnuit, din linii și curbe Bezier, dar pot fi construite si din contururi ale textului. Spre deosebire de PostScript, PDF-ul nu permite ca într-o singură cale să fie combinate contururi de text cu linii și curbe. Căile pot fi tăiate, umplute sau folosite pentru decupare. Tăieturile și umpluturile pot folosi orice set de culori incluzând și tipare.
PDF-urile suportă mai multe tipuri de tipare. Cel mai simplu dintre ele este numit tipar înclinat în care o bucată de desen este desenată în mod repetat. Acesta poate fi un tipar înclinat colorat, cu culorile specificate în obiectul tipar, sau necolorat.
1.6.4 Imagini rasterizate
Imaginile rasterizate în PDF-uri (denumite Image Xobjects) sunt reprezentate prin dicționare cu un flux atașat. Dicționarul descrie proprietățile imaginii, iar fluxul conține datele imaginii. Imaginile sunt în mod normal filtrate pentru a fi comprimate. Filtrele pentru imagine suportate de către PDF-uri sunt:
ASCII85Decode filtru folosit pentru a transforma fluxul în ASCII pe 7 biți
ASCIIHexDecode similar cu ASCII85DECODE dar mai puțin compact
FlateDecode un filtru folosit în mod frecvent bazat pe algoritmul zlib/deflate definit de RFC 1950 și RFC 1951; a fost introdus în PDF 1.2
LZWDecode un filtru bazat pe compresia LZW
RunLengthDecode o metoda simplă de compresie pentru fluxuri repetitive folosește algoritmul de encodare Run-lenght și filtre specifice pentru imagini
DCTDecode un filtru bazat pe standardul JPEG
CCITTFaxDecode un bi-filtru fără pierderi de calitate folosit pentru imaginile alb-negru
JBIG2Decode un filtru bazat pe standardul de compresie JBIG2 introdus în PDF 1.
JPXDecode un filtru bazat pe standardul de compresie JPEG 2000 introdus în PDF 1.5
În mod normal tot conținutul imaginii este încorporat în fișier. Formatul PDF permite ca datele de imagine să fie stocate în fișiere externe prin folosirea fluxurilor externe sau a imaginilor alternative. Subseturi standardizate ale formatului PDF, ca de exemplu PDF/A sau PDF/X interzic aceste practici.[9][10]
1.6.5 Text
Textul într-un PDF este reprezentat print elemente de text. Un elemant de text specifică că, caracterele vor fi desenate în anumite poziții. Caracterele sunt specificate folosind encodările fontului selectat.
1.6.6 Fonturi
Un obiect de tip font într-un PDF este o descriere a este o descriere digitală a unui șir de caractere. Poate conține atât caracteristicile unui șir de caractere, sau poate include nu fișier de fonturi embeduit. Fonturile care pot fi embeduite într-un fișier PDF pot fi de mai multe tipuri: Type1 (și varianta comprimată a acestuia CFF (Compressed Font File)), TrueType, iar începând cu PDF 1.6 OpenType.
Din totalul fonturilor cuprinse în Type 1 Fonts cele mai importante sunt:
TimesNewRoman (v3)
Courier
Helvetica
Symbol
Zapf Dingbats
Acestea sunt numite și fonturi de bază. Programele de vizualizare ale PDF-urilor trebuie să cunoască metricile acestor fonturi, iar metricile acestor fonturi sunt disponibile în toate programele care citesc fișiere PDF, deci nu mai este nevoie să fie embeduite în fișierul PDF
Capitolul 2. Mediul de dezvoltare Eclipse
2.1 Generalități
În programarea calculatoarelor, Eclipse este un mediu de dezvoltare integrat (IDE – Integrated Develoment Enviroment). Conține un spațiu de lucru de bază, și un sistem de extensii pe bază de plug-inuri pentru customizarea mediului. Eclipse este scris în mare parte în limbajul Java, eclipse este folosit pentru dezvoltarea de aplicații Java. Cu ajutorul unor plug-inuri, Eclipse poate fi folosit și pentru a scrie aplicații în alte limbaje de programare: Ada, ABAP, C, C++, COBOL, Fortran, Haskell, JavaScript, Lasso, Natural, Perl, PHP, Prolog, Python, R, Ruby, Scala, Clojure, Groovy, Scheme și Erlang.
Bazele mediului au fost create de IBM VisualAge. Kit-ul de Dezvoltare al Eclipse (SDK), include unelte pentru limbajul Java, si este destinat programatorilor Java. Utilizatorii pot extinde capabilitățile mediului cu ajutorul plug-inurilor scrise pentru platforma Eclipse, sau pot să-și creeze propriile plug-inuri.
Mediul Eclipse este un mediu gratuit, open-source.
2.2 Istoric
Eclipse a fost început de către IBM Canada. Object Technology International (OTI), care în trecut a lansat pe piață familia de medii de dezvoltare integrate VisualAge, bazate pe Smalltalk, a dezvoltat un nou produs pentru înlocuirea acestora bazat pe platforma Java. În noiembrie 2001, s-a format un consorțiu format cu consiliul de administratori pentru a dezvolta în continuare Eclipse ca un software open-source. Se estimează că IBM investise deja aproape 40 de milioane de dolari până în acel moment.[13] Membrii fondatori ai consorțiului erau Borland, IBM, Merant, QXN Software Systems, Red Hat, SuSE, TogetherSoft și WebGain. Numărul membrilor a crescut la 80 la sfârșitul anului 2003. În ianuarie 2004 a fost creată Fundația Eclipse.[14]
Asociation for Computing Machinery i-a acordat în anul pe 26 aprilie 2012 premiul ACM Software Systems 2011.
2.3 Versiuni
Începând cu anul 2006, Fundația Eclipse a lansat versiuni anuale. Fiecare lansare include Platforma Eclipse, iar pe lângă aceasta și alte proiecte simultane.
Până în acest moment fiecare lansare a avut loc în a patra miercuri a lunii iunie.
Versiuni vechi Versiuni vechi suportate încă Ultima versiune Lansări viitoare
2.4 Arhitectură
Eclipse se folosește de plug-inuri pentru a oferi toată funcționalitatea sistemului de execuție. Sistemul său de execuție este bazat pe Equinox, care este o implementare a framework-ului de bază creat de OSGi
Pe lângă aceasta, pentru a permite platformei Eclipse să fie extinsă folosind alte limbaje de programare, ca de exemplu, C și Python, framework-ul permite platformei eclipse să lucreze cu limbaje gramaticale, de exemplu LaTeX, cu aplicații de rețea, ca de exemplu Telnet, si cu sisteme de management de baze de date. Arhitectura plug-inurilor suportă crearea extensiilor dorite pentru mediul de lucru. Suport pentru Java și CSV este oferit în SDK-ul Eclipse.
Cu excepția unui mic nucleu de execuție, totul în Eclipse este plug-in. Eclipse oferă o gamă largă de plug-inuri, pentru un număr mare de ficționalități, unele dintre acestea prin terțe părți folosind atât modele gratuite cât și comerciale.
SDK-ul Eclipse include uneltele de dezvoltare Java Eclipse (JDT), oferind un IDE cu un compilator incremental Java integrat și un model complet al fișierelor sursă Java. Aceasta permite tehnici avansate de refactorizare și de analiză a codului.
Eclipse implementează widget-uri folosindu-se de instrumentele Java Software Widget Toolkit (SWT), în timp ce majoritatea aplicațiilor Java folosesc standardul Java Abstract Window Toolkit (AWT), sau Swing. Interfața Eclipse folosește de asemenea o interfață grafică intermediară numită Jface, care simplifică construcția aplicațiilor bazate pe SWT.
Pachetele de limbi dezvoltate de către ”Babel Project” asigură traducere în diverse limbi.
Platforme
Rich Client Platform
Eclipse oferă platforma ”Rich Client Platform (RCP) pentru dezvoltarea aplicațiilor generale. Următoarele componente constituie Rich client Platform:
Equinox OSGi – pachet standard pentru framework
Core Platform – pornește Eclipse și rulează plug-inuri
Standard Widget Toolkit – set de instrumente pentru widget-uri
Jface – program de vizualizare pentru clase, legătură pentru SWT, buffer de fișiere, editor text
Eclipse Workbench – folosit pentru vizualizări, editoare, perspective, asistent de instalare (wizard)
Aplicații realizate cu ajutorul Rich Client Platform în Eclipse:
IBM Notes 8 și 9
Novell/NetIQ Designer
Apache Directory Studio[15]
Server Platform
Eclipse suportă development pentru serverele Tomcat, GlassFish, etc, și este posibil să fie instalat pe server direct din IDE. Suportă remote debugging, permițând utilizatorului să urmărească variabilele și să parcurgă codul aplicației în timp ce aceasta rulează pe server.
WebTools Platform
Platforma Web Tools (WTP) este o extensie a mediului Eclipse ce conține unelte pentru dezvoltarea de aplicații Web și Java EE. Include editoare pentru codul sursă și pentru grafică pentru mai multe limbaje, asistenți, și aplicații incorporate pentru a simplifica dezvoltarea aplicațiilor, și unelte pentru API pentru a oferi suport în implementarea, rularea și testarea aplicațiilor.[16]
Modeling Platform
Proiectul de modelare conține toate proiectele oficiale lansate de Fundația Eclipse concentrându-se pe tehnologii de dezvoltare bazate pe modele. Toate proiectele sunt compatibile cu Eclipse Modeling Framework creat de către IBM. Aceste proiecte sunt separate în câteva categorii:
Model transformation, Model Development Tools, Concrete Syntax Development, Abstract Syntax Development, Techology and Research și Amalgam.
Model transformation
Model transformation folosește modele EMF pentru intrare și poate produce atât alt model sau text ca și ieșire. Transformările model la model includ ATL , un limbaj de transformare open-source, și unelte pentru a transforma un model dat sau pentru a genera un model nou din modelul EMF dat. Transformările model la text conțin Acceleo, o implementare a MOFM2T, care este un limbaj standard pentru transformările model – text. Acceleo este un generator de cod open-source care poate genera orice limbaj (Java, PHP, Python, etc) din EMF bazat pe modelele definite cu ajutorul meta modelelor (UML, SysML, etc.)[17]
Model Development Tools
Proiectele pentru Model Development Tools sunt implementări ale standardelor de modelare folosite, ca de exemplu UML sau OCL. Printre aceste proiecte se pot număra implementări ale următoarelor standarde:
UML
SysML
OCL
BPMN
IMM
SBVR
XSD
NEDA
Concrete Sintax Development
Proiectul Concrete Syntax Development conține framework-ul de modelare grafică (Graphical Modeling Framework), un framework bazat pe Eclipse dedicat reprezentării grafice a modelelor EMF.
Abstract Syntax Development
Proiectul Abstract Syntax Development găzduiește Eclipse Modeling Framework, baza majorității proiectelor de modelare ale Fundației Eclipse și framework-urile disponibile pentru EMF, ca de exemplu CDO, interogarea EMF și validarea EMF.
Extensii
Eclipse suportă un număr mare de extensii care adaugă suportul necesar pentru limbajul Python, extensia pydev, pentru Android cu ajutorul extensiei ADT de la Google, pentru JavaFX, cu ajutorul extensiei e(fx)clipse, pentru JavaScript și jquery.[18]
Capitolul 3. Librăria PDFlib
3.1 Introducere
PDFlib este liderul în dezvoltarea de unelte pentru generarea și manipularea fișierelor în format PDF. Principalele scopuri ale PDFlib sunt crearea dinamică de PDF-uri, pe un server Web sau pe oricare alt sistem, și implementarea funcționalității de ”Salvare ca PDF” în aplicații existente. Cu ajutorul PDFlib se poate crea dinamic documente PDF folosind conținutul bazelor de date, similar cu modul de creare dinamic al paginilor Web. PDFlib s-a dovedit viabil și in alte situații. Programatorii au nevoie de cunoștințe de bază pentru a putea folosi librăria PDFlib.[19]
Familia de produse PDFlib este disponibilă în 3 variante: PDFlib, PDFlib+PDI (pentru importul de PDF-uri) și PDFlib Personalizat ion Server (PPS) ce conține și PDFlib Block Plug in pentru Adobe Acrobat.
3.1.1 PDFlib
PDFlib oferă toate funcțiile necesare generării de documente PDF cu text, grafică, imagini, și elemente diverse, ca de exemplu adnotații și semen de carte.
Cu ajutorul PDFlib se pot realiza următoarele operații:
adăugarea capabilității de ”Salvare ca PDF” într-o aplicație
crearea de documente PDF de pe un server Web în timp real
crearea de rapoarte generate pentru baze de date în format PDF
funcții avansate de management al culorii
convertire a formatelor TIFF, JPEG, SVG în formatul PDF
formatare automata a tabelelor
creare de PDF/X-1/3/4/5 pentru imprimare profesională
creare de PDF/A-1/2/3 pentru arhivare
creare de PDF/VT pentru imprimare tranzacțională (documente cu conținut variabil)
creare de PDF/UA pentru documente cu accesibilitate crescută (pentru persoanele cu dizabilități)
3.1.2 PDFlib+PDI
PDFlib+PDI include toată funcționalitatea cuprinsă în PDFlib, plus librăria pentru import de fișiere PDF. Cu ajutorul PDI se poate deschide un fișier PDF existent și se poate include conținutul acestuia într-un fișier PDF generat cu ajutorul PDFlib.
Pe lângă funcționalitățile incluse în PDFlib, PDFlib+PDI introduce următoarele funcționalități noi:
comasarea mai multor pagini dintr-un PDF pe o singură coală pentru imprimare
adăugarea de text special cum ar fi antet și subsol, timbre sau numerele paginilor într-un fișier deja existent
plasarea de imagini pe paginile existente
adăugarea de coduri de bare
concatenarea mai multor PDF-uri existente într-unul singur
adăugarea de conținut în documente de tip: PDF/A. PDF/X, PDF/UA
3.1.3 PDFlib Personalizat ion Server (PPS) și Plug-inul PDFlib Block
PDFlib Personalizat ion Server include PDFlib+PDI iar pe lângă acestea ficționalități adiționale pentru procesarea datelor cu caracter variabil, folosindu-se de PDFlib Block. PPS face ca aplicațiile să fie independente de schimbările de layout. Creatorul aplicației creează layout-ul paginii și o convertește in format PDF. Aceasta ia în considerare zone din PDF ca substituenți pentru text sau imagini variabile. Programatorul doar scrie codul pentru a umple blocurile oferite de PDFlib Blocks cu text, imagini, grafică vectorială, sau cu alte pagini PDF. Aceste blocuri sunt folosite pentru documente cu conținut variabil, cu ar fi: facturi, articole promoționale, cărți de vizită, etc.
Capitolul 4. Aplicația ”PDF Creator”
4.1 Comparație între PDF creator și alte aplicații similare
Înainte de a dezvolta aplicația ”PDF Creator” am căutat produse similare deja existente, gratuite, care să îndeplinească criteriile necesare:
posibilitatea de a crea mai multe niveluri (layere)
posibilitatea de a control numărul de obiecte din fișier
posibilitatea de a crea un număr mare de fișiere într-un timp scurt
posibilitatea de a alege tipul de obiecte pe care să-l conțină fișierele create
posibilitatea de a customiza formatul paginilor documentului
posibilitatea de a customiza orientarea paginilor documentului
Produsele găsite nu îndeplineau condițiile necesare, în aplicațiile testate (PDF arhitect, PDF Creator, Cute PDF, Primo PDF), nu ofereau posibilitatea de a genera un număr mare de fișiere într-un timp scurt, sau controlul obiectelor din interiorul fișierelor. De aceea am hotărât să creez această aplicație conform cerințelor descrise anterior.
Aplicația PDF Creator a fost creată cu ajutorul mediului de dezvoltare Eclipse versiunea 4.3 – Kepler.
Am folosit librăria PDFlib creată de către PDFlib GmbH care, la ora actuală, este printre primele, dintre cele mai folosite librării de către aplicațiile generatoare de fișiere PDF.
4.2 Descrierea aplicației ”PDF Creator”
Aplicația PDF Creator are un singur ecran principal de unde utilizatorul poate configura toate opțiunile necesare creării fișierului PDF.
Figura 4.2.1 Interfața aplicației PDF Creator
Pentru ca aplicația să funcționeze este nevoie ca pe calculatorul unde este instalată să existe instalată Java. Utilizatorul trebuie să copieze următoarele fișiere: PDFlib_java.dll, TET_com.dll, pcos_java.dll în calea : C:\ProgramFiles\Java\jre7\bin.
Setările aplicației:
PDF Size – utilizatorul poate seta mărimea paginilor PDF-ului. Pentru aceasta are la dispoziție 5 dimensiuni standard exprimate în pixeli la rezoluția de 72 DPI
Valorile standard pentru dimensiunile paginii folosite în aplicație sunt:
Tabelul 4.2.1 Dimensiunile paginilor A0 – A4 în pixeli și milimetrii
Secvența de cod pentru crearea paginilor în funcție de dimensiunea dorită este următoarea:
String[] options = { "A4", "A3", "A2", "A1", "A0" };
JComboBox sizebox = new JComboBox(options);
sizebox.setBounds(32, 42, 48, 20);
sizebox.setSelectedItem(0);
add(sizebox);
sizebox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
if (e.getItem().toString().equalsIgnoreCase("A4")) {
if (orientationbox.getSelectedIndex() == 0) {
txtX.setText("595");
txtY.setText("841");
} else {
txtX.setText("841");
txtY.setText("595");
}
} else if (e.getItem().toString().equalsIgnoreCase("A3")) {
if (orientationbox.getSelectedIndex() == 0) {
txtX.setText("841");
txtY.setText("1190");
} else {
txtX.setText("1190");
txtY.setText("841");
}
} else if (e.getItem().toString().equalsIgnoreCase("A2")) {
if (orientationbox.getSelectedIndex() == 0) {
txtX.setText("1190");
txtY.setText("1683");
} else {
txtX.setText("1683");
txtY.setText("1190");
}
} else if (e.getItem().toString().equalsIgnoreCase("A1")) {
if (orientationbox.getSelectedIndex() == 0) {
txtX.setText("1683");
txtY.setText("2383");
} else {
txtX.setText("2383");
txtY.setText("1683");
}
} else if (e.getItem().toString().equalsIgnoreCase("A0")) {
if (orientationbox.getSelectedIndex() == 0) {
txtX.setText("2383");
txtY.setText("3366");
} else {
txtX.setText("3366");
txtY.setText("2383");
}
}
}
}
});[20]
NR. of OBJECTS/1st Page – definește numărul de obiecte din primul PDF creat, dacă se creează mai multe fișiere, sau numărul de obiecte de pe prima pagină a PDF-ului creat dacă acesta are mai multe pagini
Regulile pentru multiplicarea numărului de obiecte: rata cu care va crește numărul de obiecte pentru fiecare pagină sau fișier. Doar o valoare poate fi selectată.
MULTYPLY BY – numărul de obiecte crește pentru fiecare pagină/fișier înmulțind numărul de obiecte din pagina/fișierul anterior cu valoarea specificată în acest câmp.
ADD – numărul de obiecte va crește pentru fiecare pagină/fișier adunând numărului de obiecte de pe pagina/fișierul anterior valoarea precizată în acest câmp
POWER OF – numărul de obiecte va crește pentru fiecare pagină/fișier ridicând la puterea specificată în acest câmp numărul de obiecte din pagina/fișierul anterior.
NUMBER OF ITERATIONS – specifică de câte ori numărul de obiecte va fi incrementat bazat pe regula specificată anterior. În cazul în care s-a ales modul ”Single page” atunci această valoare va fi egală cu numărul de fișiere create de către aplicație. În cazul în care s-a ales modul ”Multi page” atunci numărul de pagini al fișierului rezultat va fi egal cu numărul selectat în acest câmp.
NR. OF LAYERS – specifică numărul de layere de pe fiecare pagină. Obiectele vor fi distribuite în mod egal pe fiecare layer. Se recomandă ca numărul de obiecte să fie divizibil cu numărul de layere
Proprietățile obiectelor:
În tabelul de mai jos sunt prezentate toate posibilitățile de forme care se pot genera cu ajutorul acestei aplicații:
Tabelul 4.2.2 Tipuri de obiecte disponibile în aplicația PDF CREATOR
Pentru crearea fișierelor de cu imagini se pot folosi formatele JPG, GIF,TIFF, PNG pentru raster și fișierele tip SVG pentru vectori.
Datorită faptului că aplicația folosește versiunea gratuită și nelicențiată a PDFlib watermark-ul ” WWW.PDFLIB.COM” va fi prezent tot pe fiecare pagină. Asupra complexității PDF-ului acest watermark are un efect nesemnificativ.
Images – când se alege opțiunea aceasta utilizatorul va trebui să aleagă fișierele de imagine (jpg, gif, tiff, png, svg)
Set Output Folder – utilizatorul alege directorul în care fișierele generate vor fi salvate. Dacă nu se specifică un director, aplicația va genera fișierele în directorul ei.
GENERATE PDF – În funcție de opțiunile alese anterior aplicația va genera fișierul sau fișierele cerute
Fișierele generate de către aplicație sunt denumite în așa fel încât numele lor să conțină informații despre conținutul acestora pentru o mai ușoară identificare ulterioară a acestora. De exemplu în cazul fișierelor cu o singură pagină numele fișierului va fi format din numărul de obiecte conținut și din tipul acestor obiecte:
Figura 4.2.2 Cum se generează numele fișierelor cu o singură pagină
În cazul fișierelor cu mai multe numele fișierului este format doar din numele obiectelor conținute, deoarece numărul de obiecte nu mai este relevant, el fiind variabil pe fiecare pagină.
Figura 4.2.3 2 Cum se generează numele fișierelor cu mai multe pagini
Pentru a putea funcționa aplicația, utilizatorul este obligat să selecteze o regulă de multiplicare a obiectelor, numărul de iterații și numărul de layere.
Secvența de cod care avertizează utilizatorul despre acest fapt este următoarea:
public void actionPerformed(ActionEvent e) {
if (iterations.getText().isEmpty() && nrobj.getText().isEmpty()) {
JOptionPane
.showMessageDialog(null,
"Set values for the number ofobjects and iterations!");
}
if (power.getText().isEmpty() ^ multi.getText().isEmpty()
^ add.getText().isEmpty()) {
JOptionPane.showMessageDialog(null,
"Set values for multiplication rules!");
}[21]
4.3 Măsurători ale timpilor necesari creării fișierelor
Datorită faptului că aplicația este folosită în majoritatea cazurilor pentru crearea unui număr mare de fișiere este foarte important timpul în care aceasta poate genera fișierele solicitate.
Timpul de generare al fișierelor depinde de mai mulți factori:
Tipul de obiecte folosite
Numărul de obiecte din fiecare fișier
Complexitatea obiectelor
Numărul de layere pe care sunt dispuse obiectele
Dimensiunea paginilor
Pe lângă timpul de creare al unui fișier un alt factor important este și dimensiunea fișierelor rezultate.
În continuare voi analiza parametrii descriși anterior.
4.3.1 Numărul de fișiere vs numărul de obiecte
Figura 4.3.1.1
Figura 4.3.1.2
Pentru toate măsurătorile făcute am folosit același tip de obiecte (linii), iar măsurătorile le-am realizat cu 1, 10, 100, 500, 1000,5000, 10000 fișiere. Am repetat măsurătorile folosind 2 formate de pagină diferită, și anume A0 și A4. Am ales aceste formate deoarece constituie limita superioară și inferioară a formatelor folosite în aplicație.
După cum se poate observa din cele 2 grafice formatul paginii nu influențează timpul de creare al fișierelor, ceea ce este normal datorită faptului că aplicația trimite la fel dimensiunea paginii indiferent cât este aceasta.
Pentru un număr relativ mic de fișiere ( până într-o mie) diferențele între timpii de procesare nu sunt semnificative. Peste 1000 de fișiere și 1000 de obiecte per fișier timpii de generare cresc semnificativ. Acest fapt se datorează complexității crescute a fișierelor. Acest lucru se observă și în momentul deschiderii fișierelor cu un vizualizator de fișiere PDF (Acrobat Reader). Planșele rezultate în programele de CAD (Computer Aided Design) care sunt principalele fișiere folosite de către clienții noștri, au în general peste 1000 de obiecte dispuse în câteva layere.
4.3.2 Tipul obiectelor
Figura 4.3.2.1
Figura 4.3.2.2
Figura 4.3.2.3
Pe lângă tipul obiectelor cu care sunt populate fișierele un factor important este complexitatea obiectelor.
Din figurile de mai sus se poate observa cu ușurință că tipul de obiecte folosite la generarea fișierelor au o influență puternică pentru timpul de generare al acestora.
Dacă pentru a genera 1000 de fișiere cu obiecte de tip linie au fost necesare 18 secunde, pentru generarea aceluiași număr de fișiere dar ca obiecte care le populează fiind curbele Bezier, timpul de procesare a crescut la 53 de secunde, ceea ce înseamnă o scădere a performanței cu aproximativ 200%.
Diferență cea mai mare se întâlnește la compararea timpilor de realizare a celor 1000 de fișiere ce conțin vectori față de cele ce conțin fișiere de tip JPG. Aici pierderea de performanță înregistrată este de aproximativ 420%.
După cum se poate observa din Figura 4.3.2.4 formatul paginii nu influențează timpii de generare ai fișierelor.
Figura 4.3.2.4
4.3.3 Fișiere color vs alb-negru
Figura 4.3.3.1
Figura 4.3.3.2
Din fișierele obținute de la clienții noștri se poate observa faptul că majoritatea fișierelor folosite sunt color sau fișiere ce conțin imagini, de aceea aplicația trebuie să ofere posibilitatea generării acestor tip de fișiere.
Figura 4.3.3.3
Figura 4.3.3.4
Diferența dintre timpii de creare ale fișierelor alb-negru față de cele color este semnificativă chiar și în cazul obiectelor simple. Pentru crearea celor 1000 de fișiere de fișiere de test, diferența de timp de procesare este de 32%.
O diferență semnificativ mai mare se observă în cazul suprafețelor, când modelul de colorare este complex. Diferența de timp între modelul de umplere cu culori aleatoare față de cel cu patern este de aproximativ 175%. În continuare se prezintă codul folosit pentru crearea gradientelor de culoare, respectiv a paternului.
Creare gradient
/* Set the first color for the gradient to white */
Random rgbs = new Random();
double rrs = rgb.nextDouble();
double ggs = rgb.nextDouble();
double bbs = rgb.nextDouble();
p.setcolor("fill", "rgb", rrs, ggs, bbs, 0);
/*
* Set the second color for the gradient to orange; define an axial
* gradient with a size similar to the size of the text to be filled
*/
Random rgbss = new Random();
double rrss = rgb.nextDouble();
double ggss = rgb.nextDouble();
double bbss = rgb.nextDouble();
sh = p.shading("axial", xx, yy, xxx, yyy, rrss, ggss, bbss, 0.0, "");
Creare patern
* Create a shading pattern from the shading and set the pattern as
* the current fill color
pattern = p.shading_pattern(sh, "");
p.setcolor("fill", "pattern", pattern, 0, 0, 0);
int path = p.add_path_point( -1, xx, yy, "control", "");
path = p.add_path_point(path, xxx, yyy, "control", "");
path = p.add_path_point(path, xx1, yy1, "curve", "");
p.draw_path(path, xx2, yy2, "fill");
}
else if (color==3)
{
double w, h;
int pattern;
w = 5;
h = 10;
/* Define a custom color for the pattern */
p.setcolor("stroke", "rgb", rr, gg, bb, 0);
p.setlinewidth(0.5);
/* Set the line cap beyond the line end */
p.set_graphics_option("linecap=2");
/* Define and stroke the path for the pattern to be used */
p.moveto(0, 0);
p.lineto(w, h / 2);
p.lineto(0, h);
p.stroke();
p.moveto(0, h / 2);
p.lineto(w / 2, h / 4);
p.stroke();
p.moveto(w, h);
p.lineto(w / 2, 3 * h / 4);
p.stroke();
p.end_pattern();
p.setcolor("fill", "pattern", pattern, 0, 0, 0);
Random r = new Random();
int xx = r.nextInt(xpdf);
int yy = r.nextInt(ypdf);
int xxx = r.nextInt(xpdf);
int yyy = r.nextInt(ypdf);
int xx1 = r.nextInt(xpdf);
int yy1 = r.nextInt(ypdf);
int xx2 = r.nextInt(xpdf);
int yy2 = r.nextInt(ypdf);
int path = p.add_path_point( -1, xx, yy, "control", "");
path = p.add_path_point(path, xxx, yyy, "control", "");
path = p.add_path_point(path, xx1, yy1, "curve", "");
p.draw_path(path, xx2, yy2, "fill");
}
}
}
p.end_layer();
}[22]
4.3.4 Dimensiuni fișier
Figura 4.3.4.1
Dimensiunea fișierelor nu este diferită când tipul obiectelor folosite face parte din aceeași categorie, cercuri sau suprafețe închise. O diferență semnificative se observă la fișierele ce conțin imagini. În cazul fișierelor ce conțin obiecte de tip imagine se observă o diferență semnificativă față de cele cu obiecte tip curbe sau suprafețe.
Un lucru foarte interesant de remarcat este faptul că deși generarea fișierelor cu obiecte imagini durează foarte mult față de cele cu obiecte linii dimensiunea acestora este semnificativ mai mică.
Concluzii
Având în vedere datele prezentate mai sus, aplicația și-a atins scopul, acela de a oferi utilizatorilor posibilitatea de a genera fișiere tip PDF într-un timp scurt, la complexitatea dorită și cu conținutul dorit de către aceștia.
Faptul că am folosit librăria PDFlib varianta gratuită și nelicențiată a inclus în fiecare fișier generat un Watermark. Acesta nu influențează fișierele obținute, putând fi considerat doar un obiect în plus, dar după cum am arătat prin măsurătorile efectuate, un obiect nu influențează timpii, dimensiunea sau complexitatea fișierelor într-un mod perceptibil.
Înainte de a începe crearea aplicației, am avut în vedere un număr de cerințe pe care alpicația trebuia să le îndeplinească pentru a-și atinge scopul propus. Aceste cerințe au fost ca utilizatorul să poată alege:
numărul de fișiere pe care dorește să le creeze
numărul de pagini pe care să-l conțină un fișier
formatul paginii
orientarea paginii
numărul de obiecte din fișier
numărul de layere
tipul de obiecte
posibilitatea ca obiectele să fie imagini sau vectori
posibilitatea de a alege culoarea obiectelor și modul de colorare al suprafețelor
posibilitatea de a avea un număr diferit de obiecte per fișier sau per pagină
O altă necesitate neinclusă încă în această versiune a aplicației ”PDF Creator” este posibilitatea de a seta o dimensiune a fișierului iar aplicația să poată crea un fișier de dimensiunea specificată. Această funcționalitate va fi inclusă într-o versiune ulterioară.
Bibliografie
[1] Adobe Systems Incorporated, PDF Reference, Sixth edition, version 1.23, Nov 2006, p. 33
[2]Warnock, J. (1991). "The Camelot Project"
[3] ISO 32000-1:2008 – Document management – Portable document format – Part 1: PDF 1.7 www.Iso.org. 2008-07-01. Retrieved 2010-02-21.
[4] Adobe Systems Incorporated (2008), Public Patent License, ISO 32000-1: 2008 – PDF 1.7, retrieved 2011-07-06
[5] Laurens Leurs. "The history of PDF". Retrieved 2007-09-19
[6] Johnson Duff "The 8 most popular document formats on the web". Retrieved 2014-03-02.
[7] Adobe Supplement to the ISO 32000 BaseVersion: 1.7 ExtensionLevel: 3, 2008-06, retrieved 2014-04-09
[8] Adobe Systems, PDF Reference, p. 51.
[9] Johnson Duff (2010-06-10), Is PDF an open standard? – Adobe Reader is the de facto Standard, not PDF, retrieved 2014-01-19
[10] Dr. Hardy Matthew, Adobe Systems (2012). "Seven Minutes with a PDF Standard – PDF (ISO 32000)"
[11] Jackson, Joab (2006-12-07). "Adobe plunges PDF into XML"
[12] Whitington John – „PDF Explained” ISBN-13: 978-1449310028
[13] Milinkovich, Mike. "IBM and Eclipse: A Decade of Software Innovation". Building a Smarter Planet. Retrieved 3 November 2011.
[14] Eclipse foundation – "About the Eclipse Foundation: History of Eclipse". Retrieved 1 January 2014.
[15] Silva, Vladimir (11 March 2009). Practical Eclipse Rich Client Platform Projects (1st ed.). Apress. p. 352. ISBN 1-4302-1827-4.
[16] Burnette, Ed (12 August 2005). Eclipse IDE Pocket Guide (1st ed.). O'Reilly Media. p. 128. ISBN 978-0-596-10065-0.
[17] Holzner, Steve (1 May 2004). Eclipse (1st ed.). O'Reilly Media. p. 317. ISBN 0-596-00641-1.
[18] McAffer Jeff; Lemieux Jean-Michel; Aniszczyk Chris (22 May 2010). Eclipse Rich Client Platform (2nd ed.). Addison-Wesley Professional. p. 552. ISBN 0-321-60378-8.
[19] PDFlib cookbook
[20] McAffer, Jeff , Lemieux Jean-Michel Eclipse Rich Client Platform: Designing, Coding, and Packaging Java Applications (October 21), 2005 ISBN-13: 978-0321334619
[21] Clayberg Eric, Rubel Dan Eclipse Plug-ins (3rd Edition) ISBN-13: 978-0321553461
[22] D'Anjou Jim, Fairbrother Scott, Kehn Dan, Kellerman John, McCarthy Pat – The Java Developer's Guide to Eclipse,
Bibliografie
[1] Adobe Systems Incorporated, PDF Reference, Sixth edition, version 1.23, Nov 2006, p. 33
[2]Warnock, J. (1991). "The Camelot Project"
[3] ISO 32000-1:2008 – Document management – Portable document format – Part 1: PDF 1.7 www.Iso.org. 2008-07-01. Retrieved 2010-02-21.
[4] Adobe Systems Incorporated (2008), Public Patent License, ISO 32000-1: 2008 – PDF 1.7, retrieved 2011-07-06
[5] Laurens Leurs. "The history of PDF". Retrieved 2007-09-19
[6] Johnson Duff "The 8 most popular document formats on the web". Retrieved 2014-03-02.
[7] Adobe Supplement to the ISO 32000 BaseVersion: 1.7 ExtensionLevel: 3, 2008-06, retrieved 2014-04-09
[8] Adobe Systems, PDF Reference, p. 51.
[9] Johnson Duff (2010-06-10), Is PDF an open standard? – Adobe Reader is the de facto Standard, not PDF, retrieved 2014-01-19
[10] Dr. Hardy Matthew, Adobe Systems (2012). "Seven Minutes with a PDF Standard – PDF (ISO 32000)"
[11] Jackson, Joab (2006-12-07). "Adobe plunges PDF into XML"
[12] Whitington John – „PDF Explained” ISBN-13: 978-1449310028
[13] Milinkovich, Mike. "IBM and Eclipse: A Decade of Software Innovation". Building a Smarter Planet. Retrieved 3 November 2011.
[14] Eclipse foundation – "About the Eclipse Foundation: History of Eclipse". Retrieved 1 January 2014.
[15] Silva, Vladimir (11 March 2009). Practical Eclipse Rich Client Platform Projects (1st ed.). Apress. p. 352. ISBN 1-4302-1827-4.
[16] Burnette, Ed (12 August 2005). Eclipse IDE Pocket Guide (1st ed.). O'Reilly Media. p. 128. ISBN 978-0-596-10065-0.
[17] Holzner, Steve (1 May 2004). Eclipse (1st ed.). O'Reilly Media. p. 317. ISBN 0-596-00641-1.
[18] McAffer Jeff; Lemieux Jean-Michel; Aniszczyk Chris (22 May 2010). Eclipse Rich Client Platform (2nd ed.). Addison-Wesley Professional. p. 552. ISBN 0-321-60378-8.
[19] PDFlib cookbook
[20] McAffer, Jeff , Lemieux Jean-Michel Eclipse Rich Client Platform: Designing, Coding, and Packaging Java Applications (October 21), 2005 ISBN-13: 978-0321334619
[21] Clayberg Eric, Rubel Dan Eclipse Plug-ins (3rd Edition) ISBN-13: 978-0321553461
[22] D'Anjou Jim, Fairbrother Scott, Kehn Dan, Kellerman John, McCarthy Pat – The Java Developer's Guide to Eclipse,
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Generator de Fisiere Pdf (ID: 149825)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
