mvc display pdf in partial view : Extract color image from pdf in c# software application dll winforms html web page web forms 0131473816_book20-part38

GetPPIPrinter
returns the number of pixels per logical inch for the cur-
rent device context,and 
GetPPIScreen
returns the number of pixels per logical
inch of the screen.
Scaling for Printing and Previewing
When drawing on a window,you probablydon’t concern yourself about scaling
your graphics because displays tend to have similar resolutions. However,
there are several factors to take into account when drawing to a printer:
 You need to scale and position graphics to fit the width of the page,and
break the graphics into pages if necessary.
 Fonts are based on screen resolution,so when drawing text,you need to
set a scale so that the printer device context matches the screen resolu-
tion.Dividing the printer resolution (
GetPPIPrinter
) by the screen resolu-
tion (
GetPPIScreen
) can give a suitable scaling factor for drawing text.
 When rendering the preview,wxWidgets uses a 
wxMemoryDC
to draw into a
bitmap. The size of the bitmap (returned by 
wxDC::GetSize
) depends on
the zoom scale,and an extra scale factor must be calculated to deal with
this.Divide the size returned by 
GetSize
by the actual page size returned
by 
GetPageSizePixels
to get this scale factor.This value should be multi-
plied by any other scale you calculated.
You can use 
wxDC::SetUserScale
to let the device context perform the scal-
ing for subsequent graphics operations and 
wxDC::SetDeviceOrigin
to set the
origin (for example,to center a graphic on a page).You can keep calling these
scaling and device origin functions for different parts of your graphics,on the
same page if necessary.
The wxWidgets sample in 
samples/printing
shows how to do scaling.The
following example shows a function adapted from the printing sample,which
scales and positions a 200×200 pixel graphic on a printer or preview device
context.
void MyPrintout::DrawPageOne(wxDC *dc)
{
// You might use THIS code if you were scaling
// graphics of known size to fit on the page.
// We know the graphic is 200x200. If we didn’t know this,
// we’d need to calculate it.
float maxX = 200;
float maxY = 200;
// Let’s have at least 50 device units margin
float marginX = 50;
float marginY = 50;
Using the Printing Framework
165
Extract color image from pdf in c# - Select, copy, paste PDF images in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support PDF Image Extraction from a Page, a Region on a Page, and PDF Document
extract images from pdf files without using copy and paste; extract images from pdf file
Extract color image from pdf in c# - VB.NET PDF Image Extract Library: Select, copy, paste PDF images in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support PDF Image Extraction from a Page, a Region on a Page, and PDF Document
extract images from pdf c#; some pdf image extractor
// Add the margin to the graphic size
maxX += (2*marginX);
maxY += (2*marginY);
// Get the size of the DC in pixels
int w, h;
dc->GetSize(&w, &h);
// Calculate a suitable scaling factor
float scaleX=(float)(w/maxX);
float scaleY=(float)(h/maxY);
// Use x or y scaling factor, whichever fits on the DC
float actualScale = wxMin(scaleX,scaleY);
// Calculate the position on the DC for centring the graphic
float posX = (float)((w - (200*actualScale))/2.0);
float posY = (float)((h - (200*actualScale))/2.0);
// Set the scale and origin
dc->SetUserScale(actualScale, actualScale);
dc->SetDeviceOrigin( (long)posX, (long)posY );
// Now do the actual drawing
dc.SetBackground(*wxWHITE_BRUSH);
dc.Clear();
dc.SetFont(wxGetApp().m_testFont);
dc.SetBackgroundMode(wxTRANSPARENT);
dc.SetBrush(*wxCYAN_BRUSH);
dc.SetPen(*wxRED_PEN);
dc.DrawRectangle(0, 30, 200, 100);
dc.DrawText( wxT(“Rectangle 200 by 100”), 40, 40);
dc.SetPen( wxPen(*wxBLACK,0,wxDOT_DASH) );
dc.DrawEllipse(50, 140, 100, 50);
dc.SetPen(*wxRED_PEN);
dc.DrawText( wxT(“Test message: this is in 10 point text”),
10, 180);
}
In this code,we simply use 
wxDC::GetSize
to get the preview or printer resolu-
tion so we can fit the graphic on the page.In this example,we’re not interested
in the points-per-inch printer resolution, as we might be if we were drawing
text or lines of a specific length in millimeters,because the graphic doesn’t
have to be a precise size:it’s just scaled to fit the available space.
Next,we’ll show code that prints text at a size to match how it appears
on the screen and that also draws lines that have a precise length,rather than
simply being scaled to fit.
void MyPrintout::DrawPageTwo(wxDC *dc)
{
// You might use THIS code to set the printer DC to roughly
166
Drawing and Printing Chapter 5
C# PDF insert text Library: insert text into PDF content in C#.net
Ability to change text font, color, size and location and output a new PDF document. XDoc.PDF for .NET empowers C# developers to add multiple text processing
extract photo from pdf; extract photos from pdf
C# WPF PDF Viewer SDK to annotate PDF document in C#.NET
Users can set graph annotation properties, such as fill color, line color and transparency. Support to create a text box annotation to PDF file. C#.NET WPF PDF
pdf image extractor; online pdf image extractor
// reflect the screen text size. This page also draws lines of
// actual length 5cm on the page.
// Get the logical pixels per inch of screen and printer
int ppiScreenX, ppiScreenY;
GetPPIScreen(&ppiScreenX, &ppiScreenY);
int ppiPrinterX, ppiPrinterY;
GetPPIPrinter(&ppiPrinterX, &ppiPrinterY);
// This scales the DC so that the printout roughly represents the
// the screen scaling.
float scale = (float)((float)ppiPrinterX/(float)ppiScreenX);
// Now we have to check in case our real page size is reduced
// (e.g. because we’re drawing to a print preview memory DC)
int pageWidth, pageHeight;
int w, h;
dc->GetSize(&w, &h);
GetPageSizePixels(&pageWidth, &pageHeight);
// If printer pageWidth == current DC width, then this doesn’t
// change. But w might be the preview bitmap width,
// so scale down.
float overallScale = scale * (float)(w/(float)pageWidth);
dc->SetUserScale(overallScale, overallScale);
// Calculate conversion factor for converting millimetres into
// logical units.
// There are approx. 25.4 mm to the inch. There are ppi
// device units to the inch. Therefore 1 mm corresponds to
// ppi/25.4 device units. We also divide by the
// screen-to-printer scaling factor, because we need to
// unscale to pass logical units to DrawLine.
// Draw 50 mm by 50 mm L shape
float logUnitsFactor = (float)(ppiPrinterX/(scale*25.4));
float logUnits = (float)(50*logUnitsFactor);
dc->SetPen(* wxBLACK_PEN);
dc->DrawLine(50, 250, (long)(50.0 + logUnits), 250);
dc->DrawLine(50, 250, 50, (long)(250.0 + logUnits));
dc->SetBackgroundMode(wxTRANSPARENT);
dc->SetBrush(*wxTRANSPARENT_BRUSH);
dc->SetFont(wxGetApp().m_testFont);
dc->DrawText(wxT(“Some test text”), 200, 300 );
}
Printing Under Unix with GTK+
Unlike Mac OS X and Windows,Unix does not provide a standard way to dis-
play text and graphics onscreen and print it using the same API. Instead,
screen display is done via the X11 library (via GTK+ and wxWidgets),whereas
printing has to be done by sending a file of PostScript commands to the
printer. Fonts are particularly tricky to handle; until recently, only a small
number of applications have offered WYSIWYG (What You See Is What You
Using the Printing Framework
167
C# PDF File Compress Library: Compress reduce PDF size in C#.net
file with multiple ways with C# Programming Language Program.RootPath + "\\" 3_optimized.pdf"; // create optimizing Options for Color Image -- // to enable
extract image from pdf; some pdf image extractor
How to C#: Overview of Using XImage.Raster
Able to support text extract with OCR. Perform annotation capabilities to mark, draw, and visualize objects on image document page. Provide complete color manage
pdf image text extractor; extract pdf pages to jpg
Get) under Unix.In the past,wxWidgets offered its own printing implementa-
tion using PostScript that never fully matched the screen display.
From version 2.8,the GNOME Free Software Desktop Project provides
printing support through the 
libgnomeprint
and 
libgnomeprintui
librariesby
which most printing problems are solved.Beginning with version 2.5.4,the
GTK+ port of wxWidgets can make use of these libraries if wxWidgets is
configured accordingly and if the libraries are present.You need to config-
ure wxWidgets with the 
--with-gnomeprint
switch, which will cause your
application to search for the GNOME print libraries at runtime.If they are
found,printing will be done through these;otherwise,the application will fall
back to the old PostScript printing code. Note that the application will not
require the GNOME print libraries tobe installed in order to run (there is no
dependency on these libraries).
3D G
RAPHICSWITH WX
GLC
ANVAS
It’s worth mentioning that wxWidgets comes with the capability of drawing
3D graphics, thanks to OpenGL and 
wxGLCanvas
. You can use it with the
OpenGL clone Mesa if your platform doesn’t support OpenGL.
To  enable 
wxGLCanvas
support  under  Windows, edit 
include/wx/msw/
setup.h
,set 
wxUSE_GLCANVAS
to 
1
,and compile with 
USE_OPENGL=1
on the com-
mand line.You may also need to add 
opengl32.lib
to the list of libraries your
program is linked with. On Unix and Mac OS X, pass 
--with-opengl
to the 
configure
script to compile using OpenGL or Mesa.
If you’re already an OpenGL programmer,using 
wxGLCanvas
is very sim-
ple.You create a 
wxGLCanvas
object within a frame or other container window,
call 
wxGLCanvas::SetCurrent
to direct regular OpenGL commands to the win-
dow,issue normal OpenGL commands,and then call 
wxGLCanvas::SwapBuffers
to show the OpenGL buffer on the window.
The following paint handler shows the principles of rendering 3D graph-
ics  and  draws  a  cube. The full  sample can be compiled  and run from
samples/opengl/cube
in your wxWidgets distribution.
void TestGLCanvas::OnPaint(wxPaintEvent& event)
{
wxPaintDC dc(this);
SetCurrent();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-0.5f, 0.5f, -0.5f, 0.5f, 1.0f, 3.0f);
glMatrixMode(GL_MODELVIEW);
/* clear color and depth buffers */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
/* draw six faces of a cube */
glBegin(GL_QUADS);
168
Drawing and Printing Chapter 5
C# TIFF: TIFF Editor SDK to Read & Manipulate TIFF File Using C#.
3. Save Tiff file with color profile. 1. Extract text from Tiff file. Various types annotation objects can be added to your loaded Tiff image file in C#
extract jpg pdf; how to extract text from pdf image file
How to C#: Color and Lightness Effects
PDF, VB.NET convert PDF to text, VB.NET extract PDF pages, VB Raster SDK, you can get and modify the color and lightness effects of image by assigning
extract pictures from pdf; pdf extract images
glNormal3f( 0.0f, 0.0f, 1.0f);
glVertex3f( 0.5f, 0.5f, 0.5f); glVertex3f(-0.5f, 0.5f, 0.5f);
glVertex3f(-0.5f,-0.5f, 0.5f); glVertex3f( 0.5f,-0.5f, 0.5f);
glNormal3f( 0.0f, 0.0f,-1.0f);
glVertex3f(-0.5f,-0.5f,-0.5f); glVertex3f(-0.5f, 0.5f,-0.5f);
glVertex3f( 0.5f, 0.5f,-0.5f); glVertex3f( 0.5f,-0.5f,-0.5f);
glNormal3f( 0.0f, 1.0f, 0.0f);
glVertex3f( 0.5f, 0.5f, 0.5f); glVertex3f( 0.5f, 0.5f,-0.5f);
glVertex3f(-0.5f, 0.5f,-0.5f); glVertex3f(-0.5f, 0.5f, 0.5f);
glNormal3f( 0.0f,-1.0f, 0.0f);
glVertex3f(-0.5f,-0.5f,-0.5f); glVertex3f( 0.5f,-0.5f,-0.5f);
glVertex3f( 0.5f,-0.5f, 0.5f); glVertex3f(-0.5f,-0.5f, 0.5f);
glNormal3f( 1.0f, 0.0f, 0.0f);
glVertex3f( 0.5f, 0.5f, 0.5f); glVertex3f( 0.5f,-0.5f, 0.5f);
glVertex3f( 0.5f,-0.5f,-0.5f); glVertex3f( 0.5f, 0.5f,-0.5f);
glNormal3f(-1.0f, 0.0f, 0.0f);
glVertex3f(-0.5f,-0.5f,-0.5f); glVertex3f(-0.5f,-0.5f, 0.5f);
glVertex3f(-0.5f, 0.5f, 0.5f); glVertex3f(-0.5f, 0.5f,-0.5f);
glEnd();
glFlush();
SwapBuffers();
}
Figure 5-10 shows another OpenGL sample, a cute (if angular) penguin 
that  can  be  rotated  using  the  mouse. You  can  find  this  sample  in
samples/opengl/penguin
.
3D Graphics with wxGLCanvas
169
Figure 5-10 OpenGL “penguin”sample
C#: Use OCR SDK Library to Get Image and Document Text
using this OCR SDK to extract image and document scanned document or image-only PDF using C# Support both monochrome and bitonal color image recognition for
extract image from pdf online; extract photos pdf
C# Raster - Modify Image Palette in C#.NET
convert PDF to images, C#.NET PDF file & pages edit, C#.NET PDF pages extract, copy, paste Note: if the image itself does not contain palette Color then we
extract text from pdf image; how to extract a picture from a pdf
S
UMMARY
In this chapter,you have learned how to draw on device contexts and use the
wxWidgets printing framework, and you received a quick introduction to
wxGLCanvas
.You can look at the following source code in your wxWidgets distri-
bution for examples of drawing and printing code:
samples/drawing
samples/font
samples/erase
samples/image
samples/scroll
samples/printing
src/html/htmprint.cpp
demos/bombs
demos/fractal
demos/life
For advanced 2D drawing applications,you might want to consider the
wxArt2D library, which offers loading and saving of graphical objects using
SVG files (Scalable Vector Graphics),flicker-free updating, gradients, vector
paths, and more. See Appendix E, “ Third-Party Tools for wxWidgets,” for
where to get wxArt2D.
Next,we’ll look at how your application can respond to mouse,keyboard,
and joystick input.
170
Drawing and Printing Chapter 5
C# HTML5 PDF Viewer SDK to annotate PDF document online in C#.NET
Users can set graph annotation properties, such as line thickness, color and transparency. C# HTML5 PDF Viewer: Annotate PDF Online.
extract image from pdf using; extract pdf images
C# TIFF: How to Embed, Remove, Add and Update TIFF Color Profile
color profiles. Commonly, Tiff image color profiles like ICC and ICM are widely used in C#.NET imaging application. RasterEdge XDoc
how to extract pictures from pdf files; how to extract images from pdf
C H A P T E R
6
Handling Input
All GUI applications must respond to input in some way.This chapter shows
how you can respond to user input from the mouse,keyboard,and joystick.
M
OUSE
I
NPUT
Broadly speaking, there are two categories of mouse input. Basic mouse
events are sent using 
wxMouseEvent
and are passed uninterpreted to your
handler function. Commands associated with controls, on the other hand,
are often the result of interpreting a mouse (or other) event as a particular
command.
For example,when you add 
EVT_BUTTON
to an event table,you are inter-
cepting a 
wxCommandEvent
that was generated by the 
wxButton
.Internally, the
button is intercepting 
EVT_LEFT_DOWN
and generating the command event as a
result. (Of course, on most platforms,
wxButton
is implemented natively and
doesn’t use  low-level wxWidgets event handling, but it’s  true  of custom
classes.)
Because we’ve already seen examples of handling command events,we
will concentrate on basic mouse events.
You can intercept button up, button down, and double-click events for
left, middle, and right  mouse buttons. You can intercept  motion  events,
whether the mouse is moving with or without buttons pressed.You can inter-
cept events telling you that the mouse is entering or leaving the window.
Finally,you can intercept scroll wheel events if the hardware provides a scroll
wheel.
When you receive a mouse event, you can also check the state of the
mouse buttons,and the pressed state of the modifier keys (Shift,Alt,Control,
and Meta).You can also retrieve the current mouse position relative to the
top-left corner of the window’s client area.
171
Table 6-1 lists the event table macros you can use.
wxMouseEvent
does not
propagate to parents of the originating window,so to handle these events,you
must derive from a window class or derive from 
wxEvtHandler
and plug the
object  into  the  window  with 
SetEventHandler
or 
PushEventHandler
.
Alternatively,you can use dynamic event handling with 
Connect
.
Table 6-1 Mouse Event Table Macros
EV
T_LEFT_DOWN(func
Handles a 
wxEVT_LEFT_DOWN
event,generated
when the left mouse button changes to the 
“down”state.
EVT_LEFT_UP(func)
Handles a 
wxEVT_LEFT_UP
event,generated
when the left mouse button changes to the 
“up”state.
EVT_LEFT_DCLICK(func)
Handles a 
wxEVT_LEFT_DCLICK
event,generated
when the left mouse button is double-clicked.
EVT_MIDDLE_DOWN(func) 
Handles a 
wxEVT_MIDDLE_DOWN
event,gener-
ated when the middle mouse button changes to 
the “down”state.
EVT_MIDDLE_UP(func)
Handles a 
wxEVT_MIDDLE_UP
event,generated
when the middle mouse button changes to the
“up”state.
EVT_MIDDLE_DCLICK(func
Handles a 
wxEVT_MIDDLE_DCLICK
event,gener-
ated when the middle mouse button is 
double-clicked.
EVT_RIGHT_DOWN(func) 
Handles a 
wxEVT_RIGHT_DOWN
event,generated
when the right mouse button changes to the
“down”state.
EVT_RIGHT_UP(func)
Handles a 
wxEVT_RIGHT_UP
event,generated 
when the right mouse button changes to 
the “up”state.
EVT_RIGHT_DCLICK(func)
Handles a 
wxEVT_RIGHT_DCLICK
event,gener-
ated when the right mouse button is 
double-clicked.
EVT_MOTION(func)
Handles a 
wxEVT_MOTION
event,generated 
when the mouse moves.
EVT_ENTER_WINDOW(func
Handles a 
wxEVT_ENTER_WINDOW
event,gener-
ated when the mouse enters the window.
EVT_LEAVE_WINDOW(func)
Handles a 
wxEVT_LEAVE_WINDOW
event,gener-
ated when the mouse leaves the window.
EVT_MOUSEWHEEL(func)
Handles a 
wxEVT_MOUSEWHEEL
event,
generated when the mouse wheel moves.
EVT_MOUSE_EVENTS(func)
Handles all mouse events.
172
Handling Input Chapter 6
Handling Button and Motion Events
These are the main mouse event functions thatyou can use within your event
handler when handling mouse button and motion events.
To test whether a modifier key is down at the time of generating the
event, use 
AltDown, MetaDown, ControlDown
,or 
ShiftDown
.Use 
CmdDown
if you
want to test for either the Meta key (on Mac OS X) or the Control key (other
platforms).See “Modifier Key Variations”later in the chapter for more on this.
To determine which mouse button is currently pressed,use 
LeftIsDown
,
MiddleIsDown
,and 
RightIsDown
.You can also test whether a button is pressed by
passing 
wxMOUSE_BTN_LEFT
,
wxMOUSE_BTN_MIDDLE
,
wxMOUSE_BTN_RIGHT
or 
wxMOUSE_
BTN_ANY
to 
Button
.Note that these test whether a button is down at the time of
the mouse event,rather than whether the button changed state.
On Mac OS X,the Command key translates to Meta,and the Option key
is Alt.Because the Mac is often configured with only one mouse button,the
user holds down the Control key while clicking to generate a right-click event.
This means that there is no such thing as Control-Right Click on Mac unless
you have an external mouse with two or three buttons.
You can test for the type of mouse event with 
Dragging
(the mouse is mov-
ing with a button pressed down),
Moving
(no button is currently pressed),
Entering
,
Leaving
,
ButtonDown
,
ButtonUp
,
ButtonDClick
,
LeftClick
,
LeftDClick
,
LeftUp
,
RightClick
,
RightDClick
,
RightUp
,
ButtonUp
,and 
IsButton
.
Retrieve the mouse position in device units (relative to the client win-
dow’s top-left corner) with 
GetPosition
or 
GetX
and 
GetY
.You can get the posi-
tion in logical units by passing a device context to 
GetLogicalPosition
.
Here’s an example of mouse handling fora simple doodling application.
BEGIN_EVENT_TABLE(DoodleCanvas, wxWindow)
EVT_MOUSE_EVENTS(DoodleCanvas::OnMouseEvent)
END_EVENT_TABLE()
void DoodleCanvas::OnMouseEvent(wxMouseEvent& event)
{
static DoodleSegment *s_currentSegment = NULL;
wxPoint pt(event.GetPosition());
if (s_currentSegment && event.LeftUp())
{
// End the segment on mouse left up
if (s_currentSegment->GetLines().GetCount() == 0)
{
// Empty segment: delete it
delete s_currentSegment;
s_currentSegment = (DoodleSegment *) NULL;
}
else
{
// We’ve got a valid segment, so store it
DrawingDocument *doc = GetDocument();
doc->GetCommandProcessor()->Submit(
Mouse Input
173
new DrawingCommand(wxT(“Add Segment”), DOODLE_ADD,
doc, s_currentSegment));            
doc->Modify(true);
s_currentSegment = NULL;
}
}
else if (m_lastX > -1 && m_lastY > -1 && event.Dragging())
{
// We’re dragging: append a line to the current segment
if (!s_currentSegment)
s_currentSegment = new DoodleSegment;
DoodleLine *newLine = new DoodleLine(m_lastX, m_lastY, pt.x,
pt.y);
s_currentSegment->GetLines().Append(newLine);
wxClientDC dc(this);
DoPrepareDC(dc);
dc.SetPen(*wxBLACK_PEN);    
dc.DrawLine( m_lastX, m_lastY, pt.x, pt.y);
}
m_lastX = pt.x;
m_lastY = pt.y;
}
In this application, line segments are stored in a document.While the user
drags using the left button,the function adds lines to the current segment and
also draws the lines.When the user releases the left mouse button,the current
segment is submitted to the document using the command processor (part of
the document-view framework),which allows undo/redo to be implemented.In
the application’s 
OnPaint
handler (not shown), all the document’s line seg-
ments are drawn. For a complete doodling program with undo/redo, see
Chapter 19,“Working with Documents and Views.”
A more realistic application would capture the mouse on left button
down and release it on left button up so that when dragging outside the win-
dow,the window would still receive events.
Handling Mouse Wheel Events
When you get a mouse wheel event,youretrieve the positive or negative rota-
tion amount with
GetWheelRotation
.Divide this value by the value returned by
GetWheelDelta
to get the number of lines that this rotation represents.Most
devices generate one event per delta,but future devices may send events more
frequently,so you need to be able to accumulate the amount of rotation and
only take action when rotation equivalent to a full line has been received.
Alternatively,you may be able to scroll by a fraction of a line.You should take
into account the value returned by 
GetLinesPerAction
,as configured by the
user via the system control panel,and multiply by this amount to scroll the
desired number of actual lines.
174
Handling Input Chapter 6
Documents you may be interested
Documents you may be interested