Java Mailing List Archive

http://www.junlu.com/

Google
Google
Mailing List
Home
Forum Home
JBoss - Java Application Server
Tomcat - JSP/Servlet container
Struts - A MVC web framework
iText - An open source PDF Java Library
JDOM - JDOM XML Parser
JSP - A mailing list about Java Server Pages specification and reference
J2EE - A mailing list for Java(tm) 2 Platform, Enterprise Edition
J2EE Pattern - An interest list for Sun Java Center J2EE Pattern Catalog
Servlet - A mailing list for discussion about Sun Microsystem's Java Servlet API Technology
Struts & Hibernate
Subjects
JSP editor plugin for eclipse ?
org apache jasper JasperException: Unable to compile class for JSP
Tomcat: Connection reset by peer: socket write error
Cannot retrieve definition for form bean null
Struts Tiles Tutorial (free Struts training)
Where do I download Tomcat 4 0 6?
Data Access Object (DAO) pattern, example DAO 's
Where to download Tomcat v 4 1 24 from?
Tomcat 5 0 16 Requested resource not available
Servlet : Session invalidate
Oracle Connection Pooling in 3 2 2
Servlet action is currently unavailable
Tomcat/Struts Unicode Encoding/Decoding problems
Running a Simple JMS Example
Tomcat and webapplication specific java library path
Mapping in workers2 properties
org apache jasper JasperException
problem with html:text bean throwing exception
Cannot find message resources under key org apache struts action
   MESSAGE
Cannot find message resources under key org apache struts action MESSAGE
invalid direct reference problem with solution
Tool for jsp debug Try Sysdeo Eclipse Plugin
Tomcat 5 Cannot load JDBC driver class 'null ' SQL state: null
weblogic ejbc
java properties file
Jboss 3 2 3 Coyote Can 't re
Tomcat 5, Apache2 and mod jk2 integration problem
JBoss example problem new to J2EE
Value attribute of <html:checkbox
url string for connecting jboss to oracle
javax servlet ServletException: BeanUtils populate
5 0 18: Windows XP Pro vs Windows 2000
HTTP Status 404 The requested resource is not available
 
-none-

-none-

2007-08-15       - By Bill Ensley

 Back
A few months ago this message was posted to the list.

I have just got around to implementing it in my branch of iText.

The fix seems to work quite well, my question:

Is there a reason why this hasn't been integrated into the main
Trunk that I should be aware of when using it?

-Bill Ensley
www.bearprinting.com

