xmlgraphics-batik-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hans Stoessel" <hstoes...@pm-medici.ch>
Subject AW: AW: AW: Rendering text in SVG
Date Fri, 05 Mar 2004 16:40:25 GMT
Hi Thomas

I think, setting the TextPainter coul dbe another possibility to solve this
problem. My problem doing this way is to find the font parameters (fontname,
size, weight, style, ...). But I'm working...

I try it with the following method, but it isn't working until now:

    protected Point2D paintACI(AttributedCharacterIterator aci, Graphics2D
g2d, Point2D loc) {
        aci.first();

        TextNode.Anchor anchor =
(TextNode.Anchor)aci.getAttribute(GVTAttributedCharacterIterator.TextAttribu
te.ANCHOR_TYPE);

        //Adjust position of span
        Float xpos =
(Float)aci.getAttribute(GVTAttributedCharacterIterator.TextAttribute.X);
        Float ypos =
(Float)aci.getAttribute(GVTAttributedCharacterIterator.TextAttribute.Y);
        Float dxpos =
(Float)aci.getAttribute(GVTAttributedCharacterIterator.TextAttribute.DX);
        Float dypos =
(Float)aci.getAttribute(GVTAttributedCharacterIterator.TextAttribute.DY);
        if (xpos != null) loc.setLocation(xpos.doubleValue(), loc.getY());
        if (ypos != null) loc.setLocation(loc.getX(), ypos.doubleValue());
        if (dxpos != null) loc.setLocation(loc.getX()+dxpos.doubleValue(),
loc.getY());
        if (dypos != null) loc.setLocation(loc.getX(),
loc.getY()+dypos.doubleValue());

        //Set up font
        List gvtFonts =
(List)aci.getAttribute(GVTAttributedCharacterIterator.TextAttribute.GVT_FONT
_FAMILIES);
        Paint forg = (Paint) aci.getAttribute(TextAttribute.FOREGROUND);
        Float size = (Float) aci.getAttribute(TextAttribute.SIZE);
        if (size == null) {
            return loc;
        }
        //Stroke stroke = $$$
        //
(Stroke)aci.getAttribute(GVTAttributedCharacterIterator.TextAttribute.STROKE
);

        Float posture = (Float)aci.getAttribute(TextAttribute.POSTURE);
        Float taWeight = (Float)aci.getAttribute(TextAttribute.WEIGHT);

        if (forg instanceof Color) {
            g2d.setColor((Color)forg);
        }
        g2d.setPaint(forg);
        //g2d.setStroke(stroke); $$$

        String style = ((posture != null) && (posture.floatValue() > 0.0))
                       ? "italic" : "normal";
        String weight = ((taWeight != null) && (taWeight.floatValue() >
1.0))
                        ? "bold" : "normal";
      	String sFont = "";
				Iterator i = gvtFonts.iterator();
        //for (Iterator i = gvtFonts.iterator(); i.hasNext(); ) {
        	GVTFontFamily fam = (GVTFontFamily) i.next();
          sFont = fam.getFamilyName();
				//}
        int fStyle = Font.PLAIN;

        if (weight.equals("bold")) {
            if (style.equals("italic")) {
                fStyle = Font.BOLD | Font.ITALIC;
            } else {
                fStyle = Font.BOLD;
            }
        } else {
            if (style.equals("italic")) {
                fStyle = Font.ITALIC;
            } else {
                fStyle = Font.PLAIN;
            }
        }
        Font font = new Font(sFont, fStyle, (int) (size.floatValue() +
0.5f));
        g2d.setFont(font);

        //Get text and paint
        String txt = getText(aci);
        float advance = StringFormat.getWidth(txt, g2d.getFont());
        float tx = 0;
        if (anchor != null) {
            switch (anchor.getType()) {
            case TextNode.Anchor.ANCHOR_MIDDLE:
                tx = -advance / 2;
                break;
            case TextNode.Anchor.ANCHOR_END:
                tx = -advance;
            }
        }
        //printAttrs(aci);
        g2d.drawString(txt, (float)(loc.getX() + tx), (float)loc.getY());
        loc.setLocation(loc.getX()+(double)advance, loc.getY());
        return loc;
    }


I have copied this method from PDFTextPainter (FOP), but I can't find the
right font! The size, weight and style is OK. Do you know how I can find the
font?

Regards
Hans



