itext tutorial convert data pdf report using java itext
Denne iText-selvstudie diskuterer, hvordan man manipulerer massedata til en sikker, enkelt form for PDF-rapport ved hjælp af Java og iText-biblioteket:
iText er værktøjet til at generere en konsolideret rapport, hvor vi kan manipulere bulkdata til den enkelt form for enhed, der indeholder meningsfuld information.
iText er et Java PDF-bibliotek, der bruges til at oprette og manipulere PDF-dokumenter ved at udvikle Java-programmer. Nogle af funktionerne i iText-biblioteket inkluderer generering af interaktive PDF-dokumenter, tilføjelse af bogmærker, gemning af PDF-filer som billedfiler, opdeling og fletning af eksisterende PDF-filer til flere PDF-filer osv.
Hvad du lærer:
Hvorfor iText?
Det fungerer i et alsidigt miljø i en automatiseret rapport, der produceres af specifikke servere som Apache Tomcat, JBoss, Junit. Det giver et brugerdefineret dokument i henhold til brugerens behov.
Er iText-sikkerhedsorienteret?
Det tilbyder måder, hvorpå dokumenter kunne hentes baseret på sikkerhedsrelaterede operationer, såsom adgangskodebeskyttet eller validerende input fra brugeren som at åbne lønseddel ved at indtaste PAN-detaljer.
I dag foretrækker vi generelt at gemme data i bløde kopier frem for papirkopier. Det er bedre at gemme rapporter på servere end papirer. Når du har brug for rapporten, skal du bare køre Java-filen og generere den der og der.
Lad os i denne artikel prøve at finde løsningen på følgende spørgsmål:
spørgsmål om sæbe og hvile på webservices
- Kan vi bruge multifunktionalitet?
- Om det kun bruges til at udarbejde rapporter?
- Hvor kan vi bruge Itext?
- Om det kan oprette den nye rapport?
- Jeg er tester, er det nyttigt for mig?
Hvad er iText?
Outputtet fra iText-værktøjet er en PDF-rapport integreret af Java. Dette arver PDF-opførsel, komponenter og genererer en kompatibel rapport.
iText er en open-source API med et samarbejdsvilligt miljø, deltagelse i fuldgyldighed, prismeindtrængning af lys og grundlaget for generering af rapporter.
For eksempel: Overvej et eksempel på en billet til den indiske jernbane. Her ønsker vi udskrivning af det detaljerede resumé af billetprocessen startende fra søgning efter ledige pladser til reservation af billetten.
Dernæst vil vi forstå, hvordan iText kan hjælpe os med dette krav.
Nogle af egenskaberne er som følger:
- Komplet oversigt over ansøgningen (CSA)
- Easy Tracking Details (ETD)
- Nem behandling af applikationen (EPA)
Sådan starter du iText-rapporten?
Det er let at nærme sig Itext via Java. Det illustreres ved hjælp af et eksempel.
Business Analyst (BA) får Business Process Document (BPD) og Functional Specification Document (FSD) fra klienten, der forklarer deres forventninger til applikationen.
Lad os tage et scenarie. BA stillede flere krav til rapportindramning samt hvordan vores basisprodukt kan understøtte dette. Sådanne specifikationer fra ansete kunder får os til ikke at miste projektet på grund af mangfoldig forvirring og dilemma om, hvordan vi kan opnå rapporten på en kompatibel måde.
Hvorfor opstår sådan forvirring i genererede rapporter?
Dette skyldes, at dataene i applikationen bare viser afspejling af data i rapporten. Det bevæger sig ikke for at kontrollere hver node i applikationen (f.eks. Som det gøres i MR-scanningen). Det er således den nemmeste måde.
Ja præcis. Men vores klient forventer, at dataene er dynamiske. Baseret på de tilgængelige data skal rapporten genereres på en dynamisk måde.
Lad os diskutere dette med et eksempel i realtid.
Scenarie 1: Statiske data kan være hårdkodede og generere rapporter. Her ændres lånebeløbet og ejendomsværdien ikke før udbetaling.
Se billedet nedenfor for ovenstående scenarie:
Scenarie 2 : I dette scenario stiger ejendomsværdien dag for dag, og hovedstolen på lånebeløbet bør reduceres hvert år, og de forudsagte data er således dynamiske.
En kunde kan komme og henvende sig til os for at give detaljerne i forskellige regnskabsår, fordi han har ændret ansættelsesperioden og baseret på den var EMI blevet varieret. Hvis du har hardkodet dataene som vist i nedenstående figur, bliver du fanget på gaden.
Overvej tilfældet, hvor rapporten formodes at være dynamisk. Vi kan ikke fremsætte det som det er. Vi er nødt til at udføre den tekniske inspektion og gennemgå kravene klart, inden vi starter udviklingen og testningen.
Vi skal fokusere meget tydeligt på designdelen, hvor godkendelsen sker fra forretningsanalytikeren. Det er en god tilgang, fordi eventuelle UAT-spørgsmål, der rejses senere, ikke kan påpeges os. Løsningen til dette problem med generering af dynamisk rapport forudsiges blot at bruge Java-koncepter til at generere en rapport.
Hvordan kalder jeg en rapport?
Nedenstående diagram illustrerer processen til generering af en rapport:
Hvordan påberåbes rapport gennem JSP?
Uanset hvor vi kalder Java, er det nødvendigt at lave UI-design, da dette fungerer som et vejledningskort for at komme videre fra frontenden. Det er en nem måde, da vi kan lære rapportopkaldet.
Lad os overveje et eksempel:
Software Report
Vi kan konfigurere rapporten på denne måde:
- Rapportnavn: Softwarerapport (vises i applikationen)
- Rapporter opkald via JS: Prøverapport
- Drop Menu: Flere rapporter kan integreres
- Ved klik: JavaScript-funktion
Hvordan kan testere indlede rapport?
Testere foretrækker normalt regressionstest gennem automatiseringsskripter ved hjælp af agurkerammen, nøgleordsdrevet ramme og datadrevet ramme.
For at levere rapporten baseret på kundens krav kan vi fortsætte med færdiglavet arkitektur, dvs. iText, hvor det indbyggede værktøj arver reporterfilens egenskaber og opførsel såvel som artefakter, der skal leveres.
Testere kan fremstille den konsoliderede rapport, såsom RBL (Rest af fejl), procentdel af testleverancer, kortlægning af fejl-id baseret på de respektive faser såsom SIT, UAT og produktionstest ved hjælp af iText Java.
Overvej et scenarie, der skal konfigurere flere rapporter.
Nedenstående kode illustrerer, hvordan man bruger i JSP, hvilket er det, vi ser på i frontenden. Følgende metode anvendes:
Software Report Software Report1 Software Report2
Hvordan påberåbes i JavaScript (JS)?
Generelt kan vi foretage valideringer i JS, men du kan gøre det selv i Java. JavaScript-eksekutor er inkluderet i vores pakke til opkaldsfunktion og til at påkalde programmet for at generere en rapport, der er meget kompatibel.
Det kan bruges til at påkalde (call) -metode med et ejerobjekt som argument.
Function onload(){ String ReportName=””; if(ReportName==' Sample Report'){ var applnNum=''; //It is passing Application Number from the session which is active var UrlToPass = SchedulerServlet?action=samplereport &SubAction=StandardRepose &ReportName='+ ReportName +'& applnNum ='+ applnNum } }
Ovenstående metode håndterer onload () funktion, der kan påberåbes i applikationen for at være meget alsidig, der udløser URL'en til at generere rapport.
Sådan opbygges funktionen i Java-rapport?
Java håndterer advarsler og undtagelser i programmet og udfører også rapportgenerering.
Lad os illustrere dette ved hjælp af et eksempel.
Document Doc =new Document ();
Det er måden at oprette dokumentet på, og det er også platformen, der integrerer rapporten.
Doc.open();
Ovenstående kommando bruges til at åbne dokumentet. Det er vigtigt at medtage denne kommando, som hvis den ikke er inkluderet, vil den kaste dokumentundtagelse.
Doc.close();
Ovenstående kommando bruges til at lukke dokumentet, hvilket indikerer JVM, at dokumentet har accepteret at stoppe skrivningen. Det er vigtigt at medtage denne kommando, som hvis den ikke er inkluderet, vil den kaste dokumentundtagelse.
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(RESULT));
Ovenstående kommando viser det dokument, der integrerer PDF'ens egenskaber gennem PDFWriter, kalder dokumentet og gør det synligt.
Paragraph para = new Paragraph ();
Et afsnit skriver forekomsten af autofit-indholdet og skriver også kravene til hovedlinjerne.
Doc.setpercentage(%to be given);
I ovenstående kommando er et dokument blevet påberåbt ved at kalde PDF-filen for at være kompatibel som defineret af den inkluderede procentdel.
public static final String output FileName = 'sample output/Automation/sample report.pdf';
Ovenstående kommando viser dokumentnavnet, der er inkluderet i dobbeltcitaterne, og den angivne placering til arkivering af filen, når der klikkes på rapporten.
writer. setPdfVersion(PdfWriter.VERSION_1_9);
Her viser det, hvordan man indstiller PDF-versionen i rapportgenerering.
document. setPageSize (PageSize.A4);
Vi kan også indstille sidestørrelsen for, hvordan rapporten skal leveres baseret på kravene. Sidestørrelsen som A3, A4, A5 osv.
document. setMargins(24, 43, 34, 43);
Vi kan bruge ovenstående funktionalitet til at indstille margenerne, og vi kan bruge autofit-metoden til at passe den normalt inden for dokumentet.
document.setMarginMirroring(true);
Ovenstående kommando viser metoden til indstillingen Margin-spejl.
Håndtering af advarsler og undtagelser
Det er vigtigt at håndtere advarsler og undtagelser i Java.
hvordan man opretter en testplan til softwaretest
Nogle af de alarmer, som vi støder på under løbetiden, er angivet nedenfor:
- NoSuchElement Undtagelse
- Null Pointer Exception
- Matrixindeks bundet til undtagelse
- Påstandsfejl
- Uhåndteret advarselsundtagelse
- SQL-undtagelse
- Timeout-undtagelse
- Dokumentundtagelse
Nogle gange kan udvikleren også udskrive undtagelsen fra en prøvefangst-blok. Undtagelsen er lukket under fangstblokken.
Eksempel:
try{ Scanner in= new Scanner(System.in); Int n; System.out.println(“Enter the number to check:” +n); n=in.nextInt(); If(n%2==0){ System.out.println(“Even Number ”); }else{ System.out.println(“ODD Number”); } }catch(Exception e){ e.printstacktrace(); System.out.println(“Exception occurred:” +e); }
Eksempel på output: Positivt scenario
Indtast det nummer, der skal kontrolleres: 2
Lige tal
Eksempel på output: Negativt scenario
Indtast det nummer, der skal kontrolleres: a
Der opstod en undtagelse: Ulovlig formatundtagelse
Forklaring:
Et tal skal angives som input, fordi vi har defineret 'n' som et heltal i ovenstående kodeeksempel. Hvis vi indtaster alfabeter, hvor det forsøger at få Resten (% modulus brugt), henter det ikke nogen data og kaster bare undtagelsen ved hjælp af fangstblok.
Den nøjagtige forskel mellem fejl og undtagelse i Java:
En fejl forhindrer dig i at udføre programmet, men en undtagelse bliver fanget, mens programmet kører, mens det ikke stopper din udførelse.
Logning af en fillog:
At skrive loggen for hver metode eller modul får os til at identificere, hvor JVM holder op med at udføre. En log viser normalt værdien, hvor den er gemt i den angivne logfil, og på hvilken måde processoren udfører Java-programmet i applikationen.
Forskel mellem System.out.println (SOP) og Log:
Begge udskriver værdien eller fremviser, uanset hvad indholdet er angivet med dobbelt anførselstegn. Men forskellene mellem disse to er: Mens programmet kører, udskriver applikationen værdierne på konsollen ved hjælp af SOP-kommando. Men når vi først har slettet indholdet af konsollen, er det svært at finde værdien. Dette sker også, når vi har flere SOP'er.
Grundlæggende kunne Log fabrikskommandoen hente og opdatere værdierne. Vi kan få vist logfilen for enhver pris, fordi den skriver hver gang ved hver kørsel med systemdato og -tid.
Eksempel:
private static Log logFile= LogFactory.getLog(SampleProgram.class);
Servere
Servere spiller en vigtig rolle i virksomheden, da den kan afgøre, om programudførelsen er bestået eller ej.
Lokale servere er de servere, hvor vi kan udføre programmet på vores lokale maskine. Vi kan bruge følgende lokale servere:
- Apache Tomcat
- JBoss
Når koden er inde Klar tilstand, det skal distribueres til den angivne server, og det kræver en genstart. Vi kunne bruge følgende servere:
- Oracle Weblogic
- IBM Websphere
Prøveprogram:
Overvej programmet, hvor det kunne behandle iText-implementeringen.
/****Importings Header Functions package pkg_Name import java.util.HashMap; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.ommons.logging.Log; import com.commons.logging.LogFactory; /** * Implementing Report for generating Report */ public class ReportsController extends HttpServlet { private static Log Log = LogFactory.getLog(ReportsController.class); /** * Default constructor Used in the method. */ public ReportsController() { TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ public void doPost(HttpServletRequest pRequest, HttpServletResponse pResponse) throws ServletException, IOException { String action = null; try { Action = pRequest.getParameter('action'); if(Log.isDebugEnabled()) log.debug('action '+action); if(action != null) { Action = Action.trim(); if(Action.equals('createReport')) { createReport(pRequest,pResponse); }}} catch(Exception Ex) { Log.fatal('Exception in ReportsController: '+pEx.toString()); } } // Get the Report name from UI private void createReport(HttpServletRequest pRequest, HttpServletResponse pResponse) throws Exception { if(log.isDebugEnabled()) log.debug('createReport '); String nameofReport = null; try { nameofReport = pRequest.getParameter('ReportName'); if(log.isDebugEnabled()) log.debug('nameofReport '+nameofReport); if(nameofReport != null) { nameofReport = nameofReport.trim(); if(nameofReport.equals('FirstRepo')) { getFirstRepo (pRequest,pResponse); } if(nameofReport.equals('SecondRepo')) { getSecondRepo (pRequest,pResponse); }}} catch(Exception pEx) { log.print('Exception in createReport - while getting Connection: '+pEx.toString()); } } // Add for FirstRepo private void getFirstRepo(HttpServletRequest pRequest, HttpServletResponse pResponse) throws Exception { if(log.isDebugEnabled()) log.debug('getFirstRepo '); String Url = null; String Referno = null; String lproductDesc = null; String lFileName = null; RequestDispatcher requestDispatcherObj = null; try { Referno = pRequest.getParameter('ApplNum'); productDesc=pRequest.getParameter('ProdDesc'); if(log.isDebugEnabled()) log.debug('lReferno '+lReferno); if(log.isDebugEnabled()) log.debug('lproductDesc '+lproductDesc); RequestDispatcherObj.forward(pRequest, pResponse); } catch(Exception pEx) { log.fatal('Exception in createReport - while getting Connection: '+pEx.toString()); } }
Justering i Itext Java
Generelt har brugere brug for rapportdokumenterne i et specifikt format, fordi rapporterne klart skal repræsentere, hvad og hvordan du vil vise resultaterne. IText hjælper dig med dette.
Prøveprogram
Package com. Softwaretesting.itext; Import java io.fileoutputstream; Import com itext pdf.Text.Document; //Through this I am including a paragraph in my PDF; Import com itextpdf.Text.Paragraph; //use the below code to write in the PDF Import com. Itext pdf.pdfwriter; Public class Alignmentpdf{ //class starts from here and Start writing in below specified file Private static string file=” Alignmentpdf.pdf”; System out.println(“Document entered is…”+ file); //JVM Starts executing from main method i.e. below code Public static void main (string () args){ //JVM starts compiling from here try { Document doc =new document (); Pdfwriter.getInstance(doc, new file output stream (file)); // Below function which makes to open the document in the front end doc.open(); Paragraph para=new paragraph(“first para”); //Paragraph usually maintains more than one sentence //If Sentence needs to be aligned at Left, use below code Para.setAlignment(Element.ALIGN_LEFT); doc.add(para); // If Sentence needs to be aligned at Right, use below code Paragraph para1=new paragraph(“alignment should be done in second”); Para1 set alignment (Element.ALIGN-RIGHT); doc.add (para1); /*you can create same paragraph object like para or para1 based on user convenience throughout the program. But I am using different object because of showing the difference for Reader Understanding*/ Paragraph para2 = new paragraph (“Alignment is in Centre”); // If Sentence needs to be aligned at the center, use below code Para2 set alignment (Element.Align_CENTER); doc.add(para2); doc.close(); } Catch (DocumentException e){ e. printstacktrace(); System.out.println(“Printed Java Program”); }}}
Bruges iText til at oprette en ny eller opdatere en eksisterende?
Et spørgsmål kan opstå, om iText kun bruges til at oprette en ny PDF? Svaret er nej. Udover at generere nye PDF-rapporter giver iText også nogle funktioner såsom opdatering af en eksisterende pdf og leverer det konsoliderede output, der inkluderer den opdaterede ændring.
Prøvekode:
// Reading Input file from where the need to copy Private static string file-to-be-given=”D:/software/Existingpdf.pdf;” // Reading Input file from where the need to paste Private static string file-to-be-output=”D:/software/outputpdf pdf” doc.open(); pdfReader reader =new pdfReader (file-to-be-given); //Getting Number of pages before enters into for Loop Int n= reader.getNopages(); PdfImportedpage pager; //Reading all pages in pdf For (int i=1;i<=n; i++){ If(i==5) { //I need to add only 5th Page in my new PDF Pager=writer.getImportedpage(reader,i); Paragraph para= new paragraph (“Its adding”); doc. add (para); } doc. close(); }
Klump i iText Pdf:
Chunk er den nye teknik, der passer ind i den tilgængelige plads i pdf, og som ikke kræver noget at ledsage.
Prøveprogram:
doc.open(): doc.add(new chunk (“1st order”)); doc.add(new chunk(“2nd order”)); doc.add(new chunk(“3rd order”)); doc.close();
Hvem kan bruge iText?
Profil | Udvikling | Se adgang |
---|---|---|
Udvikling | Muligt | Brugervenlig |
Tester | Delvis mulig | Brugervenlig |
Business analytiker | Ikke muligt | Brugervenlig |
Kunde | Ikke muligt | Brugervenlig |
Konklusion
iTextpdf uddyber normalt rapportbidrag ved hjælp af Java til applikationsresultat
“IText er Java, men det genererer pdf, der passer til brugervenlig og kan generere krystalklare rapporter”
Fordele ved iText:
- API og applikationsbehandlingsgrænseflade på højt og lavt niveau
- Kompatibilitet i levering af slut-til-slut-tjenester (PEE)
- Text Flow Geneckeck tilgængelighed for mobilbrugere (TFRAM)
- Tilpasningsevne.
- Tilgængelighed på tværs af platforme.
Ulemper ved iText:
- Det er ikke i stand til at opnå specifikke designs.
- Der kræves grundig viden om OOP's koncepter.
Anbefalet læsning
- Java Reflection Tutorial med eksempler
- Java SWING Tutorial: Container, komponenter og håndtering af begivenheder
- JAVA-vejledning til begyndere: 100+ praktiske Java-videovejledninger
- Adgang modifikatorer i Java - vejledning med eksempler
- Java String med String Buffer og String Builder Tutorial
- Data Mart Tutorial - Typer, eksempler og implementering af Data Mart
- Java String indeholder () Metodevejledning med eksempler
- Java String Tutorial | Java strengmetoder med eksempler