itext tutorial convert data pdf report using java itext
Denna iText-handledning diskuterar hur man hanterar massdata till en säker, enstaka form av PDF-rapport med Java och iText Library:
iText är verktyget för att generera en konsoliderad rapport där vi kan manipulera bulkdata till den enda form av enhet som innehåller meningsfull information.
iText är ett Java PDF-bibliotek som används för att skapa och manipulera PDF-dokument genom att utveckla Java-program. Några av funktionerna i iText-biblioteket inkluderar att skapa interaktiva PDF-dokument, lägga till bokmärken, spara PDF-filer som bildfiler, dela upp och slå samman befintliga PDF-filer i flera PDF-filer etc.
Vad du kommer att lära dig:
Varför iText?
Det fungerar i en mångsidig miljö av en automatiserad rapport som produceras av specifika servrar som Apache Tomcat, JBoss, Junit. Det tillhandahåller ett användardefinierat dokument enligt användarens behov.
Är iText säkerhetsorienterad?
Det erbjuder sätt som dokument kan hämtas baserat på säkerhetsrelaterade operationer som lösenordsskyddade eller validerande ingångar från användaren som att öppna lönebesked genom att ange PAN-information.
Numera föredrar vi i allmänhet att spara data i mjuka kopior snarare än papperskopior. Det är bättre att lagra rapporter på servrar än papper. När du behöver rapporten kör du bara Java-filen och genererar den då och där.
Låt oss i den här artikeln försöka hitta lösningen på följande frågor:
vilket av följande är ett exempel på data mining
- Kan vi använda multifunktionalitet?
- Om det bara används för att förbereda rapporter?
- Var kan vi använda Itext?
- Om den kan skapa den nya rapporten?
- Jag är testare, hjälper det mig?
Vad är iText?
Utdata från iText-verktyget är en PDF-rapport integrerad av Java. Detta ärver PDF-beteenden, komponenter och genererar en kompatibel rapport.
iText är ett öppen källkods-API med en samarbetsmiljö, deltagande i fullvärdig, prisma-penetrering av ljus och grunden för generering av rapporter.
Till exempel: Tänk på ett exempel på en Indian Railways-biljett. Här vill vi ha en utskrift av den detaljerade sammanfattningen av biljettprocessen från att söka på platsens tillgänglighet till att boka biljetten.
Därefter kommer vi att förstå hur iText kan hjälpa oss med detta krav.
Några av egenskaperna är som följer:
- Komplett sammanfattning av ansökan (CSA)
- Lätt spårningsinformation (ETD)
- Enkel behandling av ansökan (EPA)
Hur man startar iText-rapporten?
Det är lätt att närma sig Itext via Java. Det illustreras med hjälp av ett exempel.
Business Analyst (BA) får Business Process Document (BPD) och Functional Specification Document (FSD) från klienten som förklarar deras förväntningar från applikationen.
Låt oss ta ett scenario. BA kom med flera krav på rapportinramning samt hur vår basprodukt kan stödja detta. Sådana specifikationer från ansedda kunder får oss att inte tappa projektet på grund av mångfald och förvirring om hur vi ska uppnå rapporten på ett kompatibelt sätt.
Varför uppstår sådan förvirring i genererade rapporter?
Detta beror på att de data som finns i applikationen bara visar speglingen av data i rapporten. Det rör sig inte för att kontrollera varje nod i applikationen (Ex. Som görs i MR-skanningen). Således är det det enklaste sättet.
Ja exakt. Men vår klient förväntar sig att data är dynamiska. Baserat på tillgängliga data bör rapporten genereras på ett dynamiskt sätt.
Låt oss diskutera detta med ett realtidsexempel.
Scenario 1: Statisk data kan vara hårdkodad och generera rapporter. Här ändras inte lånebeloppet och fastighetsvärdet före utbetalningen.
Se bilden nedan för ovanstående scenario:
Scenario 2 : I det här scenariot ökar fastighetsvärdet dag för dag och lånebeloppet bör minskas varje år och därmed är den förutsagda informationen dynamisk.
En kund kan komma och kontakta oss för att ge detaljerna för olika räkenskapsår eftersom han har ändrat mandatperioden och baserat på den hade EMI varierats. Om du har hårdkodat uppgifterna som visas i figuren nedan, kommer du att bli nyfiken.
Tänk på fallet där rapporten ska vara dynamisk. Vi kan inte lägga fram det som det är. Vi måste göra den tekniska inspektionen och gå igenom kraven tydligt innan vi börjar utveckla och testa.
Vi måste fokusera mycket tydligt på designdelen där godkännandet görs från Business Analyst. Det är ett bra tillvägagångssätt eftersom alla UAT-frågor som tas upp senare inte kan påpekas för oss. Lösningen för detta problem med generering av dynamisk rapport förutses helt enkelt använda Java-koncept för att generera en rapport.
Hur man kallar en rapport?
Nedanstående diagram illustrerar processen för att generera en rapport:
Hur åberopar jag en rapport via JSP?
Oavsett var vi kallar Java är det nödvändigt att göra UI-design eftersom det fungerar som en vägkarta för att gå vidare från fronten. Det är ett enkelt sätt eftersom vi kan lära oss rapportsamtalet.
Låt oss överväga ett exempel:
Software Report
Vi kan konfigurera rapporten på detta sätt:
- Rapportnamn: Programrapport (visas i applikationen)
- Rapportera samtal via JS: Exempelrapport
- Släpp-meny: Flera rapporter kan integreras
- Vid klick: JavaScript-funktion
Hur kan testare initiera rapporter?
Testare föredrar vanligtvis regressionstestning genom automatiseringsskript med hjälp av gurka-ramverket, nyckelordsdrivet ramverk och datadrivet ramverk.
För att tillhandahålla rapporten baserat på kundens krav kan vi fortsätta med färdigbyggd arkitektur, dvs iText där det inbyggda verktyget ärver reporterfilens egenskaper och beteende samt artefakter som ska levereras.
Testare kan göra den konsoliderade rapporten som återstående buglista (RBL), testleveransprocent, mappning av bugg-ID baserat på respektive faser som SIT, UAT och produktionstester med hjälp av iText Java.
Tänk på ett scenario som måste konfigurera flera rapporter.
Koden nedan illustrerar hur man använder i JSP, vilket är vad vi tittar på i fronten. Följande metod används:
Software Report Software Report1 Software Report2
Hur åberopar jag JavaScript (JS)?
Generellt kan vi göra valideringar i JS, men du kan göra det även i Java. JavaScript-executor har inkluderats i vårt paket för att ringa funktion och att åberopa programmet för att generera en rapport som är mycket kompatibel.
Det kan användas för att åberopa (anrop) metoden med ett ägarobjekt som ett 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 } }
Ovanstående metod hanterar onload () funktion som kan åberopas i applikationen för att vara mycket mångsidig som utlöser webbadressen för att generera rapport.
Hur man bygger funktionen i Java-rapport?
Java hanterar varningar och undantag i programmet och kör också rapportgenerering.
Låt oss illustrera detta med hjälp av ett exempel.
Document Doc =new Document ();
Det är sättet att skapa dokumentet och det är också plattformen som integrerar rapporten.
Doc.open();
Ovanstående kommando används för att öppna dokumentet. Det är viktigt att inkludera detta kommando som om det inte ingår, det kommer att kasta dokumentundantag.
Doc.close();
Ovanstående kommando används för att stänga dokumentet vilket indikerar JVM att dokumentet har accepterat att sluta skriva. Det är viktigt att inkludera detta kommando som om det inte ingår, det kommer att kasta dokumentundantag.
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(RESULT));
Ovanstående kommando visar dokumentet som integrerar PDF-egenskaperna genom PDFWriter, anropar dokumentet och gör det synligt.
Paragraph para = new Paragraph ();
Ett stycke skriver förekomsten av autofit-innehållet och skriver även kraven på kravet.
Doc.setpercentage(%to be given);
I ovanstående kommando har ett dokument åberopats för att anropa PDF-filen för att vara kompatibel enligt definitionen av procenten som ingår.
public static final String output FileName = 'sample output/Automation/sample report.pdf';
Ovanstående kommando visar dokumentnamnet, inkluderat i dubbla citattecken, och den angivna platsen för att lagra filen när rapporten klickas.
hur man programmerar datorer för nybörjare
writer. setPdfVersion(PdfWriter.VERSION_1_9);
Här visar det hur du ställer in PDF-versionen i rapportgenerering.
document. setPageSize (PageSize.A4);
Vi kan också ställa in sidstorleken för hur rapporten ska levereras baserat på kraven. Sidstorleken som A3, A4, A5, etc.
document. setMargins(24, 43, 34, 43);
Vi kan använda ovanstående funktionalitet för att ställa in marginalerna och vi kan använda autofit-metoden för att passa den normalt i dokumentet.
document.setMarginMirroring(true);
Ovanstående kommando visar metoden för inställning av marginalspegel.
Hantering av varningar och undantag
Det är viktigt att hantera varningar och undantag i Java.
Några av varningarna som vi stöter på under körning är listade nedan:
- NoSuchElement Undantag
- Null Pointer Exception
- Array Index bunden till undantag
- Påståendefel
- Obehandlat varningsundantag
- SQL-undantag
- Undantag för timeout
- Dokumentundantag
Ibland kan utvecklaren också skriva ut undantaget från ett försök-fångstblock. Undantaget är inneslutet under fångsten.
Exempel:
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); }
Exempel på resultat: Positivt scenario
Ange numret som ska kontrolleras: 2
Jämnt nummer
Exempel på resultat: Negativt scenario
Ange numret som ska kontrolleras: a
Ett undantag inträffade: Olagligt formatundantag
Förklaring:
Ett tal måste anges som inmatning eftersom vi har definierat 'n' som ett heltal i ovanstående kodexempel. Om vi skriver in några alfabet där det försöker få resten (% modul används) kommer det inte att hämta några data och kommer bara att kasta undantaget med hjälp av fångstblock.
Den exakta skillnaden mellan fel och undantag i Java:
Ett fel hindrar dig från att köra programmet men ett undantag kommer att fångas när du kör programmet medan det inte stoppar din körning.
Logga en fillogg:
Att skriva loggen för varje metod eller modul gör att vi identifierar var JVM slutar köra. En logg visar vanligtvis värdet där det lagras i den angivna loggfilen och på vilket sätt processorn kör Java-programmet i applikationen.
Skillnad mellan System.out.println (SOP) och Log:
Båda skriver ut värdet eller visar upp vad innehållet anges i dubbla citat. Men skillnaderna mellan dessa två är: Medan programmet körs skriver programmet ut värdena på konsolen med SOP-kommando. Men när vi väl har raderat innehållet i konsolen är det svårt att hitta värdet. Detta händer också när vi har flera SOP.
I grund och botten kan Logg-fabrikskommandot hämta och uppdatera värdena. Vi kan visa loggfilen till varje pris eftersom den skriver varje gång vid varje körning med systemdatum och -tid.
Exempel:
private static Log logFile= LogFactory.getLog(SampleProgram.class);
Servrar
Servrar spelar en viktig roll i företaget eftersom det kan avgöra om programkörningen är godkänd eller inte.
Lokala servrar är servrarna där vi kan köra programmet i vår lokala maskin. Vi kan använda följande lokala servrar:
- Apache Tomcat
- JBoss
När koden är i Ready State, den ska distribueras till den angivna servern och det kräver en omstart. Vi kan använda följande servrar:
- Oracle Weblogic
- IBM Websphere
Provprogram:
Tänk på programmet där det kan bearbeta 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
I allmänhet behöver användare rapportdokumenten i ett specifikt format eftersom rapporterna tydligt måste representera vad och hur du vill visa resultaten. IText hjälper dig med detta.
Provprogram
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”); }}}
Används iText för att skapa en ny eller uppdatera en befintlig?
En fråga kan uppstå om iText bara används för att skapa en ny PDF? Svaret är nej, förutom att skapa nya PDF-rapporter, erbjuder iText också några funktioner som att uppdatera en befintlig pdf och tillhandahålla den konsoliderade utdata som inkluderar den uppdaterade ändringen.
Exempelkod:
// 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 är den nya tekniken som passar i det tillgängliga utrymmet i pdf och som inte kräver något att följa med.
Provprogram:
doc.open(): doc.add(new chunk (“1st order”)); doc.add(new chunk(“2nd order”)); doc.add(new chunk(“3rd order”)); doc.close();
Vem kan använda iText?
Profil | Utveckling | Visa åtkomst |
---|---|---|
Utveckling | Möjlig | Användarvänlig |
Testare | Delvis möjligt | Användarvänlig |
Affärsanalytiker | Omöjligt | Användarvänlig |
Kund | Omöjligt | Användarvänlig |
Slutsats
iTextpdf utarbetar vanligtvis rapportbidrag med Java för applikationsresultat
'IText är Java, men det genererar pdf som passar som användarvänligt och kan generera kristallklara rapporter'
Fördelar med iText:
- Hög- och lågnivå Application Processing Interface (API)
- Kompatibilitet i tillhandahållande av slut-till-slut-tjänster (PEE)
- Textflöde kontrollerar om tillgänglighet för mobilanvändare (TFRAM)
- Anpassningsförmåga.
- Plattforms tillgänglighet.
Nackdelar med iText:
- Det går inte att uppnå specifika mönster.
- Grundlig kunskap om OOP: s koncept krävs.
Rekommenderad läsning
- Java Reflection Tutorial med exempel
- Java SWING-handledning: Container, komponenter och händelsehantering
- JAVA-handledning för nybörjare: 100+ praktiska Java-videohandledning
- Åtkomstmodifierare i Java - Handledning med exempel
- Java String med String Buffer och String Builder Tutorial
- Data Mart Tutorial - Typer, exempel och implementering av Data Mart
- Java String innehåller () Metodhandledning med exempel
- Java String Tutorial | Java-strängmetoder med exempel