c# pdf viewer : Break apart pdf pages control application platform web page azure windows web browser O%27Reilly%20-%20C++%20Cookbook%20(2007)14-part390

Recipe 3.6. Converting Between Numeric Types
You have number of one type and you need to convert it to another, such as an int to a short or a vice
versa, but you want to catch any overflow or underflow errors at runtime.
Use Boost's numeric_cast class template. It performs runtime checks that throw an exception of type
bad_numeric_cast if you will overflow or underflow the variable where you are putting a value. Example
shows you how to do this.
Example 3-8. Safe numeric conversions
#include <iostream>
#include <boost/cast.hpp>
using namespace std;
using boost::numeric_cast;
using boost::bad_numeric_cast;
int main( ) {
// Integer sizes
try {
int i = 32767;
short s = numeric_cast<short>(i);
cout << "s = " << s << endl;
i++; // Now i is out of range (if sizeof(short) is 2)
s = numeric_cast<short>(i);
catch (bad_numeric_cast& e) {
cerr << e.what( ) << endl;
try {
int i = 300;
unsigned int ui = numeric_cast<unsigned int>(i);
cout << ui << endl; // Fine
i *= -1;
ui = numeric_cast<unsigned int>(i); // i is negative!
catch (bad_numeric_cast& e) {
cerr << e.what( ) << endl;
try {
double d = 3.14;
int i = numeric_cast<int>(d);
i = numeric_cast<int>(d); // This shaves off the 0.14!
cout << i << endl;  // i = 3
catch (bad_numeric_cast& e) {
cerr << e.what( ) << endl;
Page 141
ABC Amber CHM Converter Trial version,
Break apart pdf pages - Split, seperate PDF into multiple files in, ASP.NET, MVC, Ajax, WinForms, WPF
Explain How to Split PDF Document in Visual C#.NET Application
break pdf documents; break a pdf apart
Break apart pdf pages - VB.NET PDF File Split Library: Split, seperate PDF into multiple files in, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET PDF Document Splitter Control to Disassemble PDF Document
break pdf into smaller files; pdf link to specific page
Page 142
ABC Amber CHM Converter Trial version,
C# PDF Page Insert Library: insert pages into PDF file in
Offer PDF page break inserting function. Apart from the ability to inserting a new PDF page into PDF page using C# .NET, how to reorganize PDF document pages
split pdf files; acrobat split pdf
Page 143
ABC Amber CHM Converter Trial version,
Recipe 3.7. Getting the Minimum and Maximum Values for a
Numeric Type
You need to know the largest or smallest representable value for your platform for a numeric type, such
as an int or double.
Use the numeric_limits class template in the <limits> header to get, among other things, the largest and
smallest possible values for a numeric type (see Example 3-9
Example 3-9. Getting numeric limits
#include <iostream>
#include <limits>
using namespace std;
template<typename T>
void showMinMax( ) {
cout << "min: " << numeric_limits<T>::min( ) << endl;
cout << "max: " << numeric_limits<T>::max( ) << endl;
cout << endl;
int main( ) {
cout << "short:" << endl;
showMinMax<short>( );
cout << "int:" << endl;
showMinMax<int>( );
cout << "long:" << endl;
showMinMax<long>( );
cout << "float:" << endl;
showMinMax<float>( );
cout << "double:" << endl;
showMinMax<double>( );
cout << "long double:" << endl;
showMinMax<long double>( );
cout << "unsigned short:" << endl;
showMinMax<unsigned short>( );
cout << "unsigned int:" << endl;
showMinMax<unsigned int>( );
cout << "unsigned long:" << endl;
showMinMax<unsigned long>( );
Here's what I get on Windows XP using Visual C++ 7.1:
min: -32768
max: 32767
min: -2147483648
max: 2147483647
min: -2147483648
max: 2147483647
Page 144
ABC Amber CHM Converter Trial version,
Page 145
ABC Amber CHM Converter Trial version,
Page 146
ABC Amber CHM Converter Trial version,
Chapter 4. Strings and Text
Recipe 4.1.  Padding a String
Recipe 4.2.  Trimming a String
Recipe 4.3.  Storing Strings in a Sequence
Recipe 4.4.  Getting the Length of a String
Recipe 4.5.  Reversing a String
Recipe 4.6.  Splitting a String
Recipe 4.7.  Tokenizing a String
Recipe 4.8.  Joining a Sequence of Strings
Recipe 4.9.  Finding Things in Strings
Recipe 4.10.  Finding the nth Instance of a Substring
Recipe 4.11.  Removing a Substring from a String
Recipe 4.12.  Converting a String to Lower- or Uppercase
Recipe 4.13.  Doing a Case-Insensitive String Comparison
Recipe 4.14.  Doing a Case-Insensitive String Search
Recipe 4.15.  Converting Between Tabs and Spaces in a Text File
Recipe 4.16.  Wrapping Lines in a Text File
Recipe 4.17.  Counting the Number of Characters, Words, and Lines in a Text File
Recipe 4.18.  Counting Instances of Each Word in a Text File
Recipe 4.19.  Add Margins to a Text File
Recipe 4.20.  Justify a Text File
Recipe 4.21.  Squeeze Whitespace to Single Spaces in a Text File
Recipe 4.22.  Autocorrect Text as a Buffer Changes
Recipe 4.23.  Reading a Comma-Separated Text File
Recipe 4.24.  Using Regular Expressions to Split a String
Page 147
ABC Amber CHM Converter Trial version,
Page 148
ABC Amber CHM Converter Trial version,
This chapter contains recipes for working with strings and text files. Most C++ programs, regardless of
their application, manipulate strings and text files to some degree. Despite the variety of applications,
however, the requirements are often the samefor strings: trimming, padding, searching, splitting, and so
on; for text files: wrapping, reformatting, reading delimited files, and more. The recipes that follow
provide solutions to many of these common needs that do not have ready-made solutions in the C++
standard library.
The standard library is portable, standardized, and, in general, at least as efficient as homemade
solutions, so in the following examples I have preferred it over code from scratch. It contains a rich
framework for manipulating and managing strings and text, much of which is in the form of the class
templates basic_string (for strings), basic_istream, and basic_ostream (for input and output text streams).
Almost all of the techniques in this chapter use or extend these class templates. In cases where they didn't
have what I wanted, I turned to another area of the standard library that is full of generic, prebuilt
solutions: algorithms and containers.
Everybody uses strings, so chances are that if what you need isn't in the standard library, someone has
written it. The Boost String Algorithms library, written by Pavol Droba, fills many of the gaps in the
standard library by implementing most of the algorithms that you've had to use at one time or another,
and it does it in a portable, efficient way. Check out the Boost project at
for more
information and documentation of the String Algorithms library. There is some overlap between the String
Algorithms library and the solutions I present in this chapter. In most cases, I provide examples of or at
least mention Boost algorithms that are related to the solutions presented.
For most examples, I have provided both a nontemplate and a template version. I did this for two
reasons. First, most of the areas of the standard library that use character data are class or function
templates that are parameterized on the type of character, narrow (char) or wide (wchar_t). By following
this model, you will help maximize the compatibility of your software with the standard library. Second,
whether you are working with the standard library or not, class and function templates provide an
excellent facility for writing generic software. If you do not need templates, however, you can use the
nontemplate versions, though I recommend experimenting with templates if you are new to them.
The standard library makes heavy use of templates and uses typedefs to insulate programmers from
some of the verbose syntax that templates use. As a result, I use the terms basic_string, string, and
wstring interchangeably, since what applies to one usually applies to them all. string and wstring are just
typedefs for basic_string<char> and basic_string<wchar_t>.
Finally, you will probably notice that none of the recipes in this chapter use C-style strings, i.e.,
null-terminated character arrays. The standard library provides such a wealth of efficient and extensible
support for C++ strings that to use C-style string functions (which were provided primarily for
backward-compatibility anyway) is to forego the flexibility, safety, and generic nature of what you get for
free with your compiler: C++ string classes.
Page 149
ABC Amber CHM Converter Trial version,
Page 150
ABC Amber CHM Converter Trial version,
Documents you may be interested
Documents you may be interested