I have a .rpt file. I want to read it programatically in java and save it in pdf file. I followed the solution multithread pdf conversion My source code provided below
final String rpt = "/Users/florapc/Desktop/Report/AcStatement.rpt"; final String sFilePath = "/Users/florapc/Desktop/Report/"; final String sFileName = "pdfreport"; final Object[] data = new Object[1]; for (int i = 0; i < data.length; i++) { // run(); Engine eng = new Engine(Engine.EXPORT_PDF); eng.setReportFile(rpt); //rpt is the report name System.out.println(" After set connection"); eng.setPrompt(data[i], 0); ReportProperties repprop = eng.getReportProperties(); // repprop.setPaperOrient(ReportProperties.DEFAULT_PAPER_ORIENTATION, ReportProperties.PAPER_FANFOLD_US); eng.execute(); System.out.println(" After excecute"); FileOutputStream fos = null; try { String FileName = sFileName + "_" + i; File file = new File(sFilePath + FileName + ".pdf"); if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } if (!file.exists()) { file.createNewFile(); } fos = new FileOutputStream(file); for (int k = 1; k <= eng.getPageCount(); k++) { fos.write(eng.getPageData(k)); } fos.flush(); fos.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } fos = null; } } }
After running my code I am unable to read the .rpt file and my pdf file becomes empty. Please help me out.
Advertisement
Answer
Finally I get a solution using iTextPdf library.
package com.fsl; import com.fsl.Main; import java.io.File; import java.io.FileOutputStream; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.time.LocalDateTime; import com.crystaldecisions.sdk.occa.report.application.ReportClientDocument; import com.crystaldecisions.sdk.occa.report.data.IParameterField; import com.crystaldecisions.sdk.occa.report.lib.ReportSDKException; import com.itextpdf.text.Anchor; import com.itextpdf.text.BadElementException; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Chapter; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.List; import com.itextpdf.text.ListItem; import com.itextpdf.text.Paragraph; import com.itextpdf.text.Phrase; import com.itextpdf.text.Section; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; public class iTextTest { private static String FILE = String.format("/Users/florapc/Desktop/Report/%s.pdf",getDateTimeString()); private static Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18, Font.BOLD); private static Font redFont = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.NORMAL, BaseColor.RED); private static Font subFont = new Font(Font.FontFamily.TIMES_ROMAN, 16, Font.BOLD); private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD); public static String getDateTimeString() { DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); LocalDateTime now = LocalDateTime.now(); return dtf.format(now); } public static void main(String[] args) { try { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(FILE)); document.open(); // Paragraph preface = new Paragraph(); // addEmptyLine(preface, 1); // addMetaData(document); addTitlePage(document); // addContent(document); document.close(); } catch (Exception e) { e.printStackTrace(); } } // iText allows to add metadata to the PDF which can be viewed in your Adobe // Reader // under File -> Properties private static void addMetaData(Document document) { document.addTitle("My first PDF"); document.addSubject("Using iText"); document.addKeywords("Java, PDF, iText"); document.addAuthor("Lars Vogel"); document.addCreator("Lars Vogel"); } private static void addTitlePage(Document document) throws DocumentException { Paragraph preface = new Paragraph(); // // We add one empty line addEmptyLine(preface, 1); generatePDFReport(preface, 1); // // Lets write a big header // preface.add(new Paragraph("Title of the document", catFont)); // // addEmptyLine(preface, 1); // // Will create: Report generated by: _name, _date // preface.add(new Paragraph( // "Report generated by: " + System.getProperty("user.name") + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ // smallBold)); // addEmptyLine(preface, 3); // preface.add(new Paragraph( // "This document describes something which is very important ", // smallBold)); // // addEmptyLine(preface, 8); //preface.add(new Paragraph( //"This document is a preliminary version and not subject to your license agreement or any other agreement with vogella.com ;-).", // redFont)); document.add(preface); // Start a new page document.newPage(); } private static void addContent(Document document) throws DocumentException { Anchor anchor = new Anchor("First Chapter", catFont); anchor.setName("First Chapter"); // Second parameter is the number of the chapter Chapter catPart = new Chapter(new Paragraph(anchor), 1); Paragraph subPara = new Paragraph("Subcategory 1", subFont); Section subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("Hello")); subPara = new Paragraph("Subcategory 2", subFont); subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("Paragraph 1")); subCatPart.add(new Paragraph("Paragraph 2")); subCatPart.add(new Paragraph("Paragraph 3")); // add a list createList(subCatPart); Paragraph paragraph = new Paragraph(); addEmptyLine(paragraph, 5); subCatPart.add(paragraph); // add a table createTable(subCatPart); // now add all this to the document document.add(catPart); // Next section anchor = new Anchor("Second Chapter", catFont); anchor.setName("Second Chapter"); // Second parameter is the number of the chapter catPart = new Chapter(new Paragraph(anchor), 1); subPara = new Paragraph("Subcategory", subFont); subCatPart = catPart.addSection(subPara); subCatPart.add(new Paragraph("This is a very important message")); // now add all this to the document document.add(catPart); } private static void createTable(Section subCatPart) throws BadElementException { PdfPTable table = new PdfPTable(3); // t.setBorderColor(BaseColor.GRAY); // t.setPadding(4); // t.setSpacing(4); // t.setBorderWidth(1); PdfPCell c1 = new PdfPCell(new Phrase("Table Header 1")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new PdfPCell(new Phrase("Table Header 2")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); c1 = new PdfPCell(new Phrase("Table Header 3")); c1.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(c1); table.setHeaderRows(1); table.addCell("1.0"); table.addCell("1.1"); table.addCell("1.2"); table.addCell("2.1"); table.addCell("2.2"); table.addCell("2.3"); subCatPart.add(table); } private static void createList(Section subCatPart) { List list = new List(true, false, 10); list.add(new ListItem("First point")); list.add(new ListItem("Second point")); list.add(new ListItem("Third point")); subCatPart.add(list); } private static void addEmptyLine(Paragraph paragraph, int number) { for (int i = 0; i < number; i++) { paragraph.add(new Paragraph(" ")); } // ReportClientDocument rcd = new ReportClientDocument(); // // String rptPath="/Users/florapc/Desktop/Report/AcStatement.rpt"; // // try { // rcd.open(rptPath, 0); // } catch (ReportSDKException e) { // e.printStackTrace(); // } // System.out.println(rptPath); // java.util.List<IParameterField> fld = null; // try { // fld = rcd.getDataDefController().getDataDefinition().getParameterFields(); // } catch (ReportSDKException e) { // e.printStackTrace(); // } // // java.util.List<String> reportContent = new ArrayList<String>(); // System.out.println(fld.size()); // for (int i = 0; i < fld.size(); i++) { // // System.out.println(fld.get(i).getDescription()); // String res=fld.get(i).getDescription().replaceAll("[^a-zA-Z0-9]", " "); // paragraph.add(new Paragraph(res)); // // // } } private static void generatePDFReport(Paragraph paragraph, int number) { ReportClientDocument rcd = new ReportClientDocument(); String rptPath="/Users/florapc/Desktop/Report/AcStatement.rpt"; try { rcd.open(rptPath, 0); } catch (ReportSDKException e) { e.printStackTrace(); } System.out.println(rptPath); java.util.List<IParameterField> fld = null; try { fld = rcd.getDataDefController().getDataDefinition().getParameterFields(); } catch (ReportSDKException e) { e.printStackTrace(); } java.util.List<String> reportContent = new ArrayList<String>(); System.out.println(fld.size()); for (int i = 0; i < fld.size(); i++) { System.out.println(fld.get(i).getDescription()); String res=fld.get(i).getDescription().replaceAll("[^a-zA-Z0-9]", " "); paragraph.add(new Paragraph(res)); } } }
I hope it will be helpfull to all .