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.
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 .