> -----Ursprungliche Nachricht-----
> Von: Thomas DeWeese [mailto:Thomas.DeWeese@Kodak.com]
> Gesendet: Freitag, 5. Marz 2004 14:02
> An: Batik Users
> Betreff: Re: AW: AW: Rendering text in SVG
>
>
> Hans Stoessel wrote:
>
> > Hi
> >
> > I think I have found the right file. But how can I implement this?
> >
> > I use the jar files from Batik to use the classes from Batik. How can I
> > overwrite a class or method from a class in Batik?
>
>      You need to do what they do in the PDF transcoder and replace
> the bridge class for text in the BridgeContext with the
> PDFTextBridge:
>
>          PDFTextElementBridge pdfTextElementBridge;
>          pdfTextElementBridge = new
> PDFTextElementBridge(graphics.getFontInfo());
>          ctx.putBridge(pdfTextElementBridge);
>
>      You will likely need to modify the PDFTextBridge since you don't
> the font info, but the part about drawing with drawString should
> be mostly the same.
>
> > I use the following code to convert from SVG to WMF:
> >
> >   public boolean saveAsWMF() {
> >     boolean           bOK = true;
> >     FileOutputStream  oStream = null;
> >     SVGDocument    svgDoc = null;
> >     BridgeContext   ctx = null;
> >     UserAgent        userAgent = new UserAgentAdapter();
> >     DocumentLoader   loader = new DocumentLoader(userAgent);
> >     GVTBuilder       builder = new GVTBuilder();
> >     GraphicsNode   gvtRoot = null;
> >
> >      try {
> >          ctx = new BridgeContext(userAgent, loader);
> >          ctx.setDynamic(true);
> >          svgDoc = (SVGDocument)
> loader.loadDocument("C:\\Temp\\Test.svg");
> >          gvtRoot = builder.build(ctx, svgDoc);
> >
> >          WMF wmf = new WMF();
> >          WMFGraphics2D wmfGenerator = new WMFGraphics2D(wmf, 300, 200);
> >          wmfGenerator.setGDIPenDrawing(false);
> >
> >          oStream = new FileOutputStream(new File("C:\\Temp\\Test.wmf"));
> >          gvtRoot.paint(wmfGenerator);
> >          wmf.writePlaceableWMF(oStream, 0, 0, 300, 200, 72);
> >         oStream.close();
> >      }
> >      catch (FileNotFoundException e) {
> >        bOK = false;
> >      }
> >      catch (IOException e) {
> >        bOK = false;
> >      }
> >      return bOK;
> >    }
> >
> > I don't know how to solve my problem. Maybe you can give me a
> tip. Thanks.
> >
> > Regards
> > Hans
> >
> >
> >
> >
> >>-----Ursprungliche Nachricht-----
> >>Von: Thomas DeWeese [mailto:Thomas.DeWeese@Kodak.com]
> >>Gesendet: Donnerstag, 4. Marz 2004 16:39
> >>An: Batik Users
> >>Betreff: Re: AW: Rendering text in SVG
> >>
> >>
> >>Hans Stoessel wrote:
> >>
> >>
> >>>The problem is that you can't edit the text in PowerPoint f.e.
> >>
> >>if it isn't a
> >>
> >>>text object. And so it should be a text object...
> >>>
> >>>- Whats about this 'hack' in FOP? Where can I find that?
> >>
> >>    Check out http://xml.apache.org/fop
> >>
> >>    The hack lives in src/java/org/apache/fop/svg.  It is the
> >>replacement text bridge.
> >>
> >>
> >>>- Is it possible to use drawString instead of drawGlyphVector?
> >>
> >>Maybe if I
> >>
> >>>use an own class to draw my SVG text derived from
> SVGGraphics2D? In this
> >>>derived class I would replace drawGlyphVector with drawString...
> >>
> >>    This is essentially what the FOP hack does.
> >>
> >>
> >>>Thanks for the help
> >>>Hans
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>>-----Ursprungliche Nachricht-----
> >>>>Von: Thomas DeWeese [mailto:Thomas.DeWeese@Kodak.com]
> >>>>Gesendet: Donnerstag, 4. Marz 2004 14:02
> >>>>An: Batik Users
> >>>>Betreff: Re: Rendering text in SVG
> >>>>
> >>>>
> >>>>Hi Hans,
> >>>>
> >>>>Hans Stoessel wrote:
> >>>>
> >>>>
> >>>>
> >>>>>I convert a SVG in a WMF document using the WMFWriter from Piet
> >>>>
> >>>>Jonas and
> >>>>
> >>>>
> >>>>>Batik 1.5.
> >>>>
> >>>>>Now I have problems with the text rendering. The rendered text
> >>>>
> >>>>in the WMF
> >>>>
> >>>>
> >>>>>file is not a text object. It is graphic and the result on the
> >>
> >>screen is
> >>
> >>>>>really bad.
> >>>>>
> >>>>>- How is the text in the following SVG row rendered?
> >>>>>           <text x="11.1230469" y="387.1083984" style="stroke:none;"
> >>>>>xml:space="preserve">0</text>
> >>>>
> >>>>   It is drawn with Graphics2D.drawGlyphVector.
> >>>>
> >>>>
> >>>>
> >>>>>- Will the text be written with Graphics2D.drawString form the Batik
> >>>>>library?
> >>>>
> >>>>   No draw string isn't nearly powerful enough to handle SVG text.
> >>>>
> >>>>
> >>>>
> >>>>>Or is another Graphics2D method used? The developer of the WMF
> >>>>>library says, the Graphics2D methods of his library will be
> >>>>
> >>>>used instead of
> >>>>
> >>>>
> >>>>>the Graphics2D methods from Batik. And if the Batik library use
> >>>>
> >>>>drawString
> >>>>
> >>>>
> >>>>>the result would be OK.
> >>>>>
> >>>>>- Can I do something, that the text will be drawn with
> >>>>>Graphics2D.drawString?
> >>>>
> >>>>   The PDFTranscoder from the FOP project has a 'hack' so very simple
> >>>>text is drawn using 'drawString'.  You might look into using that.
> >>>>
> >>>>
> >>>>
> >>>>---------------------------------------------------------------------
> >>>>To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
> >>>>For additional commands, e-mail: batik-users-help@xml.apache.org
> >>>>
> >>>>
> >>>>
> >>>
> >>>
> >>>
> >>>---------------------------------------------------------------------
> >>>To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
> >>>For additional commands, e-mail: batik-users-help@xml.apache.org
> >>>
> >>
> >>
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
> >>For additional commands, e-mail: batik-users-help@xml.apache.org
> >>
> >>
> >>
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
> > For additional commands, e-mail: batik-users-help@xml.apache.org
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
> For additional commands, e-mail: batik-users-help@xml.apache.org
>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-users-help@xml.apache.org


Mime
View raw message