raimanoj.vns (1) [Avatar] Offline

I am getting error message while opening a PDF/A compliant pdf file on Windows macjine. This pdf file was generated through iText on Unix machine. The code used to generate this pdf file is:

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.fmr.xtrac.logging.RUNTIMETrace;
import com.fmr.xtrac.util.XtracUtil;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;

* This is a class to generate a PDF report
public class PdfMaker
// the _document is the PDF file's layout
private Document _document;

// the writer used to write to the _document to produce the PDF file
private PdfWriter _writer;

// the output stream to write to the file
private ByteArrayOutputStream _baosPDF;

// empty space between two tables, headings, etc
private Paragraph _emptyPara;

// Common constants
private static final String REPORT_HEADING = "REPORT";
private static final String FILE_EXTENSION = ".pdf";
private static final String TIME_PATTERN = "mmddyyyy_HHmmss";
private static final String FOOTER = "footer";

private static final String ITEM1 = "Item1";
private static final String ITEM2 = "Item2";
private static final String ITEM3 = "Item3";

* This method initializes the components required for generating the PDF
private void init()
_document = new Document();
_baosPDF = new ByteArrayOutputStream();

_writer = PdfWriter.getInstance(_document, _baosPDF);
_writer.setPDFXConformance(PdfWriter.PDFA1A); }
catch (DocumentException dex)


* This method creates the PDF
* @return File representation of the PDF generated
public File createPDF()

File pdfFile = null;
File fontFile = createFontFile();

BaseFont bf = BaseFont.createFont(fontFile.getAbsolutePath(), BaseFont.WINANSI, true);

Font font = new Font(bf, 12);

_emptyPara = new Paragraph(" ", font);

// set the footer
HeaderFooter footer = new HeaderFooter(new Phrase(FOOTER, font), false);

Paragraph title = new Paragraph(REPORT_HEADING, font);


// General Details
addParagraphHeader("General", font);
RUNTIMETrace.debug(this, "Added the General details");

StringBuffer pdfFileName = new StringBuffer();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(TIME_PATTERN);
String dateAndTimeSuffix = simpleDateFormat.format(new Date());
pdfFile = File.createTempFile(pdfFileName.toString(), FILE_EXTENSION);
if (RUNTIMETrace.isDebugOn())
StringBuffer debugMsg = new StringBuffer(256);
debugMsg.append("PDF file : ");
debugMsg.append("created at location ").append(pdfFile.getCanonicalPath());
RUNTIMETrace.debug(this, debugMsg.toString());

_baosPDF.writeTo(new FileOutputStream(pdfFile));
RUNTIMETrace.debug(this, "Done with the PDF");
catch(IOException ioe)

catch(DocumentException docex)

RUNTIMETrace.debug(this, "Deleting the temporary font file");
return pdfFile;

* This method adds a paragraph to the PDF
* @param paragraphName : the name of the Paragraph
private void addParagraphHeader(final String paragraphName, final Font font) throws DocumentException
Paragraph generalPara = new Paragraph(paragraphName, font);

* This method adds the General details of the workitem to the PDF in a tabular form
* @throws DocumentException : an iText specific Runtime Exception
private void addGeneralDetails(final Font font) throws DocumentException
String item1 = "Item 1";
String item2 = "Item 2";
String item3 = "Item 3";

_document.add(new Paragraph("Item 1 : " + item1, font));
_document.add(new Paragraph("Item 2 : " + item2, font));
_document.add(new Paragraph("Item 3 : " + item3, font));


* Private method for creating font file
* @return File - font File object
private File createFontFile()
InputStream fontInputStream =

OutputStream out = null;
File file = null;
int length;

String fileNamePrefix = new StringBuffer("TestFont").append(
file = File.createTempFile(fileNamePrefix, ".ttf");

out = new FileOutputStream(file);
int lengthFromStream = fontInputStream.available();
byte[] buf = new byte[lengthFromStream];
while ((length = fontInputStream.read(buf)) > 0)
out.write(buf, 0, length);
catch (IOException ioe)

return file;

public static void main(String args[])
PdfMaker pdfMaker = new PdfMaker();


If the file is created on Window machine and opened on Window machine then no error is coming.

Please help me out.

--- Manoj
blowagie (284) [Avatar] Offline
Re: Getting error while opening a PDF/A compliant pdf file
You're not telling us what error you are getting, and you shouldn't use this forum to post questions. Use the mailing list please.