how to open pdf file on button click in c# : Find text in pdf files SDK software service wpf windows winforms dnn SAS177-20140-part1145

Paper SAS177-2014 
Secrets from a SAS Technical Support Guy: Combining the Power of the 
SAS
®
Output Delivery System with Microsoft Excel Worksheets 
Chevell Parker, SAS Institute Inc.  
ABSTRACT  
Business analysts commonly use Microsoft Excel with the SAS
®
System to answer difficult business questions. While 
you can use these applications independently of each other to obtain the information you need, you can also combine 
the power of those applications, using the SAS Output Delivery System (ODS) tagsets, to completely automate the 
process. This combination delivers a more efficient process that enables you to create fully functional and highly 
customized Excel worksheets within SAS.   
This paper starts by discussing common questions and problems that SAS Technical Support receives from users 
when they try to generate Excel worksheets. The discussion continues with methods for automating Excel 
worksheets using ODS tagsets and customizing your worksheets using the CSS style engine and extended tagsets. 
In addition, the paper discusses tips and techniques for migrating from the current MSOffice2K and ExcelXP tagsets 
to the new Excel destination, which generates output in the native Excel 2010 format.  
INTRODUCTION  
Let’s face it, folks. Everyone loves knowing a secret! And while some secrets definitely should not be shared with 
anyone, other secrets should be shared with everyone. So the SAS Technical Support Guy is going to let you in on 
some secrets to help you more effectively debug, style, and enhance your Excel spreadsheets. 
First, you will discover the answers to some common issues that users report when they try to generate Excel 
worksheets. Then the discussion offers tips in the following areas: 
automating SAS output in Excel worksheets by using ODS tagsets 
customizing and extending your worksheets using the CSS style engine and tagsets 
using the new (experimental) Excel destination 
Note: Examples that are generated in this paper use the HTMLBLUE style. 
COMMON ISSUES WITH GENERATING MICROSOFT EXCEL WORKSHEETS 
SAS Technical Support receives some common questions and problems that are related to generating Excel 
worksheets. In the following sections, the SAS Technical Support Guy lets you in on the secrets for solving these 
issues. Knowing these secrets will save you time when you create your own worksheets. These issues are related 
mainly to the ExcelXP tagset, but some issues are related to the MSOffice2K destination. 
REDUCING THE SIZE OF EXCEL WORKSHEETS 
One of SAS Technical Support’s most commonly received questions is about how to reduce the size of the files that 
are created with the ExcelXP destination. The ExcelXP tagset generates XML files specifically in the XML 
Spreadsheet (XMLSS) format. The XML file size can become quite large, which causes problems when you want to 
move or E-mail the file. There are several documented methods for overcoming large file size: 
resaving the file using Dynamic Data Exchange (DDE) 
using VBScript language (See SAS Note 43496, “Convert files created using an ODS destination to native 
Excel files.” Available at 
support.sas.com/kb/43/496.html
using the TableEditor tagset 
using the experimental ODS Excel destination (available in the first maintenance release for SAS
®
9.4 
[TS1M1])  
The new Excel destination enables you to generate output in the Microsoft Office Open XML format, which is the 
default file format beginning with Excel 2007. This format is discussed later in the document. 
Find text in pdf files - search text inside PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn how to search text in PDF document and obtain text content and location information
search pdf documents for text; search multiple pdf files for text
Find text in pdf files - VB.NET PDF Text Search Library: search text inside PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn How to Search Text in PDF Document and Obtain Text Content and Location Information in VB.NET application
convert pdf to searchable text online; how to select text in pdf and copy
In SAS 9.2 and later, you can also manage the file size by using the ODS PACKAGE statement to place output in a 
ZIP file, as shown in the following code sample: 
ods package open nopf; 
ods tagsets.excelxp file="c:\temp.xml" package; 
proc print data=sashelp.class; 
run; 
ods tagsets.excelxp close; 
ods package publish archive properties (archive_name="file-name.zip" 
archive_path="c:\"); 
ods package close; 
PREVENTING AND DIAGNOSING EXCEL DIALOG-BOX ERRORS 
Microsoft Excel generates dialog-box errors when it finds a problem with an XML file that is open in Excel. These 
errors can occur for a variety of reasons. For example, warnings or errors from the Excel parser indicate serious 
problems with the file. The next sections discuss some of the more common errors you might encounter. 
Security Warning 
Beginning with Excel 2007, Microsoft introduced a new security feature that matches the content (the file format) of a 
file with the file’s extension. If these two items do not match, Excel generates the message shown here in Display 1: 
Display 1. Microsoft Security Message 
The XLS extension is commonly used as the extension for output that is generated with the ExcelXP tagset. Although 
this extension is registered for Excel binary files, that use was never enforced prior to Excel 2007. You can 
circumvent this message either by modifying the Microsoft Windows Registry (check with your IT department before 
modifying the registry) or simply by adding the .XML extension to the file that is generated with the ExcelXP tagset. 
For details about how to modify the Windows Registry, see the Microsoft Knowledge Base note 948615, “Error 
opening file: ‘The file format differs from the format the filename extension specifies.” 
(
support.microsoft.com/kb/948615
)  
Errors That Occur during Loading or Opening an XML File 
When there is a problem with Excel loading or opening an XML file (such as a file that is generated with the ExcelXP 
tagset), Excel generates a log file that displays debugging information. This information generally details the reason 
the problem occurs, where the file resides, the specific tag and value in which the error occurs, and so on. (See 
Display 3, later in this paper.)  
The dialog box shown later in Display 2 specifies the particular element that is involved. The more typical elements 
you will see listed in the dialog box are 
Style
Table
, and 
WorksheetOptions
. When the 
Style
element is 
specified, it can indicate a number of problems, including problems that range from the addition of an invalid font to a 
worksheet to the addition of an invalid Excel format. When the 
Table
element is specified, it is typically because a 
data value makes the file invalid. For example, special characters such as &, <,  and > are invalid. When the 
WorksheetOptions
element is specified, typically it is because an illegal character or a text string longer than 
259 characters has been passed in the title or footnote. 
When any of the problems occur that are discussed above, Excel generates the error log that you can use for 
debugging. That log file resides in the path that is specified at the bottom of the dialog box. (See Display 2). That path 
contains a hidden folder (
Content.MSO
) in both the Windows XP and Windows 7 operating environments.  
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
with detailed PDF processing demo project along with sample codes, which you can find in the VB.NET Demo code to Combine and Merge Multiple PDF Files into One.
how to select all text in pdf; how to search text in pdf document
VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
On this VB.NET PDF document page modifying page, you will find detailed guidance on creating, loading, merge and splitting PDF pages and Files, adding a page
convert pdf to searchable text; search pdf files for text programmatically
You can find the hidden folder by pasting the following path into the Windows Explorer taskbar:  
 %homepath%\Local Settings\Temporary Internet Files\Content.MSO 
A sample path with a hidden folder is shown in the taskbar below in Display 2: 
Display 2. Excel Dialog Box
Display 3. Excel Log File 
If you follow the tips in this section and you still cannot determine the source of the problem, it might be time to 
contact the SAS Technical Support Guy! 
Note:  You should delete all files in the folder when you are finished in order to save disk space. You should also 
consider creating a shortcut to this folder. Having a shortcut enables you to monitor the folder to make sure it does 
not grow too large. Be aware that Excel 2013 sometimes generates empty log files, which you should also delete. 
Error That Is Received When No Output Is Generated 
If at least one procedure or DATA step does not render any output, the XML file that is generated is left incomplete 
and generates the message shown in Display 4. 
Display 4. Message That Appears When No Output Is Generated 
The XML in Display 5 shows the minimal XML syntax that is needed in order to generate a valid file that includes at 
least a single 
<Worksheet>
tag.  
Display 5. The Minimal XML Code That Is Required to Generate an XMLSS File 
Hidden file 
C# HTML5 Viewer: Load, View, Convert, Annotate and Edit Excel
HTML5 Viewer for C# .NET, users can convert Excel to PDF document, export C#.NET RasterEdge HTML5 Viewer also enable users to quickly find text content by
pdf text search; text searchable pdf
C# Word - Search and Find Text in Word
C# Word - Search and Find Text in Word. Learn How to Search Text in PDF Document and Obtain Text Content and Location Information. Overview.
text select tool pdf; search text in multiple pdf
Using a tagset approach, there are two ways to prevent the error shown previously in Display 4 when no output is 
produced. You can either modify the ExcelXP tagset or add the 
<Worksheet>
tag programmatically when no data 
exists. For code that uses the tagset approach, see the sample code that is available in
ftp://ftp.sas.com/techsup/download/base/SGF2014_examples.ZIP
You can also use a coding option that does not use tagsets. This approach uses SAS macro language and the SQL 
procedure. PROC SQL generates an automatic macro variable named SQLOBS. The value for this macro variable is 
the number of records of output.  
As shown in the following code, you can query SQLOBS so that it conditionally uses a DATA step to write a text 
string (
No
records
retrieved
) when no records exist.  
ods tagsets.ExcelXP 
file="c:\temp.xml"; 
%macro test; 
proc sql; 
select
*
from sashelp.class 
where age=-1; 
run; 
quit;   
%if &sqlobs=0 %then %do; 
data _null_; 
file print; 
put "No records retrieved"; 
run; 
%end; 
%mend; 
%test 
ods tagsets.Excelxp close; 
Because no records are retrieved with an AGE value of -1 (as shown in the WHERE statement), no records are output 
in the Excel file. 
Display 6 shows the text string that is generated in the Excel table by the code above. 
Display 6. Worksheet with Text String Added by Using Macro 
DISPLAYING HEADERS FROM DATA SETS WITH ZERO OBSERVATIONS 
The example in the previous section generates a valid worksheet with alternate text when no records are produced. 
But sometimes, users need to see a view of the worksheet as it appears (with column headings, for example) even 
though no records are generated. So the example that follows generates the column headers when you have data 
sets with zero observations. This example builds on the previous example, which incorporates macro logic to check 
the number of observations in the data set before exporting the data. 
ods tagsets.excelxp file="c:\temp.xml" options(absolute_column_width="8" 
embedded_titles="yes"); 
%macro test(libref=,dsn=); 
%let rc=%sysfunc(open(&libref..&dsn,i)); 
%let nobs=%sysfunc(attrn(&rc,NOBS)); 
%let close=%sysfunc(CLOSE(&rc)); 
%if &nobs ne 0 and %sysfunc(Exist(&libref..&dsn)) %then %do; 
proc print data=&libref..&dsn; 
run; 
%end;                                                           (
code continued)
C# PowerPoint - Search and Find Text in PowerPoint
C# PowerPoint - Search and Find Text in PowerPoint. Learn How to Search Text in PDF Document and Obtain Text Content and Location Information. Overview.
search text in pdf image; how to search a pdf document for text
XDoc.Word for .NET, Support Processing Word document and Page in .
Convert. Convert Word to PDF. Convert Word to ODT. Process Word table, row and cell. Text & Image Process. Search and find text in Word. Insert image to Word page
pdf searchable text; pdf make text searchable
%else %do; 
proc sql noprint; 
create table temp as select name from dictionary.columns 
where libname=%upcase("&libref") and memname=%upcase("&dsn"); 
run; 
quit;
proc transpose data=temp out=temp1(drop=_label_ _name_); 
id name; 
var name; 
run; 
proc report noheader style(column)=header[just=center] nowd; 
title "No data for current report"; 
run; 
%end;  
%mend; 
%test(libref=work,dsn=temp) 
%test(libref=sashelp,dsn=class) 
ods tagsets.excelxp close; 
In this code: 
The macro conditionally executes the PRINT procedure or the PROC SQL step in which dictionary tables 
are used to retrieve the column names from the zero observation data set. 
The values (
Name
Sex
Age
,
Height
, and 
Weight
) originally appear vertically in rows. However, the 
TRANSPOSE procedure rearranges those values into horizontal cells. This data is then generated by the 
REPORT procedure, as shown in Display 7. 
Display 4. Headers Added When No Data Exists
MANAGING HOW TEXT WRAPS IN DATA CELLS 
How text wraps is a source of mystery for many people who use the ExcelXP tagset. By default, the HTML-based 
output that is generated with the MSOffice2K destination generates output that is automatically fitted into the width of 
the cell. In the ExcelXP tagset, you control text wrapping with the WRAPTEXT= tagset option. This option, which was 
added in SAS 9.3, sets the AUTOFITWIDTH= XML attribute. The default value for the WRAPTEXT=is option is YES, 
which means that the data in the cells wraps to fit the column width. When you change the column width either with a 
style or with the ABSOLUTE_COLUMN_WIDTH= tagset option, data wrapping adjusts automaticallyYou can also 
set text wrapping with a style override by using the WRAP:YES | NO option within the TAGATTR= attribute, which 
can be applied in either a SAS procedure (the PRINT, REPORT, and TABULATE procedures) or a SAS template 
style (PROC TEMPLATE). 
Zero observation data set
VB.NET Image: RasterEdge JBIG2 Codec Image Control for VB.NET
you have activated a license key and find DLLs required processed online through our VB.NET PDF web viewer. segment the bi-level images into text, halftone and
pdf search and replace text; how to select text in a pdf
C# Image: How to Encode & Decode JPEG 2000 Images Using C#.NET JP2
txt" at your C# project bin folder where you can find above embedded C# powerful & profession imaging controls, PDF document, image to pdf files and components
convert pdf to word searchable text; can't select text in pdf file
The following example contains variables that have long variable names and two of the variable names need to be 
wrapped. 
data one; 
input  var1_is_a_long_var_name  var2_is_another_long_var_name    
var3_is_another_long_var_name; 
cards; 
123 345 567 
run; 
ods tagsets.excelxp file="c:\temp.xml"  
options(absolute_column_width="21,8,21") 
style=htmlblue; 
proc report data=one nowd; 
define var1_is_a_long_var_name / style(header)={tagattr="wrap:no"}; 
define var3_is_another_long_var_name / style(header)={tagattr="wrap:no"}; 
run; 
ods tagsets.excelxp close; 
In this code: 
The column width is set with the ABSOUTLUTE_COLUMN_WIDTH= tagset option, and it uses the default 
wrapping behavior that is set by WRAPTEXT=”YES”. Note: Because WRAPTEXT=”YES” is the default 
setting, it is not shown in the code sample. 
The TAGATTR= attribute is used in the REPORT procedure to selectively adjust the wrapping for two of the 
variables.
 
Display 8 shows the worksheet that is generated by the code above. 
Display 8. Modifying Wrapping Capabilities with the ExcelXP Tagset 
UPDATING WORKBOOKS AND WORKSHEETS 
Another common user question is how can you update output that is generated with the ExcelXP tagset? For 
example, how can you add a new worksheet within a workbook or add data to an existing worksheet? The answer to 
that question is that the ExcelXP destination and the new experimental Excel destination do not allow you to update 
a file.  
You can update worksheets using a number of other well documented methods, including VBScript, PowerShell 
scripts, DDE, and the TableEditor tagset. For more information about updating workbooks and worksheets, see the 
section “Automating SAS Output.”  
XDoc, XImage SDK for .NET - View, Annotate, Convert, Edit, Scan
NET PDF SDK to Edit, Convert,. View, Write, Comment PDF files. Excel SDK to Edit, Convert, View. Write files. Learn More. easily find out our products capabilities
searching pdf files for text; pdf select text
HANDLING COMMON ISSUES WITH TAGSETS 
Some SAS users fall in love with a certain version of the 
ExcelXP tagset and install that same tagset version in 
subsequent SAS releases (for example, using tagset 
V1.94 with SAS 9.3). This is not a good practice 
because tagsets are not forward compatible. When this 
practice is used, various problems can occur (for  
example, style problems that include incorrect 
justification of cells or various warnings in the log.) 
Beginning with SAS 9.3, grammar changes to the ODS 
Markup language makes it more likely that an error will 
occur when you use a tagset that was created in an 
earlier SAS release. 
SAS
®
Release 
Tagset 
Version 
Date 
9.1.3 
V1.28  08/29/2005 
9.20M3 
V1.94  09/09/2010 
9.30M2  V.1.130  05/01/2011 
9.40 
V1.129  11/07/2011 
9.40M1  V1.130 
08/23/2013 
Table 1. Tagset Version Based on                                  
SAS
® 
Software Release 
EMBEDDED TITLES 
Prior to SAS 9.3, a frequent user question focused on how to use the ExcelXP tagset to display a complete title that 
appears truncated when the actual title is embedded in the worksheet. In SAS releases before 9.3, titles that span 
beyond the length of the Excel table in the worksheet are not fully displayed in the worksheet output, as shown in 
Display 9.  
Display 9. Excel Table with a Truncated Title 
Users commonly fix this problem by either manually expanding the row where the title appears or by selecting the title 
so that it appears in the title bar. 
The ExcelXP tagset merges titles across cells that reach the full width of the Excel table. The XMLSS format that the 
tagset emulates is limited in that the merged titles cannot be automatically fitted when the column wraps. The XMLSS 
format also does not display data beyond the last column of the table, as shown above in Display 9. 
To display the complete title, you need to unmerge the title cell by left-justifying the title. You can left-justify the title in 
any of these three ways: 
Use the JUSTIFY= option in the TITLE statement. 
Use the JUST= option in the PROC TEMPLATE style. 
Use the NOCENTER option.
 
The JUSTIFY= option enables you to justify an individual title, whereas using the NOCENTER option or adding the 
JUST= option in a template style justifies all of the titles. This next sample code illustrates the use of the JUSTIFY= 
option. 
ods tagsets.excelxp file="c:\temp.xml" options(embedded_titles="yes"); 
proc print data=sashelp.class; 
title justify=l "Now is the time for all good men to come to the aid of 
their country"; 
ods tagsets.excelxp close; 
Display 10 shows the unmerged title cells and the complete title. 
Display 10. Excel Table with a Left-Justified and Complete Title 
Beginning with SAS 9.3, the default behavior for embedded titles changed. Titles now wrap to prevent losing the view 
of part of a title when the title is wider than the table. To compensate for the XMLSS format limitation of not fitting 
merged titles automatically, the ExcelXP tagset determines where a title should wrap based on a calculation that 
involves an estimated width of the title and the table. This width is not based on characters, so its use can lead to 
incorrect row heights within the title cells. This behavior is true especially with long titles that are close in length to the 
width of the table, as shown here in Display 11. Notice the extra space above the title. 
 
Display 11. An Excel Table That Has Incorrect Row Heights 
For the output above, you can reduce the extra space that appears when the title is wrapped by adding the ExcelXP 
tagset option WIDTH_FUDGE=”.85”. This option removes the additional space in the title by extending the width of 
the table. 
The following sample code emulates the behavior of SAS prior to 9.3 that enables you merge title cells across a table 
in order to prevent the title from wrapping. This behavior alleviates the row-height problem by using the 
TITLE_FOOTNOTE_WIDTH= and the MERGE_TITLES_FOOTNOTES options to prevent the title from wrapping. 
ods tagsets.excelxp file="c:\temp.xml" options(embedded_titles="yes" 
merge_titles_footnotes="no") 
style=htmlblue; 
proc print data=sashelp.class; 
title  j=l "Now is the time for all good men to come to the aid of 
their country"; 
run; 
ods tagsets.excelxp close; 
In this code:  
The TITLE_FOOTNOTE_ WIDTH= option enables you to merge the title cells based on the value that you
assign to the option.
The MERGE_TITLES_ FOOTNOTES= option merges the cells of a left-justified title. It also displays the
complete title and prevents it from wrapping.
AUTOMATING SAS
®
OUTPUT 
Automating current processes for how worksheets are generated makes your job more efficient and cost effective by 
reducing the time and staff that are needed to complete tasks. Rather than handling tasks individually, you can take 
care of the tasks all at once within SAS. If you are already generating reports in Excel, why not generate the reports 
from SAS instead and take advantage of both world-class analytics and graphics. The next sections discuss two main 
topics in which the processes are automated: 
automatically generating presentation-quality worksheets directly from SAS (for example, automating the
process of generating pivot tables in Excel for interactive data analysis)
enhancing generated Excel output from SAS
AUTOMATING PIVOT TABLE GENERATION FROM SAS
®
The ability to generate pivot tables from Base SAS
®
software is made possible through the TableEditor tagset, 
which you can download from 
support.sas.com/rnd/base/ods/odsmarkup/index.html
. Prior to the 
current release of the TableEditor tagset, you could generate pivot tables a couple of different ways. One method 
involves creating an HTML file that acts as the data source for a pivot table that is created with the TableEditor 
tagset. When the HTML file is generated, an 
Export
button is added. When you click this button, the application 
exports both the HTML file as the source data and the pivot table, based on the options that you specify with the 
tagset. The other method involves pointing to a file that Excel can read. Such files include XML files that are 
generated with the ExcelXP tagset, HTML files that are generated with the MSOffice2K tagset, character-separated 
values (CSV) files, or native Excel files. This method also requires clicking an 
Export
button that uses automation 
within the browser to launch the code that executes the pivot tables. 
Now, however, updates to the TableEditor tagset enable you to fully automate the creation of pivot tables so that no 
human intervention is necessary. This process requires the generation of a separate file for the scripting, which was 
added to the HTML file that was discussed in the first method described in the previous paragraph. Then, this script 
file can be executed within the program. Automating the process this way enables you to perform tasks such as 
generating a report, analyzing data, and adding the ability create a drill-down report in the batch environment. 
The next example examines how to automate the process of generating a pivot table within an existing report that is 
created with the ExcelXP tagset. 
/* Create a workbook to update. */ 
ods tagsets.ExcelXP file="c:\temp.xml" options(sheet_name="Table_1"); 
(
code continued)
10 
proc print data=sashelp.orsales noobs; 
run; 
ods tagsets
.
Excelxp close;
/* Create and execute the script file that is generated */                 
/* with the TableEditor tagset.                         */ 
ods noresults;  
options noxwait noxsync; 
ods tagsets.tableeditor file="c:\temp\temp.js" 
options(update_target="c:\\temp.xml" open_excel="no" output_type="script"  
sheet_name="Table_1" pivotdata="quantity,quantity,profit,profit" 
pivotdata_stats="sum,sum,sum,sum" pivotcalc="none,total,none,total" 
pivotpage="year,quarter" pivotrow="product_category" 
pivotdata_caption="Sum of Quan,% of,Sum of Prof,% of" 
pivotdata_tocolumns="yes");  
data _null_; 
file print; 
put "test"; 
run; 
ods tagsets.tableeditor close; 
x "cscript 'c:\temp\temp.js'"; 
This code sample uses the UPDATE_TARGET= option to add the name of a file that is to be used for the source 
data. The sample also includes the SHEET_NAME= option, which determines which worksheet should get the data. 
The OUTPUT_TYPE= option is also used to determine that the file that is written is the scripting file (which is named 
in the FILE= ODS option). 
Display 12 shows the pivot table that is generated with the code sample above. 
Display 12. Pivot Table That Is Generated as a Result of an Automated Process 
Documents you may be interested
Documents you may be interested