> -- --Original Message-- --
> From: itext-questions-bounces@(protected)
> [mailto:itext-questions-bounces@(protected)] On
> Behalf Of John Hellerud
> Sent: Monday, April 30, 2007 9:50 AM
> To: itext-questions@(protected)
> Subject: [iText-questions] PdfGraphics2D.drawString()
> simulating bold, italic or bold-italic fonts.
>
> All,
>
> The PdfGraphics2D.drawString() method wasn't simulating bold,
> italic or bold-italic when a bold, italic or bold-italic
> specific version of the font was not found.
>
> The PdfGraphics2D.drawGlyphVector() method will produce the
> proper output, but it consumes a lot of memory and produces
> really large pdf files.
>
> The following PdfGraphics2D.drawString() method will simulate
> bold, italic or bold-italic when needed, and it contains the
> code I submitted earlier for horizontally scaled fonts.
>
> Note:
> On my machine the font.getFontName() and font.getName()
> values would be different when the java virtual machine was
> using a bold, italic or bold-italic version of a font, and
> the values were the same when it was simulating bold, italic,
> and bold-italic.
>
> I would prefer if there was some way of determining if itext
> doesn't have a bold, italic or bold-italic version of the
> font, and use that information to trigger the code to
> simulate a bold, italic, or bold-italic font.
>
> /**
>  * @(protected) Graphics2D#drawString(String, float, float)  */
> public void drawString(String s, float x, float y) {
>     if (s.length() == 0)
>         return;
>     setFillPaint();
>     if (onlyShapes) {
>        
> drawGlyphVector(this.font.layoutGlyphVector(getFontRenderContext(),
>             s.toCharArray(), 0, s.length(),
>             java.awt.Font.LAYOUT_LEFT_TO_RIGHT), x, y);
> //        Use the following line to compile in JDK 1.3
> //        
> drawGlyphVector(this.font.createGlyphVector(getFontRenderConte
> xt(), s), x, y);
>     }
>     else {
>         boolean restoreTextRenderingMode = false;
>         AffineTransform at = getTransform();
>         AffineTransform at2 = getTransform();
>         at2.translate(x, y);
>         at2.concatenate(font.getTransform());
>         setTransform(at2);
>         AffineTransform inverse = this.normalizeMatrix();
>         AffineTransform flipper =
> AffineTransform.getScaleInstance(1,-1);
>         inverse.concatenate(flipper);
>         double[] mx = new double[6];
>         inverse.getMatrix(mx);
>         cb.beginText();
>         cb.setFontAndSize(baseFont, fontSize);
>
>         // Check if we need to simulate an italic font.
>         // When there are different fonts for italic, bold,
> italic bold
>         // the font.getName() will be different from the
> font.getFontName()
>         // value. When they are the same value then we are
> normally dealing
>         // with a single font that has been made into an
> italic or bold
>         // font.
>         if (font.isItalic() &&
> font.getFontName().equals(font.getName())) {
>             float angle =
> baseFont.getFontDescriptor(baseFont.ITALICANGLE,
>                           1000);
>             float angle2 = font.getItalicAngle();
>
>             // We don't have an italic version of this font so we need
>             // to set the font angle ourselves to produce an
> italic font.
>             if (angle2 == 0) {
>                 // The JavaVM didn't have an angle setting for making
>                 // the font an italic font so use a default of
>                 // italic angle of 15 degrees.
>                 angle2 = 15.0f;
>             } else {
>                 // This sign of the angle for Java and PDF seams
>                 // seams to be reversed.
>                 angle2 = -angle2;
>             }
>
>             if (angle == 0) {
>                 mx[2] = angle2 / 100.0f;
>             }
>         }
>         cb.setTextMatrix((float)mx[0], (float)mx[1], (float)mx[2],
>             (float)mx[3], (float)mx[4], (float)mx[5]);
>
>
>         // Set the horizontal scaling to match the Java font
> if needed.
>         Float hscale = (Float)
> font.getAttributes().get(TextAttribute.WIDTH);
>         hscale = (hscale == null) ?
> TextAttribute.WIDTH_REGULAR : hscale;
>         cb.setHorizontalScaling(100.0f / hscale);
>
>         // Get the weight of the font so we can detect fonts
> with a weight
>         // that makes them bold, but the Font.isBold() value is false.
>         Float weight = (Float)
> font.getAttributes().get(TextAttribute.WEIGHT);
>         if (weight == null) {
>             weight = (font.isBold()) ? TextAttribute.WEIGHT_BOLD
>                                      : TextAttribute.WEIGHT_REGULAR;
>         }
>
>         // Check if we need to simulate a bold font.
>         if ((font.isBold() || weight >= TextAttribute.WEIGHT_SEMIBOLD)
>             && (font.getFontName().equals(font.getName()))) {
>
>             // Simulate a bold font.
>             float strokeWidth = font.getSize2D()
>                                 * (weight -
> TextAttribute.WEIGHT_REGULAR)
>                                 / 30f;
>
>             if (strokeWidth != 1) {
>                 cb.setTextRenderingMode(PdfContentByte.
>                     TEXT_RENDER_MODE_FILL_STROKE);
>
>                 cb.setLineWidth(strokeWidth);
>                 cb.setColorStroke(getColor());
>                 restoreTextRenderingMode = true;
>             }
>         }
>
>         double width = 0;
>         if (font.getSize2D() > 0) {
>             float scale = 1000 / font.getSize2D();
>             width = font.deriveFont(
>                     AffineTransform.getScaleInstance(scale, scale))
>                     .getStringBounds(s,
> getFontRenderContext()).getWidth()
>                     / scale;
>         }
>         if (s.length() > 1) {
>             float adv = ((float)width - baseFont.getWidthPoint(s,
> fontSize))
>                         / (s.length() - 1);
>             cb.setCharacterSpacing(adv);
>         }
>         cb.showText(s);
>         if (s.length() > 1) {
>             cb.setCharacterSpacing(0);
>         }
>
>         // Restore the original TextRenderingMode if needed.
>         if (restoreTextRenderingMode) {
>            
> cb.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL);
>         }
>
>         cb.endText();
>         setTransform(at);
>         if(underline)
>         {
>             // These two are supposed to be taken from the .AFM file
>             //int UnderlinePosition = -100;
>             int UnderlineThickness = 50;
>             //
>             double d = asPoints((double)UnderlineThickness,
> (int)fontSize);
>             setStroke(new BasicStroke((float)d));
>             y = (float)((double)(y) +
> asPoints((double)(UnderlineThickness), (int)fontSize));
>             Line2D line = new Line2D.Double((double)x,
> (double)y, (double)(width+x), (double)y);
>             draw(line);
>         }
>     }
> }
>
>
> --
> John Hellerud
>
>
> -- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
> -- ---- ---
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> __ ____ ____ ____ ____ ____ ____ ____ ____ ____
> iText-questions mailing list
> iText-questions@(protected)
> https://lists.sourceforge.net/lists/listinfo/itext-questions
> Buy the iText book: http://itext.ugent.be/itext-in-action/



-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- -----
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
__ ____ ____ ____ ____ ____ ____ ____ ____ ____
iText-questions mailing list
iText-questions@(protected)
https://lists.sourceforge.net/lists/listinfo/itext-questions
Buy the iText book: http://itext.ugent.be/itext-in-action/

©2008 junlu.com - Jax Systems, LLC, U.S.A.