c# : winform : pdf viewer : Add pages to pdf acrobat application software utility azure windows web page visual studio RV010.Haworth0-part1456

Paper RV-010 
Advanced Topics in ODS 
Lauren Haworth, Genentech, Inc., South San Francisco, CA 
ABSTRACT 
This presentation will be a whirlwind tour of some of the most useful advanced techniques in ODS. Topics covered 
include: 
• Tip sheets on new features 
• inline formatting, 
• RTF features: enhanced page numbers, hyperlinks, text, tables of contents, and RTF control words 
• PDF features: bookmarks, enhanced page numbers, hyperlinks, text. 
INTRODUCTION 
This paper is aimed at the casual user of ODS who would like to take their skills to the next level. The examples are 
all taken from the book “ODS: Beyond the Basics” (SAS® Press, Fall 2009).  All of the examples are written using SAS 
9.2. You can find SAS 9.1.3 versions of the examples on the companion web site for the book. 
TIP SHEETS 
There is no better set of reference guides to ODS than the new tip sheets that were developed by the Base SAS 
Team, as shown on the Base SAS R&D web site (http://support.sas.com/rnd/base/ods/index.html). The tip sheets should 
not be considered a substitute for the ODS documentation, however, they are concise, accurate and extremely handy. 
And since they are maintained by the ODS developers, they represent the most up-to-date quick reference sheets 
available. 
Add pages to pdf acrobat - insert pages into PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Guide C# Users to Insert (Empty) PDF Page or Pages from a Supported File Format
add page pdf reader; add page number pdf
Add pages to pdf acrobat - VB.NET PDF Page Insert Library: insert pages into PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use VB.NET APIs to Add a New Blank Page to PDF Document
add page numbers to a pdf; add page numbers pdf files
In addition to these handy tip sheets, on the R&D web site you will find links to papers by the developers and the most 
current information on R&D efforts in the Base SAS arena. 
.NET PDF Document Viewing, Annotation, Conversion & Processing
Redact text content, images, whole pages from PDF file. Add, insert PDF native annotations to PDF file. Edit, update, delete PDF annotations from PDF file. Print
adding page numbers to pdf in preview; add a page to a pdf document
C# PDF Converter Library SDK to convert PDF to other file formats
manipulate & convert standard PDF documents in .NET class applications independently, without using other external third-party dependencies like Adobe Acrobat.
add pages to pdf acrobat; add a page to pdf file
USING INLINE FORMATTING TO CUSTOMIZE HTML OUTPUT 
Inline formatting allows you to make simple formatting changes in specific parts of your output, and for specific output 
destinations. Inline formatting allows you to specify the style and layout characteristics of almost any cell or line in 
your output. 
For example, if you’d like to add footnote references to some of the labels in your output, you can use inline 
formatting to add the footnote numbers as superscripts. The following program demonstrates this technique by adding 
footnotes to the row labels of PROC MEANS output. 
The first thing you need to do to use inline formatting is to designate a character to be used to identify inline 
formatting. This character is called an escape character. It needs to be a character that is not used anywhere else in 
your output or program. Suggested characters include: ~, ^, #, and @.  
ODS ESCAPECHAR="^"; 
Now you can use this character to add superscripts to your format labels. The syntax for applying inline formatting 
always starts with the escape character. Then, for a superscript, you enclose the SUPER function name and the text 
to superscript in curly brackets ({ } ), as shown below. 
proc format; 
value superfmt 1='Control' 
2='Low Dose^{super 1}' 
3='High Dose^{super 2}'; 
run; 
If you apply the SUPERFMT format to CLASS variable TX in a PROC MEANS step that analyzes data set CLINICAL, 
you get the output shown below. The PROC MEANS step follows. 
options nocenter; 
proc means data=clinical mean std maxdec=1; 
class tx; 
var postsbp postdbp; 
format tx superfmt.; 
run; 
With footnote references in the table, the next step is to add the footnotes themselves. Inline formatting in the 
following FOOTNOTE statements generates superscripts for the two footnote numbers. 
footnote "^{super 1}2 mL/kg."; 
footnote2 "^{super 2}5 mL/kg"; 
The output below shows the new results with footnotes added to the report and with OPTIONS NOCENTER in effect.  
C# powerpoint - PowerPoint Conversion & Rendering in C#.NET
documents in .NET class applications independently, without using other external third-party dependencies like Adobe Acrobat. PowerPoint to PDF Conversion.
add contents page to pdf; add pdf pages together
C# Word - Word Conversion in C#.NET
Word documents in .NET class applications independently, without using other external third-party dependencies like Adobe Acrobat. Word to PDF Conversion.
add page to pdf acrobat; adding page numbers to pdf in reader
While the footnote superscripts match the table, the font size is so large that they look out of proportion to the table. 
To fix this, you can use the inline formatting STYLE function. Start with the escape character and enclose in curly 
brackets ( {} ), the STYLE function name and  the style attributes that you want to modify. The expression for each 
attribute and its new value is enclosed in square brackets ( [] ). You can nest functions as well, which the following 
FOOTNOTE statements demonstrate. The FONT_SIZE=2 attribute is applied to all the text in each footnote while 
superscripting is applied only to the footnote numbers. The output with these new footnotes is shown below.   
footnote "^{style [font_size=2] ^{super 1}2 mL/kg.}";   
footnote2 "^{style [font_size=2] ^{super 2}5 mL/kg}"; 
C# Windows Viewer - Image and Document Conversion & Rendering in
standard image and document in .NET class applications independently, without using other external third-party dependencies like Adobe Acrobat. Convert to PDF.
add pages to pdf reader; adding page numbers to pdf files
VB.NET PDF: How to Create Watermark on PDF Document within
need no external application plugin, like Adobe Acrobat. VB.NET demo code to add text watermark to create graphics watermark on multiple PDF pages within the
add page to pdf reader; add pages to pdf file
ADDING “PAGE X OF Y” TO RTF REPORTS 
When producing multi-page reports, it’s useful to be able to indicate how many pages the reader should expect. This 
avoids problems caused by someone not receiving all of the pages. If your SAS reports have page numbers in the 
format of "Page 1 of 3", "Page 2 of 3", etc., and a page gets lost in a fax transmission, the receiver will know to call 
you back and ask for the missing page. 
Standard SAS page numbering just gives you a single page number. For example, the output below shows the top an 
RTF file created by ODS. The file contains a PROC PRINT report of data set CLIPS. This is the first page of the 
output, so the page number 1 is generated in the top right heading.  
This page number was generated by ensuring that page numbering was turned on with the following SAS system 
option setting: 
OPTIONS NUMBER; 
These page numbers are implemented in word processors using a field that automatically computes the page 
number. This is useful because if you later edit your ODS RTF output, the page numbering will adjust automatically. 
To see the field, in Word you can use ALT-F9 to toggle the field so that it shows the code instead of the page number. 
This is shown in the output below. 
The same word processor fields are used to generate page numbers in the “Page X of Y” format. To ask ODS to 
create those fields, you need to turn off page numbering with the NONUMBER SAS system option and you need to 
add an escape sequence to your TITLE statement that requests the “Page X of Y” text. The code to add the “Page X 
of Y” text to the PROC PRINT report follows. The code centers the title text “Data Set CLIPS” and it right justifies the 
“Page X of Y” text. If you use the BODYTITLE option, ODS will not place the “Page X of Y” text in the page header of 
the RTF document. 
OPTIONS NONUMBER; 
ODS ESCAPECHAR='^'; 
title justify=center 'Data Set CLIPS'  
justify=right 'Page ^{pageof}'; 
VB.NET PowerPoint: VB Code to Draw and Create Annotation on PPT
limitations (other documents are compatible, including PDF, TIFF, MS project, what would you do to add and draw no more plug-ins needed like Acrobat or Adobe
add page number to pdf hyperlink; adding page numbers to pdf document
C# Excel - Excel Conversion & Rendering in C#.NET
Excel documents in .NET class applications independently, without using other external third-party dependencies like Adobe Acrobat. Excel to PDF Conversion.
adding a page to a pdf document; add page number to pdf online
For the RTF destination, SAS gives you a simple escape sequence to use to request the "X of Y" page numbers. The 
"pageof" escape sequence requests that ODS insert the word processor fields to generate the current page number 
and the total number of pages. You can see the results in the output below.  
The field codes can be viewed by pressing ALT-F9 in Word, which is shown below. 
This is a great way to add custom page numbers without having to know anything about RTF tags. However, this 
method has its limitations. The only page numbering format you can get with the {pageof} escape sequence is "X of 
Y”. If you’d like something different, like "X/Y", you have to do that with different ODS escape character functions as 
shown in the following specification. The “{thispage}” function returns the current page. The “{lastpage}” function 
returns the total number of pages in the document.    
ODS ESCAPECHAR='^'; 
title justify=center 'Data Set CLIPS'  
justify=right 'Page ^{thispage}/^{lastpage}'; 
These ODS ESCAPECHAR functions generate the actual RTF control strings for the page number in the desired 
format.  This is a better alternative than using the equivalent RTF control strings because the RTF control strings are 
very fussy about space, slashes, curly braces and line breaks; if you mistype the RTF control strings, you may create 
an unopenable RTF file.  
BMP to PDF Converter | Convert Bitmap to PDF, Convert PDF to BMP
Also designed to be used add-on for .NET Image SDK Support conversion of Bitmap - PDF files in both single & batch mode; Convert all pages or certain
add page to pdf online; add a page to a pdf document
DICOM to PDF Converter | Convert DICOM to PDF, Convert PDF to
users do not need to load Adobe Acrobat or any Start DICOM - PDF image conversion through drag &drop method; Convert all pages or certain pages chosen by users;
add page number to pdf document; adding a page to a pdf file
ADDING STATIC OR DYNAMIC DATES TO RTF REPORTS 
Adding a date to a header or footer provides useful information about when a file was created or modified. By default, 
ODS inserts an RTF control string that corresponds to the Word date field in the page header of RTF output. This 
means that the date value is updated to the current date each time the file is opened.  
Depending on why the date is needed, this may be what you want. For some reports, you want the date in the header 
to be the date the report was printed or delivered. For other reports, it may be preferable to have a fixed date that 
represents the date the report was generated. 
With ODS RTF, you can do it either way. To generate a page header with a dynamic date that will be updated every 
time the file is opened, you don’t need to do anything. As long as the default SAS system option of DATE is in effect, 
you will get dynamic dates in your output. For example, the output below shows the top of an RTF file created by 
ODS. The file contains a PROC PRINT report of data set CLIPS. This view shows the field code that is generated. (In 
Word, press ALT-F9 to toggle the field codes on and off.)  
The output below shows the date generated by this field code. The SAS system option NUMBER is off so page 
numbers are not shown in these two displays. 
To generate a page header with a static date based on the day the output was generated, all you have to do is add 
the SASDATE option to the ODS RTF statement. By adding this option, SAS will insert text for the current date when 
the program was run. Remember that the SAS date is actually the time and date that you started your SAS session. 
So,if a programmer keeps his/her session open for days at a time, this date might not correspond to the actual date 
the program was run. If you start a SAS session or batch process for your reports, then SASDATE will result in a 
static date that corresponds to the date the program was run. 
ODS RTF FILE='StaticDate.rtf' SASDATE; 
ODS writes this date as a fixed value. If you toggle to the field codes view by pressing ALT-F9, the view of the value 
remains the same and no field code is displayed. 
Both static and dynamic dates can be generated automatically by using the default system option of DATE. However, 
each of these date options gives you no control over the format of the date. The default dynamic or static dates will 
always be in the format "hh:mm dddd, MMMM dd yyyy". 
ADDING TEXT TO RTF REPORTS 
One of the reasons RTF is such a useful output destination is that we can cut and paste from the RTF document or 
we can add explanatory text to our RTF document to build our final report, but wouldn’t it be nice if the entire report 
could be generated automatically?  
To insert text into an RTF document, use the TEXT= option on an ODS statement to write to all open destinations 
including RTF. Both of the following statements will insert text into an open RTF destination file: 
ODS TEXT='Text to insert'; 
You also need to add the STARTPAGE=OFF option to your ODS statement to prevent SAS from inserting page 
breaks between your table and text.  
The output from the following program contains results from one ODS table from the PROC CORR step and adds text 
below the table. The ODS TEXT= statement follows the PROC CORR step. The text wraps across several lines, and 
only one statement is needed.  
An escape character is defined at the beginning of the program. It is used to signal to ODS to apply left and right 
margins of one inch to the text. The output is presented below.   
ODS ESCAPECHAR='^'; 
ODS SELECT PearsonCorr; 
ODS RTF FILE='AddText.rtf' STARTPAGE=OFF; 
proc corr data=clips nosimple; 
var mentions; 
with compete; 
run; 
ODS TEXT='^S={LEFTMARGIN=1in RIGHTMARGIN=1in} 
This text was inserted with the TEXT= option. It can be used to add a detailed 
explanatory caption below a table or figure. This example uses an inline formatting 
escape sequence to apply different styles here. This text can also be formatted by 
using PROC TEMPLATE and the usertext style element'; 
ODS RTF CLOSE; 
ADDING MORE COMPLEX TEXT TO RTF OUTPUT 
To generate a more complicated report, just add more procedures and more TEXT= options. The following code 
generates the output shown below. Since we showed ODS TEXT= in the previous example, we will show the other 
version of the TEXT= option in this example. This version of the TEXT= option would ONLY write to the RTF 
destination, as opposed to the previous statement, which would write to ALL open destinations. 
ODS ESCAPECHAR='^'; 
ODS SELECT PearsonCorr; 
ODS RTF FILE='c:\temp\ReportWithText_4_38.rtf' STARTPAGE=OFF; 
ODS RTF TEXT='^{style[font_style=italic just=c fontweight=bold fontsize=14pt]This 
bold, italicized text in 14pt introduces the table. This introductory text will 
automatically wrap.}'; 
proc corr data=clips nosimple; 
var mentions; 
with compete; 
run; 
ODS RTF TEXT='^{newline 4}'; 
ODS RTF TEXT='^{style[font=(Arial)]Four lines appear before this sentence (in Arial) 
and a bar chart follows:}'; 
proc gchart data=clips; 
vbar mentions / midpoints=1 to 12 by 1 inside=freq; 
run; 
quit; 
ODS RTF TEXT='^{style[fontweight=bold textdecoration=underline]This bold, underlined 
sentence concludes the report.}'; 
ODS RTF CLOSE;  
If you wanted to customize the text, you could, for example, use macro variables to add the current date or insert 
custom text based on the results in the data. One thing to keep in mind is that as the text gets lengthy, you will start to 
get warning messages in the log about the string being longer than 512 characters. These messages can be ignored 
or turned off with the NOQUOTELENMAX option. 
10 
ADDING HYPERLINKS TO RTF OUTPUT 
Web pages aren’t the only place you can use hyperlinks. You can put a link in a word processing document so that 
the reader can link to related information. With word processing documents frequently being shared electronically, 
rather than on paper, this can be a useful feature. 
Adding a hyperlink is simple. You can add this link anywhere you have text in your output, such as labels, formatted 
values, titles, and footnotes. All you need to do is add the following escape sequence where the escape character has 
been defined as the carat (^): 
^S={URL="http://www.myweb.com"} 
This code applies the style attribute URL= to the subsequent text, which specifies a destination for the hyperlink. The 
following example adds a hyperlink at the bottom of the output using the ODS RTF TEXT= statement. Rather than 
putting the hyperlink in a footnote, which would be at the bottom of the page, the TEXT= feature places the hyperlink 
in a text box right below the procedure output. Remember that if we used the ODS TEXT= form of the option, the text 
would be written to all open destinations. 
ODS ESCAPECHAR='^'; 
ODS RTF FILE='Hyperlink.rtf'; 
proc freq data=clips; 
table compete; 
run; 
ODS RTF TEXT='^S={URL="http://www.myweb.com"}Source: www.myweb.com'; 
ODS RTF CLOSE; 
The resulting RTF file is shown the output below. You can see the text for the hyperlink below the table.  
If you move the mouse over the text, as in the example below, you can see that it is a hyperlink. However, it’s not 
obvious to the reader that a hyperlink is there, unless they happen to move the mouse over the correct part of the 
page. 
Documents you may be interested
Documents you may be interested