🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.lang.postscript
2 messages
2 total messages Started by Mark Klamerus Thu, 27 Aug 1992 14:02
Absolutely sized fonts
#1990
Author: Mark Klamerus
Date: Thu, 27 Aug 1992 14:02
11 lines
983 bytes
	Is there a way to absolutely specify the height and width of
	a fixed font (like courier).  I need to create letters of a
	sized which completely fits within a box and which fills the
	box.  I need to know that given an x,y position I can draw
	a box which is 300 x 500 (width by height) and draw a character
	in it.  I essentially need the info from the FontBBox.

	thanks,

	Mark
Re: Absolutely sized fonts
#1991
Author: Ciaran McHale
Date: Thu, 27 Aug 1992 15:17
94 lines
2995 bytes
In <9208271402.AA20109@enet-gw.pa.dec.com>
mek@hydrox.enet.dec.com (Mark Klamerus) writes:
>	Is there a way to absolutely specify the height and width of
>	a fixed font (like courier).  I need to create letters of a
>	sized which completely fits within a box and which fills the
>	box.  I need to know that given an x,y position I can draw
>	a box which is 300 x 500 (width by height) and draw a character
>	in it.  I essentially need the info from the FontBBox.

This may or may not be what you're looking for. It takes a string, the
name of the font you want it set in and the coordinates of a rectange in
which you want the text to be set. The string will be scaled to fit into
the rectangle, even if this means scaling it by different amounts
horizontally and vertically.


----cut here----
%!

/scaleTextToFitBox
%  input: string font-name x1 y1 x2 y2
% output:
% notes: prints str in the box (specified by the coordinates on the
%	 stack), but does appropriate scaling so that the text fits
%	 exactly.
{
	0 begin		% local dictionary
	/by2 exch def /bx2 exch def
	/by1 exch def /bx1 exch def
	/bh by2 by1 sub def % height of box
	/bw bx2 bx1 sub def % width of box
	/font exch def
	/str exch def

	gsave
		font findfont bh scalefont setfont % 1st guess at font size
		newpath
		0 0 moveto
		str true charpath flattenpath pathbbox
		/ty2 exch def /tx2 exch def
		/ty1 exch def /tx1 exch def
		/th ty2 ty1 sub def % height of text
		/tw tx2 tx1 sub def % width of text

		newpath
		bx1 tx1 sub by1 ty1 sub moveto
		bw tw div bh th div scale %scale the text to fit the box
		str show
	grestore
	end
}
dup 0 14 dict put
bind def

%
% Some code to show the above function in action
%

/box
%  input: x1 y1 x2 y2
% output:
% notes: Constructs the path of a box given by the coords on the stack
{
    0 begin	% local dictionary
	/y2 exch def /x2 exch def
	/y1 exch def /x1 exch def

	newpath
	x1 y1 moveto
	x2 y1 lineto
	x2 y2 lineto
	x1 y2 lineto
	closepath
    end
}
dup 0 4 dict put
bind def


(Hello World)		% string to be printed
/Times-Roman		% font used to print string
100 100 400 200		% coordinates of rectangle
4 copy box stroke	% this line is a debug aid (draws box around the text)
scaleTextToFitBox

showpage
----cut here----


Ciaran.
-- 
Ciaran McHale                                                             ----
Department of Computer Science, Trinity College, Dublin 2, Ireland.       \bi/
Telephone: +353-1-7021539 FAX: +353-1-772204 email: cjmchale@dsg.cs.tcd.ie \/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads