Display 24. Changing Entire Row Height and Vertical Alignment 
Sometimes people assume that when they have very long text that the solution is the CELLHEIGHT style attribute, 
but that is not the case. With ODS, the height of a cell will increase to automatically fit what is inside the cell. You can 
actually impact the height of a cell that is going to contain long text by adjusting the WIDTH or CELLWIDTH attribute. 
One thing about both PDF and HTML is that the destinations are smart enough to flow or wrap text within a specified 
cell width. For the next example, SASHELP.CARS has been modified to have some phrases by Lewis Carroll added 
to some of the values for the MODEL variable. You can see the full code when you download the ZIP file of 
programs.  
The program that alters the cell width attribute. Note that you need to use CELLWIDTH= for version 9.1.3 or earlier 
and you can use WIDTH= or CELLWIDTH= in version 9.2 or later. 
proc report data=cars nowd; 
title '1a) Narrow Width Causes Wrapping That Influences Cell Height'; 
column make model type msrp invoice; 
define model / style(column)={width=1.0in}; 
run; 
proc report data=cars nowd; 
title '1b) Making Model Column Wider Changes Wrapping and Height'; 
column make model type msrp invoice; 
define model / style(column)={width=2.0in}; 
run; 
Notice how, in Display ~25x~, the cell heights for all the data cells have automatically adjusted to accommodate the 
defined width of 1”. But in Display ~26x~, which was the result of only changing the CELLWIDTH attribute to 2”, some 
of the higher cells in the first example now have enough width to “spread out”. Therefore, the cells are not as high in 
report 1a as they were in report 1b. 
You might have noticed that some of our code uses WIDTH versus CELLWIDTH or HEIGHT versus CELLHEIGHT or 
OUTPUTWIDTH versus WIDTH. The fact is that any version of SAS after 9.2 will use either attribute name. This is 
true of other attributes, such as FOREGROUND versus COLOR and BACKGROUND versus 
BACKGROUNDCOLOR. But if you are still using version 9.1.3 or earlier, then you need to use the original style 
attribute, as documented for your version of SAS. The relevant documentation topic is entitled, “Style Attributes and 
Their Values.”  
21 
Pdf form fill - C# PDF Form Data fill-in Library: auto fill-in PDF form data in C#.net, ASP.NET, MVC, WinForms, WPF
Online C# Tutorial to Automatically Fill in Field Data to PDF
convert fillable pdf to word fillable form; create a pdf form that can be filled out
Pdf form fill - VB.NET PDF Form Data fill-in library: auto fill-in PDF form data in vb.net, ASP.NET, MVC, WinForms, WPF
VB.NET PDF Form Data fill-in library: auto fill-in PDF form data in vb.net, ASP.NET, MVC, WinForms, WPF
.net fill pdf form; converting pdf to fillable form
Display 25. Changing Cell Width to “Flow” Long Text 
Display 26. Adjusting Width Impacts Cell Height 
22 
C# WPF PDF Viewer SDK to annotate PDF document in C#.NET
Text box. Click to add a text box to specific location on PDF page. Line color and fill can be set in properties. Copyright © <2000-2016> by <RasterEdge.com>.
create a fillable pdf form from a pdf; convert pdf to fillable pdf form
VB.NET PDF Password Library: add, remove, edit PDF file password
passwordSetting.IsAnnot = True ' Allow to fill form. passwordSetting document. passwordSetting.IsAssemble = True ' Add password to PDF file.
pdf add signature field; convert word form to fillable pdf
One of the last style changes we will show is a new (with SAS 9.2) style attribute that can be used for text decoration  
to underline, overline, or strike through text. For example, when people use the JOURNAL style, they frequently want 
to underline the column header values. In the past, this was something that you could do only with RTF or HTML 
using destination-specific syntax. However, starting with SAS 9.2, using the TEXTDECORATION style attribute, this 
feature became available for PDF, as well as the other destinations. Consider the following code that produced 
Display ~27x~. Not only does it underline the column headers, but it also uses the LINK= option of the SAS TITLE 
statement to insert a hyperlink into the REPORT and ODS ESCAPECHAR with the PREIMAGE attribute to insert a 
logo into the report. 
ods escapechar='^'; 
proc report data=sashelp.cars(obs=20) nowd 
style(report)={width=50%} 
style(header)={fontweight=bold fontsize=14pt textdecoration=underline}; 
where substr(make,1,1) in ('A','B','C'); 
title j=l '^{style[preimage="c:\sgf2014\create_superhero.png"] }'  
j=r 'My Report'; 
title2 link="http://marvel.com/games/play/31/create_your_own_superhero" 
'Create Your Own SuperHero}'; 
column make model msrp mpg_city; 
run; 
Display 27. Using ODS ESCAPECHAR and Other Style Changes 
What you will notice is that the hyperlink for the Marvel.com site is highlighted differently in PDF (with a blue box) 
versus HTML, but both links, when clicked, will take you to a website where you can create your own superhero. For 
this paper, Cynthia was HTMLWoman and Scott was PDF Guy. 
The final word on controlling your output is that it will all come down to style in the end. Whether you use style 
templates, style overrides or ODS ESCAPECHAR, it will be worth your time to invest in a study of ODS styles. Last, 
but certainly not least, we are going to focus on our two destinations and how they work with non-tabular output. 
NON TABULAR OUTPUT 
There are other types of output other than tables in your output.  We have mentioned Titles and Footnotes.  But there 
are other types of non-tabular output like images, SAS/GRAPH, and ODS GRAPHICS we have to think about when 
designing our output.  Each destination handles these differently.  We will discuss images first.  Three very common 
23 
C# PDF Password Library: add, remove, edit PDF file password in C#
passwordSetting.IsAnnot = true; // Allow to fill form. passwordSetting document. passwordSetting.IsAssemble = true; // Add password to PDF file.
change font size in fillable pdf form; create fillable form pdf online
VB.NET PDF - Annotate PDF with WPF PDF Viewer for VB.NET
Text box. Click to add a text box to specific location on PDF page. Line color and fill can be set in properties. Copyright © <2000-2016> by <RasterEdge.com>.
change font size in pdf fillable form; convert pdf to fillable form online
ways to use images are as a background, pre-image, and post-image.  In the ODS PDF destination the DPI (dot per 
inch) of the image determines the size that will be displayed.  It’s good to remember the higher the image DPI the 
more precise the appearance of the image.  Here is an example using the same image with different image DPIs. 
ods escapechar = '^'; 
title '^{style [preimage="c:\sgf2014\SAS_logo150.jpg"] my title w/SAS @ 150 DPI}'; 
ods pdf file="prt_image.pdf"; 
proc print data=sashelp.class(obs=1);run; 
ods text = '^{style [preimage="c:\sgf2014\SAS_logo100.jpg"] text statement w/SAS @ 100 
DPI}'; 
ods _all_ close; 
Display 28.  Images Displayed within ODS PDF Destination 
Notice the pre-image on the title statement has image DPI of 150.  The image on the text statement below the table 
has image DPI of 100.  Understanding the different sizes of the images will help you plan the space you use on the 
page.  Using the properties of the image file will tell you initial size of the image. 
Display 29. Image Property File 
24 
VB.NET PDF - Annotate PDF Online with VB.NET HTML5 PDF Viewer
fill color and transparency are all can be altered in properties. Drawing Tab. Item. Name. Description. 7. Draw free form. Users can draw freehand annotation on
pdf fillable forms; pdf fillable form creator
C# HTML5 PDF Viewer SDK to annotate PDF document online in C#.NET
fill color and transparency are all can be altered in properties. Drawing Tab. Item. Name. Description. 7. Draw free form. Users can draw freehand annotation on
create fillable forms in pdf; convert pdf to fill in form
The properties of the image will show you the height, width, and DPI of the image.  Using simple math you can divide 
the height and width by the DPI to calculate its size.   
Width will be 500 / 150 = 3.33 inches  
Height will be 170 / 150 = 1.19 inches 
The other image had an image DPI of 100.  That image has a larger height and width since its divisor is only 100 
rather than 150.   
ODS PDF has a default DPI equal to 150.  When ODS PDF encounters an image that is not 150 DPI, it will perform 
some internal calculations to scale the image.  The second image will grow bigger since the image DPI was less than 
the PDF’s default DPI.  A good guideline is to always use images with a DPI of 150 to ensure no surprises occur 
when placing an image inside your PDF file.  Of course using images with multiple image DPIs within one output will 
result in scaling. 
If you cannot change your image DPI, you can always set the default DPI for ODS PDF by using the “DPI=n” (where 
n is the DPI of your choice) attribute on your ODS PDF statement.  
ods pdf file="prt_image.pdf" dpi=100; 
Now ODS HTML handles images much differently that ODS PDF.  Here is the output of ODS HTML using the same 
program. 
Display 30. Images Displayed within ODS HTML Destination 
The image is exactly the same no matter what the image DPI is.  HTML does not worry about image DPI.  It knows 
the height and width from the properties of the image.  Both images are exactly 500 pixels x 179 pixels.  Monitors 
have PPI (pixels per inch), so the ‘per inch’ does not consider DPI.  It is just displaying the pixels value, which is the 
same regardless of DPI.  If the monitor has a higher PPI, the image might be smaller. The DPI only affects the clarity 
of the image, not the size. 
There are other non-tabular outputs like SAS/GRAPH and ODS GRAPHICS.  Again both destinations handle them in 
different ways.  ODS HTML handles graphs very similar in the way it handles images.  The graph is saved off in an 
image format and HTML just references that file when needed.  ODS PDF embeds the graph inside the PDF file.  The 
sizing is dependent on the graph sizing options.  Now, we can look at SAS/GRAPH and see how it appears in ODS 
PDF.  Here is a simple PROC GPLOT. 
goptions reset=all border; 
title 'notice graph is full size of page'; 
ods pdf file="graph.pdf" notoc; 
proc gplot data=sashelp.class; plot age*height; run; 
ods pdf close; 
25 
VB.NET PDF Form Data Read library: extract form data from PDF in
RasterEdge .NET PDF SDK is such one provide various of form field edit functions. Demo Code to Retrieve All Form Fields from a PDF File in VB.NET.
create a fillable pdf form; create fill pdf form
C#: XDoc.HTML5 Viewer for .NET Online Help Manual
Click to open edited file in web browser in PDF form which can be PDF and Word (.docx). with customized style, like setting shape outline, shape fill and shape
create pdf fill in form; convert word document to fillable pdf form
Display 31. SAS/GRAPH Displayed within ODS PDF Destination 
I did not show the whole page but the GPLOT does fit the entire page in ODS PDF.  Graph objects are embedded 
into the PDF.  ODS PDF and the GRAPH subsystem communicate about available space before placing down the 
output.  Graph with no size setting will always want a full page for the output.  Now we can do another example with a 
table and graph on same page. 
options number; 
goptions reset=all border; 
title 'GPLOT is full size'; 
ods pdf file="graph.pdf" notoc startpage=no; 
proc print data=sashelp.class(obs=5); run; 
proc gplot data=sashelp.class; plot age*height; run; 
ods pdf close; 
Display 32. SAS/GRAPH Displayed within ODS PDF Destination (page 1 of 2) 
Page 1 is complete with a small table with 5 observations.  Notice since the graph wanted a full page it is positioned it 
on the next page even though I said “startpage=no” in the ODS PDF statement. 
26 
Display 33. SAS/GRAPH Displayed within ODS PDF Destination (page 2 of 2) 
Most people like to maximize space in their output and want the graph to be on the same page as the table.  
GOPTIONS is what we need to solve this problem.  GOPTIONS are graphical options that can control your graphical 
output.  We can set two size attributes (hsize and vsize) to make the graph fit in a smaller space.  Now we can try it 
one more time with GOPTIONS set. 
options number; 
goptions reset=all border hsize=5in vsize=5in; 
title 'GPLOT is smaller'; 
ods pdf file="graph.pdf" notoc startpage=no; 
proc print data=sashelp.class(obs=5); run; 
proc gplot data=sashelp.class; plot age*height; run; 
ods pdf close; 
Display 34. SAS/GRAPH Displayed within ODS PDF Destination All on 1 Page 
So using GOPTIONS the graph is telling ODS PDF that it only needs 5 inches of both height and width.  ODS PDF 
determines that space is available on page 1.  Therefore, it places it below the table. 
As I said before HTML just references the file that SAS/GRAPH creates and displays it on the page. 
27 
goptions reset=all border; 
title 'Graph within HTML'; 
ods html file="graph.html"; 
proc print data=sashelp.class(obs=5);run; 
proc gplot data=sashelp.class; plot age*height; run; 
ods html close; 
Display 35. SAS/GRAPH Displayed within ODS HTML Destination 
Remember I said HTML just references the file and uses the size in the file’s properties.  Here is the file that was 
created in my current working directory by SAS/GRAPH. 
Display 36. Property File of GPLOT (initial size) 
If I want to use GOPTIONs to set my size of the gplot, the PNG will have different dimensions and again HTML just 
plugs the file into the output. Here are the properties if I set hsize and vsize on the GPTIONS. 
goptions reset=all border hsize=5in vsize=5in; 
28 
Display 37. Property File of GPLOT (size set by GOPTIONS statement) 
Notice how the width and height changed.  SAS/GRAPH uses 96 DPI when creating the graphs.  Using simple math 
again we see the 480/96 = 5.  We set the vsize and hsize to 5 inches in our SAS program.  Now we can see how 
SAS/GRAPH honored our settings and created the graph to our specifications. 
Now we can look at ODS GRAPHICS.  It will be the same as SAS/GRAPH.  ODS HTML will look for the created file 
in the current work directory containing the graph.  ODS PDF will check space availability before placing the graph in 
the output.  There are two differences with ODS GRAPHICS: 
(1)  It has a different statement to set its height and width.  It uses the ODS GRAPHICS statement. 
(2)  The default size in PDF will NOT be the whole page.  ODS GRAPHICS has a default size set in a template. 
Here is an ODS GRAPHICS example in ODS PDF. 
ods graphics on / reset=all; 
ods pdf file="sgplot.pdf" style=styles.harvest; 
title1 'ODS Graphics work the same way'; 
proc sgplot data=sashelp.class; 
vbar age; 
run; 
ods graphics off; 
ods pdf close; 
29 
Display 38. ODS GRAPHICS Output within ODS PDF Destination 
I used a style called harvest to help show that the SGPLOT is not taking up the whole page on page 1.  Using the 
ODS GRAPHICS statement you can set a height and width.  As mentioned above, this statement allows you to size 
your graph and maximize your space in your output. 
options number; 
ods graphics on / reset=all height=5in width=5in; 
ods pdf file="sgplot1.pdf" startpage=no; 
title1 'ODS Graphics work the same way'; 
proc sgplot data=sashelp.class; 
vbar age; 
run; 
proc print data=sashelp.class(obs=5);run; 
ods graphics off; 
ods pdf close; 
30 
Documents you may be interested
Documents you may be interested