I figured out how the set char spacing call works . . . adds the value,
does not scale. When I changed the algorithm
on that basis it works quite well to approximate the metrics of the printer
font. It would be great to find a way
to hit the metrics on the head . . . does the notion of subclassing the
font object have merit? Still looking for
other suggestions.
progress anyway.
Thanks,
Jerry Sampson
----- Forwarded by Jerry Sampson/ON/CheckFree on 02/15/02 12:59 PM -----
|---------+---------------------------->
| | Jerry Sampson |
| | |
| | 02/15/02 12:59 PM|
| | |
|---------+---------------------------->
>-------------------------------------------------------------------------------------------------------------------------------|
|
|
| To: [EMAIL PROTECTED]
|
| cc:
|
| Subject: Set Character Spacing Question(Document link: Jerry Sampson)
|
>-------------------------------------------------------------------------------------------------------------------------------|
Greetings.
I am trying to create a text string in a content byte object which has a
specific length. Since iText does not support user supplied
font width tables I am trying to adjust the character spacing to compensate
for the difference in the measured length using the basefont and the
desired length. The desired length is based on a printstream font which
does not exist in the pdf environment. I tried the following code:
// txt is an incoming text token that is being rendered in the PDF page
// c is the content byte object
BaseFont font =
BaseFont.createFont(BaseFont.HELVETICA,BaseFont.WINANSI,BaseFont.NOT_EMBEDDED);
float fs = txt.ps/10f; // font pontsize
float x = getX(txt.x,txt.units);
float y = getY(txt.y,txt.units);
float l = getPoints(txt.l,txt.units); // desired length of string in
points
float r = 0;
if (txt.iDir != 0)
r = 360-txt.iDir;
float tw = font.getWidthPoint(text,fs); // width of string using the
basefont
c.setFontAndSize(font,fs);
c.setCharacterSpacing(l/tw);
c.beginText();
c.showTextAligned(c.ALIGN_LEFT,text,x,y,r);
c.endText();
The result is not what i hoped for . . . the resulting length of the token
in the PDF does not match the length in the printstream as I expected.
Does anyone out there know how I can solve this problem? . . . I need to
get a PDF string length to match a specific
value.
With the Adobe library it was easy because you could set the width table
for a font to match any font you like . . . however that
lib is C only and has its own set of problems.
Is there some way to accomplish this with iText . . . building zillions of
custom
fonts in a font library is not an option. Could I subclass a font object
and provide widths? . . . Would they end up in the PDF
as a width table object associated with the font? Other ideas?
I am open to suggestions.
Thanks in advance,
Jerold Sampson
_______________________________________________
iText-questions mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/itext-questions