how to generate pdf in asp net mvc : Convert pdf to word to edit text online Library SDK component .net wpf azure mvc manual-report-generator-List-Label9-part168

Programming Using the API 
91 
If the user selects the image in the Designer and clicks on the Variable's "Properties" 
sub  item  in  the  property  window,  the  callback  LL_EDIT_USEROBJ  is  invoked  to 
request a dialog in which the parameters belonging to the object can be changed. 
These parameters are automatically stored in the project definition file with the other 
object information and passed with the callback LL_DRAW_USEROBJ for evaluation, 
so that your program does not have to take care of further storage of the parameters. 
Please note the references of article 99109 (http://support.microsoft.com/kb/99109) 
in the Microsoft Knowledge Base when you want to print DDBs (device-dependent 
bitmaps)  in  callback  objects:  transform  the  DDB  first  of  all  to  a  DIB  (device-
independent bitmap) if it is not compatible with the printer DC, otherwise irregular 
behavior of the printer driver is pre-programmed. 
4.6.3. Definition of a Callback Routine 
A callback routine is defined like  a normal Windows callback. For special features 
such as compiler switches, please refer to your compiler manual. 
The general form of a callback is, in C  
LRESULT CALLBACK _extern LLCallback(INT nMsg, LONG lParam, DWORD lUserParam); 
You can pass the routine pointer immediately: 
LlSetNotificationCallback(hJob, LLCallback); 
From now on your routine will be called by List & Label if necessary. 
At the end of the program it is important that the callback is set to NULL, otherwise 
your system will raise an unhandled exception. 
LlSetNotificationCallback(hJob, NULL); 
4.6.4. Passing Data to the Callback Routine 
The value of the nMsg parameter determines the different functions. The values are 
the  constants  which  begin  with  LL_CMND_xxxx,  e.g.  LL_CMND_TABLEFIELD, 
LL_NTFY_xxxx or LL_INFO. 
Depending  on  the  task  your  program  has  to  perform,  the  parameter  lParam  has 
different meanings. The individual meanings are described later on. They are mostly 
structures (records) which lParam points to, so the value must therefore be cast by a 
type conversion to a structure pointer: 
LRESULT CALLBACK _extern  
LLCallback(INT wParam, LONG lParam, LONG lUserParam) 
PSCLLTABLEFIELD pSCF; 
switch (wParam) 
Convert pdf to word to edit text online - Library SDK component:C# PDF Convert to Text SDK: Convert PDF to txt files in C#.net, ASP.NET MVC, WinForms, WPF application
C# PDF to Text (TXT) Converting Library to Convert PDF to Text
www.rasteredge.com
Convert pdf to word to edit text online - Library SDK component:VB.NET PDF Convert to Text SDK: Convert PDF to txt files in vb.net, ASP.NET MVC, WinForms, WPF application
VB.NET Guide and Sample Codes to Convert PDF to Text in .NET Project
www.rasteredge.com
Programming Using the API 
92 
case LL_CMND_TABLEFIELD: 
pSCF = (PSCLLTABLEFIELD)lParam; 
// do something using pSCF; 
break; 
return(0); 
The function must always return a defined value. Unless stated otherwise, this value 
should be zero. 
lUserParam is the value passed by 
LlSetOption(hJob, LL_OPTION_CALLBACKPARAMETER, <Value>) 
This can be used to store an object pointer ("this", "self") in object-oriented languages. 
4.6.5. Passing Data by Messages 
Every message has three parameters: nMsg, wParam and  lParam in  the following 
definition of your message callback (this is called a window procedure, but is nothing 
but a callback!) 
LRESULT WINAPI MyWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam); 
The  message  value  which  List  &  Label  uses  can  be  queried  by 
LlGetNotificationMessage(). If the default setting is not suitable for your purposes (by 
definition a unique value) another can be chosen with LlSetNotificationMessage(). 
wParam  is  once  again  our  function  index  and  lParam  points  to  an  intermediate 
structure of the type scLlCallback: 
struct scLlCallback 
int 
_nSize; 
LPARAM  _lParam; 
LRESULT _lResult; 
LPARAM  _lUserParameter; 
The necessary _lParam (as parameter value) and _lResult (as return value) are stored 
in this structure. 
nLLMessage = LlGetNotificationMessage(hJob); 
//.... 
//...in the window procedure... 
if (wMsg == nLLMessage) 
PSCCALLBACK 
pSC; 
PSCLLTABLEFIELD pSCF; 
Library SDK component:VB.NET PDF Convert to Word SDK: Convert PDF to Word library in vb.
Convert PDF document to DOC and DOCX formats in Visual Basic control to export Word from multiple PDF files in Create editable Word file online without email.
www.rasteredge.com
Library SDK component:C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
third-party software, you can hardly edit PDF document Under this situation, you need to convert PDF document to some easily editable files like Word document
www.rasteredge.com
Programming Using the API 
93 
pSC = (PSCCALLBACK)lParam; 
switch (wParam) 
case LL_CMND_TABLEFIELD: 
pSCF = (PSCLLTABLEFIELD)pSC->_lParam; 
// do something; 
pSC._lResult = 0; 
break; 
_lUserParam is the value passed by  
LlSetOption(hJob, LL_OPTION_CALLBACKPARAMETER, <value>) 
This can be used to store an object pointer ("this", "self") in object oriented languages. 
When  no  special  return  value  is  needed,  the  _lResult  field  doesn't  need  to  be 
changed, as it is set to 0 by default. 
4.6.6. Further Hints 
Some callback structures for drawing operations contain two device contexts. Both 
are identical and kept only for backward compatibility reasons.. 
If you select a GDI object in this DC or make other changes, e.g. change the mapping 
mode, you should reverse the changes before ending the routine.  
Tip:  the  Windows  API  functions  SaveDC(),  RestoreDC()  can  help  considerably  for 
complex changes. 
4.7. Advanced Programming 
This  chapter  is  only  required  if  you're  not  working  with  one  of  the  components 
(.NET/VCL/OCX). If you're using one of these components, you may skip this chapter. 
4.7.1. Direct Print and Export From the Designer 
Introduction 
It is possible to provide the Designer with data for preview, so that the user sees the 
report  as it will be when printed. Furthermore there is the possibility of printing or 
exporting directly from the Designer. 
For C++ there is already a fully functional sample source code available. You'll find it 
in the "Samples" program group for "Visual C++", its title is "Designer Preview and 
Drilldown ".  
Library SDK component:VB.NET Create PDF from Word Library to convert docx, doc to PDF in
XDoc.HTML5 Viewer. view, Annotate,Convert documents online using ASPX. XImage.Raster. XDoc.PDF. Scanning. Microsoft Office. XDoc.Word. XDoc.Excel. XDoc.PowerPoint
www.rasteredge.com
Library SDK component:C# PDF Text Extract Library: extract text content from PDF file in
source PDF document file for word processing, presentation extract text content from source PDF document file obtain text information and edit PDF text content
www.rasteredge.com
Programming Using the API 
94 
Your development environment must comply with the following conditions, so that 
this feature can be supported: 
It can respond to callbacks (refer to Chapter 4.6. Callbacks and Notifications) 
It  can  start a thread with a print procedure  and supports  synchronization 
elements such as Mutex, Critical Section or similar. 
The work to be undertaken by your code includes execution of your usual real data 
print/ export routine, however – at least for the preview – in a separate thread. For 
this purpose, information about the pending task (start, abort, end and query status) 
is  supplied  via  a  callback.  A  pointer  to  a  scLlDesignerPrintJob  structure  will  be 
passed, specifing all neccessary information for the respective task. There are only a 
few changes necessary compared to a regular print/export. 
Preparation 
In order to enable the direct preview or export functionality within the designer, you 
have to set one or both of the following options: 
LL_OPTION_DESIGNERPREVIEWPARAMETER for preview of real data 
LL_OPTION_DESIGNEREXPORTPARAMETER  for  the  export  from  the 
designer 
The value that you pass via these options can be defined by yourself, for example a 
pointer to an internal data structure or object. You receive this back unchanged in the 
callback (scLlDesignerPrintJob._nUserParam). Important for List &  Label is that it is 
not 0 or -1. 
Via callback LL_NTFY_DESIGNERPRINTJOB List & Label informs you about the task 
that has to be performed. This callback  will  always be called in the context of the 
designer thread (this is the thread, from which LlDefineLayout() was called).  
When  you use  structure  members, e.g. like  _nUserParam,  please  ensure  that the 
thread has evaluated or copied them before you pass control back to List & Label, as 
the structure will no longer be valid then – this is true for all Callbacks! 
Tasks 
Now to the individual tasks, that will be put to you via the callback being indicated by 
various values of scLlDesignerPrintJob._nFunction. The symbolic constants for them 
all start with LL_DESIGNERPRINTCALLBACK...: 
Start Event (..._PREVIEW_START/..._EXPORT_START) 
Should you receive  this Event, you will have  to  create a  thread and pass the start 
parameters to it.  
This thread creates a new List & Label- job, and causes the new job to basically lead 
to the execution of "a standard" print loop. In addition to the normal print loop you will 
have to perform the following modifications: 
Library SDK component:VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.
C#.NET convert csv to PDF, C#.NET convert PDF to svg, C#.NET convert PDF to text, C#.NET convert PDF to images VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET
www.rasteredge.com
Library SDK component:VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
C#.NET convert csv to PDF, C#.NET convert PDF to svg, C#.NET convert PDF to text, C#.NET convert PDF to images VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET
www.rasteredge.com
Programming Using the API 
95 
Before  print  start set  the option  LL_OPTIONSTR_ORIGINALPROJECTFILENAME 
to the path, as delivered by the structure. 
After  starting the  print  job, use LlPrintSetOption(hJob ,LL_PRNOPT_LASTPAGE, 
_nPages) to set the maximum number of pages to be printed, as passed by the 
callback structure. 
After each LlPrint(), check if the number of pages has exceeded this value, if so 
call  function LlPrintAbort().  This  optimization can and  should also  be used for 
normal print jobs. In this case you should not abort, but end printing normally 
using LlPrintEnd(). 
Indicate  the  thread  status  using  the  provided  event  _hEvent  of  the  callback 
structure to List & Label, once at the start and once at the end of the thread. It is 
important to synchronize the signaling of the event in a way that makes sure that 
the  following  call  to  QUEST_JOBSTATE  delivers  the  correct  state 
RUNNING/STOPPED. As you're signaling the event from the thread, you cannot 
use the thread status, but will have to use a corresponding variable. This process 
status has to be handled individually for each thread. 
Delete the remaining project data after printing 
Additionally the following points have to be considered: 
Preview 
Pass  the  window  handle  you've  received  in  the  callback  structure  via 
LlAssociatePreviewControl(hJob,hWnd,1)  to  List  &  Label  before  calling 
LlPrint(WithBox)Start, so that the print job is informed where the data should be 
presented. 
After 
completing 
printing, 
that 
is 
after 
LlPrintEnd() 
call 
LlAssociatePreviewControl(hJob,NULL,1), so that preview control regains control 
of the preview data. If a print error occurs, the last parameter has to be 0, so that 
the preview control is empty and not showing the last project. 
Export 
Use LlPrintWithBoxStart(), so that a status box can be displayed. For the parent 
window  handle  use  additionally  the  window  handle  passed  by  the  callback 
structure. 
Abort Event (..._PREVIEW_ABORT/..._EXPORT_ABORT) 
If  you  receive  this  event,  simply  call  LlPrintAbort()  to  abort  the  print  job  for  the 
preview/export thread. The print loop of the thread ensures correct handling. 
Finalize Event (..._PREVIEW_FINALIZE/..._EXPORT_FINALIZE) 
Will always be called, so that you can release internal data structures. 
Library SDK component:VB.NET PDF - Convert PDF Online with VB.NET HTML5 PDF Viewer
XDoc.HTML5 Viewer. view, Annotate,Convert documents online using ASPX. XImage.Raster. XDoc.PDF. Scanning. Microsoft Office. XDoc.Word. XDoc.Excel. XDoc.PowerPoint
www.rasteredge.com
Library SDK component:C# Create PDF from Word Library to convert docx, doc to PDF in C#.
Convert to PDF with embedded fonts or without original fonts fast. Able to get word count in PDF pages. Change Word hyperlink to PDF hyperlink and bookmark.
www.rasteredge.com
Programming Using the API 
96 
Status Query Event (..._PREVIEW_QUEST_JOBSTATE/..._EXPORT_ 
QUEST_JOBSTATE) 
Is  used  to  keep  List  &  Label  toolbar  icons  and  menu  options up  to  date. Return 
LL_DESIGNERPRINTTHREAD_STATE_RUNNING  when  your  thread  is  running, 
otherwise return LL_DESIGNERPRINTTHREAD_STATE_STOPPED. 
Activity 
Of  course  you  can  support  multiple  start  events.  Before  each  start,  List  &  Label 
checks if a print thread is running, and stops it if necessary with an abort event. 
Designer-Thread 
Print-Thread 
Start-Event: 
Copies  the  start  parameter  of  the 
callback 
Starts the print thread and waits on 
signal that it is ready (Event) 
starts: 
sets process  status internally to 
RUNNING 
indicates  change  of  state  per 
SetEvent(hEvent) to List & Label 
indicate readiness 
returns to List & Label 
From now on both the designer and preview/export run in parallel. 
Normal designer execution. 
Abort 
calls LlPrintAbort() for the print job 
and returns 
Status Query 
returns  the  value  of  the  process 
status 
Completion 
calls LlPrintAbort() if necessary and 
waits for thread to end 
create new job 
starts  print  loop  with  changes 
already mentioned above 
When printing is complete: 
set  internal  process  state  to 
STOPPED 
indicate  state  change  per 
SetEvent(hEvent) to List & Label 
end job 
delete project file 
It is advisable to use a unique structure for both output types, and then provide the 
address  of  the  structure  using  LL_OPTION_DESIGNERPREVIEWPARAMETER  and 
LL_OPTION_DESIGNEREXPORTPARAMETER  to  List  &  Label.  This  structure  should 
contain: 
Programming Using the API 
97 
 pointer  to  a  object  that  manages  the  data  source  (if  necessary  i.e. 
possible) 
a synchronization object (CRITICAL_SECTION) 
the thread handle of the thread in progress 
the job handle of the worker thread 
variables as copies of the start parameter 
If  your  data  source  only  allows  single  threaded  access,  you  must  set 
LL_OPTION_DESIGNERPRINT_SINGLETHREADED to TRUE. This will be used by List & 
Label, so that during the preview calculation no export is possible, and vice versa. 
4.7.2. Drilldown Reports in Preview 
Drilldown  reporting  means  navigation  in  hierarchical  data  through  different  detail 
levels. 
Initially only the top level will be printed to preview (for example "Customers"). With a 
click on a customer a new report (for example "Orders") will be opend, that contains 
detail  information  for this  record. In  this manner  you "drill down" through different 
levels until you reach for example the products a customer has ordered in a specific 
order. One of the  advantages  is the performance  gain  by means  of  specialization. 
Drilldown is available in preview. Drilldown can be defined for table rows and table 
fields. 
Using  drilldown  requires  that  your  development  system  can  handle  callbacks  or 
window notifications (see chapter 4.6. Callbacks and Notifications) 
The  .NET  and  VCL  components  in  databound  mode  support  drilldown 
automatically if a data source is used that supports hierarchies and can be reset. 
Most DataProviders comply with this requirement. If using the component in this 
manner, you can skip this chapter. 
For C++ there is already a fully functional sample source code available. You'll find it 
in the "Samples" program group for "Visual C++", its title is "Designer Preview and 
Drilldown".  
For other development systems it is suggested to implement drilldown with different 
threads, so tasks can be done in the background. In this case you'll need to be able 
to start a thread with the printing procedure and you'll need synchronisation elements 
like mutex or critical section. 
Your task is to initiate a real data print job with a corresponding filtered data source. 
For this purpose information about the task (start and end of a drilldown report) is 
available  in  the  callback. Only  minor changes to  the  normal  print  job  routines are 
necessary. 
Programming Using the API 
98 
Preparations 
To  enable  drilldown  in  List &  Label set  the option LL_OPTION_DRILLDOWNPARA-
METER to a value unequal to 0.  
Please  note,  that  this  option  has  to  be  set  for  each  LL-job,  that  should  support 
drilldown: 
// activate Drilldown for current LL-Job 
::LlSetOption(hJob, LL_OPTION_DRILLDOWNPARAMETER,  
(LPARAM)&oMyDrillDownParameters); 
To deactivate drilldown for this LL-job set the option to NULL: 
// deactivate Drilldown for current LL-Job 
::LlSetOption(hJob, LL_OPTION_DRILLDOWNPARAMETER, NULL); 
The parameter passed with this option can be used freely, for example as a pointer 
to an internal data structure or objecets. This parameter will be passed unchanged in 
the  callback  for  your  use  (scLlDrillDownJob._nUserParam).  Please  make  sure  the 
parameter is not 0 or NULL unless you want to deactivate drilldown. 
Via  the  callback  LL_NTFY_VIEWERDRILLDOWN  (for  further  description,  please  see 
chapter 4.6. Callbacks and Notifications) List & Label informs about the current task. 
This callback will always be called in the context of the preview thread, regardless if 
initiated from designer or preview print. 
When  you use  structure  members, e.g. like  _nUserParam,  please  ensure  that the 
thread has evaluated or copied them before you pass control back to List & Label, as 
the structure will no longer be valid then – this is true for all Callbacks! 
Tasks 
Now to the individual tasks, that will be put to you via the callback being indicated by 
various values of scLlDrillDownJob._nFunction: 
Start Event (LL_DRILLDOWN_START) 
If this event is fired, you can create a thread and pass on the drilldown parameters. If 
your  development  systems  does  not  support  threads,  you  should  use  the  main 
thread for the print job. In this case your program will not be usable for this period. 
The  return  value  of  the  callback  (resp.  the  _lReply  member  of  the  scLlCallback-
structure) should be set to a unique number, so you can assign the drilldown reports 
to the corresponding thread. 
Example: 
… 
LRESULT lResult = 0; 
case LL_DRILLDOWN_START: 
scLlDrillDownJob* pDDJob = (scLlDrillDownJob*)lParam; 
Programming Using the API 
99 
… StartSubreport(pDDJob); … 
// generate new Drilldown-JobID 
lResult = ++m_nUniqueDrillDownJobID; 
case LL_DRILLDOWN_FINALIZE: 
scLlDrillDownJob* pDDJob = (scLlDrillDownJob*)lParam; 
if (pDDJob->_nID == 0) 
// clean up 
else 
// clean up the corresponding job 
… 
return (lResult); 
… 
After copying the parameters, this thread creates a new List & Label job that uses the 
regular  print  loop.  The  following  differences  have  to  be  made  before  calling 
LlPrintStart(): 
set the  option LL_OPTIONSTR_PREVIEWFILENAME  to  the  path, that  has been 
passed in the structure with _pszPreviewFileName 
Example: 
// set preview filename 
::LlSetOptionString(pMyDrillDownParameters->m_hLlJob,  
LL_OPTIONSTR_PREVIEWFILENAME,  
pMyDrillDownParameters ->m_sPreviewFileName); 
Pass on the _hAttachInfo to List & Label that has been passed with the callback 
structure, so the print job is informed whrere the data should be displayed. 
Example: 
// attach viewer 
::LlAssociatePreviewControl(pMyDrillDownParameters->m_hLlJob,  
(HWND)pMyDrillDownParameters->_hAttachInfo,  
LL_ASSOCIATEPREVIEWCONTROLFLAG_DELETE_ON_CLOSE |  
LL_ASSOCIATEPREVIEWCONTROLFLAG_HANDLE_IS_ATTACHINFO); 
Finalize Event (LL_DRILLDOWN_FINALIZE) 
This  event will  be called  for  drilldown jobs,  that have been  canceled,  so  you  can 
release internal  data  structures.  Additionally  it is  suggested,  that  active  print jobs 
should be aborted by calling LlPrintAbort(). 
Programming Using the API 
100 
If the _nID member of the scLlDrillDownJob structure that has been passed by List & 
Label is 0 all active drilldown jobs can be ended and released. This happens if ending 
the preview. 
Preparing the Data Source 
To  provide the correct  data for  the drilldown report  minor changes to the  printing 
loop are neccessary. 
Relation(s) 
Drilldown can only be used when relations are declared. For drilldown reports use the 
function  LlDbAddTableRelationEx().  This  function  has  2  additional  parameters: 
pszKeyField and pszParentKeyField for the key field of the child table and the key field 
of the parent table, so a unique assignment can be made. 
Further  information  can  be  found  in  the  description  of  the  function 
LlDbAddTableRelationEx(). 
Please note, that the key fields must contain the table name as a prefix, for example 
"Customers.CustomerID". 
Example: 
Declare the relation between 'Customers' and 'Orders' table for drilldown using the 
northwind sample. 
// add relation 
… 
CString sParentField = pMyDrillDownParameters->_pszSubreportTableID +  
_T(".")+pMyDrillDownParameters->_pszKeyField; 
//Orders.CustomerID 
CString sChildField = pMyDrillDownParameters->_pszTableID + _T(".") +  
pMyDrillDownParameters->_pszSubreportKeyField; 
//Customers.OrderID 
::LlDbAddTableRelationEx(hJob,  
pMyDrillDownParameters->_pszSubreportTableID,   // "Orders" 
pMyDrillDownParameters->_pszTableID,   // "Customers" 
pMyDrillDownParameters->_pszRelationID, _T(""), 
sParentField, sChildField); 
… 
Datasource 
For each drilldown report the datasource should be filtered differently, because only 
the data related to the parent record that has been clicked is needed. 
For example you want to create a drilldown structure from "Customers" to "Orders". In 
this case the parent table should show all customers. A click on one customer should 
show only the corresponding orders related  to this special customer. Therefor the 
datasource  must  only  contain  the  orders  from  this  customer.  All  necessary 
information  for  filtering  the  child  table  can  be  found  in  the  structure 
'scLlDrillDownJob'. 
Documents you may be interested
Documents you may be interested