Hi,
I use iText to generate PDF documents and it works great for me, but I face the following problem when I generate PDF with wingding font embedded inside it.
When I render characters that wingding can display (java.awt.font.canDisplay(char)) on a JFrame, I can correctly see the symbols. But if I generate PDF and then open it in Acrobat it displays rectangles (represenging non-printable characters, I guess). The same is the case with xpdf viewer(linux).
The code listed at the end of this mail first displays the characters on JFrame, when window is closed it generates the document with wingding embedded inside it (note that I do set its encoding to cp1252 as required).
Could you please give me some hint on why is this happening or is this at all a problem of PDF document generation.
Thanks,
Bharat.
******************
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;
import com.lowagie.text.pdf.*;
class WingDing extends JFrame
{
public static void main(String[] s)
{
WingDing t = new WingDing();
}
{
public static void main(String[] s)
{
WingDing t = new WingDing();
}
int h=170;
int w=225;
public WingDing()
{
int w=225;
public WingDing()
{
addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
generatePDF();
System.exit(0);
}
}
);
new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
generatePDF();
System.exit(0);
}
}
);
setSize(w,h);
show();
}
show();
}
public void paint(Graphics g1)
{
java.awt.Font f = new java.awt.Font("Wingdings", java.awt.Font.PLAIN, 12);
g1.setFont(f);
{
java.awt.Font f = new java.awt.Font("Wingdings", java.awt.Font.PLAIN, 12);
g1.setFont(f);
String sDisplayable = new String(new char[] {9985, 9986, 9990, 9991, 9992, 9993});
System.out.println("f.canDisplay(9985)="+f.canDisplay((char) 9985));
System.out.println("f.canDisplayUpTo(...)="+f.canDisplayUpTo(sDisplayable));
System.out.println("f.canDisplay(9985)="+f.canDisplay((char) 9985));
System.out.println("f.canDisplayUpTo(...)="+f.canDisplayUpTo(sDisplayable));
//String sNonDisplayable = "Hello world";
g1.drawString(sDisplayable,50,50);
//g1.drawString(sNonDisplayable,50,75);
}
//g1.drawString(sNonDisplayable,50,75);
}
void generatePDF()
{
{
DefaultFontMapper defaultFontMapper = new DefaultFontMapper();
defaultFontMapper.insertDirectory("c:\\winnt\\fonts");
defaultFontMapper.insertDirectory("c:\\winnt\\fonts");
//set encoding to CP1252
HashMap hmBaseFonts = defaultFontMapper.getMapper();
Iterator itr = hmBaseFonts.values().iterator();
Iterator itrKeys = hmBaseFonts.keySet().iterator();
HashMap hmBaseFonts = defaultFontMapper.getMapper();
Iterator itr = hmBaseFonts.values().iterator();
Iterator itrKeys = hmBaseFonts.keySet().iterator();
while (itr.hasNext())
{
DefaultFontMapper.BaseFontParameters bf = (DefaultFontMapper.BaseFontParameters) itr.next();
bf.encoding = com.lowagie.text.pdf.BaseFont.CP1252; //currently only interested in wingdings
}
{
DefaultFontMapper.BaseFontParameters bf = (DefaultFontMapper.BaseFontParameters) itr.next();
bf.encoding = com.lowagie.text.pdf.BaseFont.CP1252; //currently only interested in wingdings
}
com.lowagie.text.Rectangle rPage = new com.lowagie.text.Rectangle(w, h);
Document document = new Document(rPage, 0.0f, 0.0f, 0.0f, 0.0f);
try
{
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("WingDing.pdf"));
document.open();
PdfContentByte cb = writer.getDirectContent();
Graphics2D g2 = cb.createGraphics(w, h, defaultFontMapper);
Graphics2D g2 = cb.createGraphics(w, h, defaultFontMapper);
paint(g2);
g2.dispose();
document.close();
System.out.println("WingDing.pdf successfully generated!!!");
}
catch(Exception e)
{
System.out.println("Failed to generate WingDing.pdf");
}
}
}
document.close();
System.out.println("WingDing.pdf successfully generated!!!");
}
catch(Exception e)
{
System.out.println("Failed to generate WingDing.pdf");
}
}
}
Do you Yahoo!?
Exclusive Video Premiere - Britney Spears
