package test; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.io.FileOutputStream; import javax.swing.JComponent; import com.itextpdf.text.Chunk; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfTemplate; import com.itextpdf.text.pdf.PdfWriter; import org.das2.util.Entities; public class PdfUnicodeTextImageTest { public static final String FLAT_SYMBOL = "\u266D"; public static final String SHARP_SYMBOL = "\u266F"; public static final String RHO= Entities.decodeEntities("ρ"); public static final String DOUBLE_FLAT_SYMBOL = "\uD834\uDD2B"; public static final String DOUBLE_SHARP_SYMBOL = "\uD834\uDD2A"; public static void main(String[] args) throws InterruptedException { new PdfUnicodeTextImageTest(); Thread.sleep(2000); System.exit(0); } public PdfUnicodeTextImageTest() { try { final FileOutputStream fileOutputStream = new FileOutputStream("/tmp/unicode_test.pdf"); final Document document = new Document(); final PdfWriter pdf = PdfWriter.getInstance(document, fileOutputStream); try { document.open(); document.setPageSize(new com.itextpdf.text.Rectangle(500,800)); document.newPage(); printPage(document, pdf); } finally { document.close(); fileOutputStream.flush(); fileOutputStream.close(); } } catch (Exception e) { e.printStackTrace(); } } private void printPage(Document document, PdfWriter pdf) throws DocumentException { document.add(new Chunk(" ")); final PdfContentByte contentbytes = pdf.getDirectContent(); final PdfTemplate template = contentbytes.createTemplate(500, 800); final Graphics2D graphics2d = template.createGraphicsShapes(500, 800); StringPainter painter = new StringPainter(new Font("Arial Unicode MS", Font.PLAIN, 16)); painter.setBounds(50,50,200,100); painter.paint(graphics2d); graphics2d.dispose(); contentbytes.addTemplate(template, 0, 0); } private static class StringPainter extends JComponent { private Font font; public StringPainter(Font font) { this.font = font; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.setFont(font); g2.drawString("TEST: " + FLAT_SYMBOL + " " + DOUBLE_FLAT_SYMBOL + " " + Entities.decodeEntities("ρ"), 10, 50); g2.drawString("TEST: " + SHARP_SYMBOL + " " + DOUBLE_SHARP_SYMBOL + " " + Entities.decodeEntities("Ω"), 10, 80); } } }