Hmm... but in that case wouldn't it also paint incorrectly on screen, no?

It looks fine when painted on a JFrame!

Justin


On 15 Nov 2009, at 13:58, Paulo Soares wrote:

> It may be a limitation of the java.awt.Font.layoutGlyphVector() on 
> surrogates.
> 
> Paulo
> 
> ----- Original Message ----- 
> From: "Justin Dolezy" <[email protected]>
> To: <[email protected]>
> Sent: Saturday, November 14, 2009 6:21 PM
> Subject: [iText-questions] Some unicode chars incorrect when painteddirectly 
> (Double sharp and double flat musical symbols)
> 
> 
>> Hi,
>> 
>> I'm creating PDF content by drawing direct to the Graphics2D surface (via 
>> PdfTemplate.createGraphicsShapes). It's my understanding that no fonts are 
>> (or even need to be) embedded, so what is draw to the Graphics2D is what 
>> will appear on the PDF.
>> 
>> However there are 2 unicode musical symbol chars (double flat: 𝄫  and 
>> double sharp: 𝄪) which do not appear correctly - they actually appear as 
>> Far Eastern characters (looks Chinese to my uneducated guess!). The 
>> regular flat and sharp musical symbols are fine.
>> 
>> I'm running this on Mac OS X - code pasted below so you can reproduce this 
>> easily. Windows machines will need the Arial Unicode MS font installed.
>> 
>> All the symbols appear fine if I put the StringPainter widget below in a 
>> JFrame, but make them paint to the PDF and it goes wrong.
>> 
>> I'm guessing this is an iText bug?  Or am I doing something wrong here? 
>> Seems pretty straightforward!
>> 
>> Thanks for any tips or confirmation that it's a bug  :)
>> Justin
>> 
>> 
>> --- EXAMPLE CODE DEMONSTRATING THE PROBLEM IN THE OUTPUT PDF: ----
>> 
>> package com.neckdiagrams.exporters;
>> 
>> import java.awt.Dimension;
>> import java.awt.Font;
>> import java.awt.Graphics;
>> import java.awt.Graphics2D;
>> import java.io.FileOutputStream;
>> 
>> import javax.swing.JComponent;
>> 
>> import com.lowagie.text.Chunk;
>> import com.lowagie.text.Document;
>> import com.lowagie.text.DocumentException;
>> import com.lowagie.text.pdf.PdfContentByte;
>> import com.lowagie.text.pdf.PdfTemplate;
>> import com.lowagie.text.pdf.PdfWriter;
>> 
>> public class PdfUnicodeTextImageTest
>> {
>>   public static final String FLAT_SYMBOL  = "\u266D";
>>   public static final String SHARP_SYMBOL = "\u266F";
>> 
>>   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.lowagie.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);
>>   }
>> 
>>   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, 10, 50);
>>           g2.drawString("TEST: " + SHARP_SYMBOL + "  " + 
>> DOUBLE_SHARP_SYMBOL, 10, 80);
>>       }
>>   }
>> }
>> 
>> 
> 
> 
> ------------------------------------------------------------------------------
> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
> trial. Simplify your report design, integration and deployment - and focus on 
> what you do best, core application coding. Discover what's new with
> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
> _______________________________________________
> iText-questions mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/itext-questions
> 
> Buy the iText book: http://www.1t3xt.com/docs/book.php
> Check the site with examples before you ask questions: 
> http://www.1t3xt.info/examples/
> You can also search the keywords list: http://1t3xt.info/tutorials/keywords/


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions

Buy the iText book: http://www.1t3xt.com/docs/book.php
Check the site with examples before you ask questions: 
http://www.1t3xt.info/examples/
You can also search the keywords list: http://1t3xt.info/tutorials/keywords/

Reply via email to