how to show pdf file in asp.net c# : Text searchable pdf file software application project winforms html windows UWP vba-to-vb.net-xll-add-in-with-excel-dna3-part1819

Fill in default values for Optional parameters in function headers. 
Enumerations and .xl* Constants 
In VBA, you can simply assign the constant because the enumeration is global to your 
project:  
Set rhs = rg.End(xlToRight) 
In Visual Basic .NET, you could either use the numeric equivalent  
Set rhs = rg.End(-4161) 
Or prefix enumerated constants with their type, eg XlDirection.xlUp rather than 
simply xlUp. The prefix can be added in VBA as well which may avoid ambiguities 
like xlVisible and xlSheetVisible. 
To get VB IDE constants from vbext_ProjectProtection (eg vbext_pp_locked) and 
vbext_ComponentType (eg vbext_ct_StdModule) use 
Imports Microsoft.Vbe.Interop 
.Cells reference 
Explicitly specify .Cells in lines like 
For Each cell In ActiveSheet.UsedRange.Columns(2).Cells 
Use of Parentheses with Method Calls 
In VBA, parentheses are omitted when you call subroutines and only required when 
you wish to catch the return value of a function. In Visual Basic .NET, parentheses 
are required when passing parameters in a method call. 
Default Properties 
In Visual Basic .NET, default properties are only supported if the properties take 
arguments. In VBA, you can use shortcuts when typing code by omitting the default 
properties like .Value. in VBA you can write  
myValue = Application.Range("A1") 
which returns the .value but in VB.Net you need to be explicit: 
myValue = Application.Range("A1").Value 
This is one of the most common incompatibilities between quick & dirty VBA and 
VB.NET. 
Assigning to cell values 
Similarly to the above, be explicit about the .Value property, ie not cell = xyz but 
cell.value = xyz. This avoids bugs when the left hand variable is an Object where you 
want a variant array of values from the range. 
Set Keyword 
In VBA, the Set keyword is necessary to distinguish between assignment of an object 
and assignment of the default property of the object. Since default properties are not 
supported in Visual Basic .NET, the Set keyword is not needed and is no longer 
Text searchable pdf file - 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
select text in pdf; pdf text search
Text searchable pdf file - 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
how to select text in pdf reader; pdf searchable text
supported. The IDE automatically removes the Set command from object references 
in code pasted in from VBA. 
Erase  
In VBA, the Erase statement clears the value of the elements. The VB.Net Erase 
statement destroys the elements of an array, and sets the array variable to Nothing.  
If you add an array as an item to a collection, it will point to the same array every time 
unless you re-create the array for each addition to the collection. 
You can clear the contents of an array in .Net using: 
System.Array.Clear(arr, arr.GetLowerBound(0), arr.Length) 
However, any existing pointers to that array (eg if it has been added to a dictionary 
collection) will now point to the cleared contents. The nearest equivalent to creating a 
new array is to simply ReDim the array without Preserve. 
ReDim 
In VBA you can write  
Dim distance() as Long 
ReDim distance(1,2) 
But in VB.Net 'ReDim' cannot change the number of dimensions of an array. So 
declare the array with a comma inside the brackets to give it two dimensions: 
Dim distance(,) As Long  
Byte arrays 
Byte arrays are a faster way to iterate through the characters of a string than MID$. 
In VBA you can write 
Dim bs1() As Byte, string1 as String 
bs1 = string1 
But in VB.Net a value of type 'String' cannot be converted to '1-dimensional array of 
Byte'. So use either UTF8 encoding to get the single-byte values for each character or 
Unicode to get two bytes per character: 
bs1 = System.Text.Encoding.Unicode.getBytes(string1) 
Join() function 
I had used Join() on an array loaded from a range to concatenate the values into one 
string. VBA ignored blank cells but vb.net threw an exception because some of the 
variant array values were Nothing for blank cells. So I created a routine to join only 
non-blank values. 
IsDate() 
This is the same trap as in VBA – it returns True f or a string value that looks like a 
date, so use TypeName(var)="Date" if you want to test for a Date type. 
Evaluate function 
This is also a function in .Net which evaluates math expressions, so change all 
occurrences to Application.Evaluate to get the Excel function. 
C# Create PDF Library SDK to convert PDF from other file formats
The PDF document file created by RasterEdge C# PDF document creator library is searchable and can be fully populated with editable text and graphics
how to make a pdf file text searchable; pdf search and replace text
VB.NET Create PDF from Text to convert txt files to PDF in vb.net
Batch convert editable & searchable PDF document from TXT formats in VB.NET class. Able to copy and paste all text content from .txt file to PDF file by keeping
cannot select text in pdf; convert pdf to searchable text online
Square bracket cell references 
The square bracket operators evaluate the Excel expression inside and can be used to 
get references or range names. Instead of [C2] use .Cells(2,3) 
CutCopyMode 
The definition is Public Enum XlCutCopyMode As Integer so the old code 
Application.CutCopyMode = False should now be Application.CutCopyMode = 0 
Initialising variables 
There were lots of compiler warnings " Warning 5 Variable 'xx' is used before it has 
been assigned a value. A null reference exception could result at runtime."  The 
solution is to initialize it eg Dim str as String=vbnullstring 
Ensure a function return is defined for paths not taken, rather than relying on the 
default value for an uninitialized function variable. 
On Error Resume Next 
This practice is known to be error-prone because it ignores all errors after that line, 
including ones you did not expect, until reset. It should only be used in one-line 
functions that are intended to wrap an expected error, eg 
' does a sheet of any type exist with this name? 
Function SheetExists(ByVal wb As WorkbookByVal sName As StringAs Boolean    
Dim oSheet As Object 
On Error Resume Next 
oSheet = wb.Sheets(sName) 
Return Err.Number = 0 
End Function 
Don’t use default property of Err, that would get t ranslated to Err(), specify 
Err.Number. For a better approach see 
http://msdn.microsoft.com/en-us/library/ms973849.aspx 
Error Handling in Visual Basic .NET 
Connection objects 
The old .Connection object in Excel pre-2007 has now been replaced by two specific 
connections: WorkbookConnection and ODBCConnection. The connection string is 
obtained by either 
oConn.ODBCConnection.Connection.ToString 
oConn.OLEDBConnection.Connection.ToString 
For web queries, get the connection from the Querytable in the Ranges (if any): 
oConn.Ranges.Item(1).QueryTable.Connection 
Shell & Unzip 
Add a reference to Windows\System32\Shell32.dll and use this code 
Dim oShell As Shell32.Shell 
oShell = New Shell32.Shell ' CreateObject("Shell.Application") 
oShell.NameSpace((sFolder)).CopyHere oShell.NameSpace((sZipName)), 16 
'16=Respond with "Yes to All"  
Accessing the Windows API 
In VBA:  
C# Create PDF from Text to convert txt files to PDF in C#.net, ASP
NET control for batch converting text formats to editable & searchable PDF document. All text message can be copied and pasted to PDF file by keeping
make pdf text searchable; search text in pdf using java
VB.NET PDF Convert to Word SDK: Convert PDF to Word library in vb.
Word documents from both scanned PDF and searchable PDF files without to export Word from multiple PDF files in Create editable Word file online without email.
search pdf for text; pdf text searchable
Public Declare Function GetTickCount Lib "kernel32" () As Long 
In ExcelDna: 
<System.Runtime.InteropServices.DllImport("kernel32")> _ 
Public Function GetTickCount() As Long 
End Function 
Or, use the equivalent DotNet function 
Function GetTickCount() as Long 
GetTickCount=Environment.TickCount 
End Function 
The following changes are specific to DotNet 
String$() function 
Use StrDup(number,character) 
Format$() 
Format$(0.5, "###%") works, "50%" 
Format$(1234.5, "###,##0.00") also, "1,234.50" 
Format$(Now, "yyyy-mm-dd hh:mm:ss ") 
But for time intervals, where in VBA you would use 
Format$(Now() - tStart, "nn:ss") 
In VB.Net  you have to use .ToString 
tStart = Now() …… 
(Now - tStart).ToString("hh\:mm\:ss") 
To convert a time interval to seconds, use CLng((Now - tStart).TotalSeconds) 
Class definitions 
The VBA Get and Let methods are replaced by Get/Set clauses in the properties.  
Public Property Item(ByVal Key As String) As Object 
Get 
Return KeyValuePairs.Item(Key).value 
End Get 
' update a scalar value for an existing key 
Set(ByVal value As Object) 
KeyValuePairs.Item(Key).value = value 
End Set 
End Property 
For more examples, see the GlobalHelper class below. 
Dictionary Class 
The Scripting.Dictionary object can be replaced by a .Net Dictionary, using the syntax 
dicWords = New Dictionary(Of StringWordCountItem
and .Exists becomes .ContainsKey. 
VBA:  
For Each aWordCount In dicWords.Items 
Vb.net: 
For Each pair In dicWords 
aWordCount = pair.Value 
C# Create PDF from Tiff Library to convert tif images to PDF in C#
Support to combine multiple page tiffs into one PDF file. Support SharePoint. Selection of turning tiff into searchable PDF or scanned PDF.
text searchable pdf; pdf find text
C# PDF Convert to Text SDK: Convert PDF to txt files in C#.net
PDF document conversion SDK provides reliable and effective .NET solution for Visual C# developers to convert PDF document to editable & searchable text file.
how to select text in pdf image; search multiple pdf files for text
AutoFilter 
Similarly.Autofilter must be fully specified: 
ActiveSheet.UsedRange.AutoFilter(field:=1, criteria1:=sCriterion, 
_operator:=XlAutoFilterOperator.xlAnd, criteria2:=Nothing, 
visibleDropDown:=True
Named Parameters 
Error 9 (Invalid index. (Exception from HRESULT: 0x8002000B 
(DISP_E_BADINDEX))) 
That error could be caused by supplying a value of Nothing for a parameter that needs 
to have a specific value. For example, in the Range.Replace method, the SearchOrder 
needs to be xlRows or xlColumns. 
Workbook_Open  
This is how you implemented a workbook_open handler: 
Imports ExcelDna.Integration      
' needed for IExcelAddIn 
Imports ExcelDna.Integration.ExcelDnaUtil   ' for Application object 
Class AutoOpen 
Implements IExcelAddIn 
Public Sub Start() Implements IExcelAddIn.AutoOpen 
Application.Statusbar = "Starting . . ." 
End Sub 
Public Sub Close() Implements IExcelAddIn.AutoClose 
'Fires when addin is removed from the addins list but not when Excel closes 
'This is to avoid issues caused by the Excel option  
'to cancel out of the close after the event has fired.  
' whatever you want here 
End Sub 
End Class 
Workbooks.Open() error 
error BC30469: Reference to a non-shared member requires an object reference. 
This means that you need to qualify 'Workbooks'.  Here are two ways: 
1)  ExcelDnaUtil.Application.Workbooks.Open(). This specifies the Workbooks 
collection completely. 
2)  Define a global Application object which you initialise in AutoOpen, and a global 
Workbooks property (see the GlobalHelpers.vb file) and then you can use simply 
Workbooks.Open same as in VBA. 
Document Properties 
Cast the workbook properties to Office Document properties like this: 
Imports Microsoft.Office.Core 
Dim cdp As DocumentProperties 
cdp = CType(wb.CustomDocumentProperties, DocumentProperties) 
Getting an Object's Property by Name 
As well as CallByName you have Invoker.PropertyGet(workBook, "FileFormat") 
VB.NET Create PDF Library SDK to convert PDF from other file
searchable PDF document. Gratis control for creating PDF from multiple image formats such as tiff, jpg, png, gif, bmp, etc. Create writable PDF file from text (
how to select text in pdf and copy; find text in pdf image
C# HTML5 Viewer: Load, View, Convert, Annotate and Edit Word
Convert Microsoft Office Word to searchable PDF online, create and export Word document to HTML (.htm, .html) file. to Word, such as add text annotations to
how to select text on pdf; find text in pdf files
Mixed .Font.Color returns DBNull 
When there is more than one font colour in a cell, VBA returns 0, VB.Net returns 
DBNull, which can cause an error comparing DBNull with a number. 
Decimal cell value type  
In VBA the possible return values for VarType(cell.value) are 5,6,7,8,10,11. VB.Net 
adds type 14 (vbDecimal) which is what the Currency type (6) is returned as. 
Controls 
Dim ctl as Control  requires Imports System.Windows.Forms and a reference to it. 
Names index by Name 
To get a Name from the string name of the Name, use the .Item method 
wb.Names.Item(strName)
That works in VBA too. 
http://msdn.microsoft.com/en-
us/library/office/microsoft.office.interop.excel.names.aspx
says "Use Names(index), where index is the name index number or defined name, to 
return a single Name object."  However, it throws an error if you pass a string name. 
The index number is 0-based. To get by name, use the Item method: 
Function Item(Optional ByVal Index As Object = Nothing, Optional ByVal 
IndexLocal As Object = Nothing, Optional ByVal RefersTo As Object = Nothing) As 
Microsoft.Office.Interop.Excel.Name 
http://msdn.microsoft.com/en-
us/library/microsoft.office.interop.excel.names.item(office.14).aspx  
Parameters 
Index 
Optional Object. The name or number of the defined name to be returned. 
IndexLocal 
Optional Object. The name of the defined name in the language of the user. No 
names will be translated if you use this argument. 
RefersTo 
Optional Object. What the name refers to. You use this argument to identify a name 
by what it refers to. 
You must specify one, and only one, of these three arguments. 
VBComponents index by Name 
To get a Name from the string name of the Name, use the .Item method 
wb.VBProject.VBComponents.Item(strName) 
That works in VBA too. 
Shapes index by Name 
To get a Shape from the string name of the Shape, use the .Item method 
ws.Shapes.Item(strName)
That works in VBA too. 
VB.NET Create PDF from Tiff Library to convert tif images to PDF
VB.NET read PDF, VB.NET convert PDF to text, VB.NET Turning tiff into searchable PDF or scanned PDF. inputFilePath) ' Convert loaded TIFF file to PDF document.
how to select all text in pdf; pdf find and replace text
XImage.OCR for .NET, Recognize Text from Images and Documents
Output OCR result to memory, text searchable PDF, Word, Text file, etc. Next Steps. Download Free Trial Download and try OCR for .NET with online support.
how to search pdf files for text; how to select text in a pdf
Replace DataObject by Clipboard Class 
VB.Net has a Clipboard object with .GetText and .SetText methods which replace the 
VBA Dataobject. 
SendKeys 
Use System.Windows.Forms.SendKeys.Send("{TAB 3}") 
#Error values, CVErr(), IsError() 
This seems to have become a mess in .Net. Excel-Dna has one set of coding to handle 
ExcelDna.Integration.ExcelError values passed into, or returned from, UDFs: 
http://groups.google.com/group/Excel-Dna/browse_thread/thread/31e62ad3e2e218b3 
But there are different codes when accessing cell error values in code: 
http://xldennis.wordpress.com/2006/11/29/dealing-with-cverr-values-in-net-part-ii-
solutions/ 
The CVErr function is gone, the link above has an article by Mike Rosenblum which 
provides alternatives. The IsError function in VB.Net is nothing to do with the VBA 
IsError, so again a workaround is needed. In VBA accessing a cell value with an error 
display of ###### could cause an overflow error 6 in VBA, eg a negative date; this 
does not happen in VB.Net, it returns the date before 1900, or a Double. I will try the 
workaround 
StrDup(Len(cell.Text), "#") = cell.Text
Restore Excel Status 
Place the main code in a Try/Catch that resets event handling, screen updating, etc. 
Unable to get the Paste property of the Worksheet class 
This may be caused by a second instance of Excel running. 
Debugging strategies 
In VBA Debug.Print is a command that can take multiple arguments with comma and 
semi-colon separators. In VB.Net Debug.Print(str) takes only one string argument 
which must be enclosed in parentheses. An alternative is Debug.Write(str) and 
Debug.WriteLine(str) 
Resume or GoTo labels cannot be within a With statement: " Error 69 'GoTo Retry' is 
not valid because 'Retry' is inside a 'With' statement that does not contain this 
statement." 
With the use of On Error there will be many occurrences of 'first chance' errors, ie 
those which are trapped by the On Error statement, eg 
A first chance exception of type 'System.Runtime.InteropServices.COMException' 
Therefore there is no need to worry about 'first chance' exceptions. 
You can catch other ones (eg InvalidCastException, NullReferenceException) which 
should be preventable by enabling debugging on these exceptions but turning off the 
COMException. In VS2010, click Debug > Exceptions, check 'Thrown' for Common 
Language Runtime Exceptions, (User-unhandled should be checked too), expand the 
tree and Uncheck 'System.Runtime.InteropServices.COMException' 
See the example GlobalHelper to illustrate the use of the DebugConsole class. 
VS2010 has support for breakpoints etc. If you stop debugging (Ctrl+Alt+Break) the 
Excel instance will be closed and the next time it is restarted it will warn: 
Excel experienced a serious problem with the 'test2 (ribbon helper)' add-in. If you 
have seen this message multiple times, you should disable this add-in and check to see 
if an update is available. Do you want to disable this add-in? 
Be sure to click No, otherwise the Ribbon handler will be disabled in all Excel-Dna 
add-ins from that point on. 
In VS Express you include this in the .vbproj file so F5 will launch the debugger: 
<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
<StartAction>Program</StartAction> 
<StartProgram>C:\Program Files\Microsoft Office\Office14\EXCEL.EXE</StartProgram> 
<StartArguments>MY_ADDIN_GOES_HERE.XLL</StartArguments> 
</PropertyGroup> 
<PropertyGroup> 
<ProjectView>ShowAllFiles</ProjectView> 
</PropertyGroup> 
</Project> 
XML Documents 
In VBA you could use oXDoc.SelectSingleNode("//book") but in .Net you need to 
specify the namespace: 
oXDoc = New Xml.XmlDocument 
oXDoc.Load(sXMLFileName) 
Dim root As XmlElement = oXDoc.DocumentElement 
Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(oXDoc.NameTable) 
nsmgr.AddNamespace("x", root.NamespaceURI) ' x is our temp alias 
sNode = "//x:books" ' XPath 
oXSectionNode = oXDoc.SelectSingleNode(sNode, nsmgr) 
sNode = "//x:books" 
oXSectionNodes = oXDoc.SelectNodes(sNode, nsmgr)  
'or could do oXDoc.GetElementsByTagName("books") 
UserForms 
These had to be redrawn from scratch, there does not seem to be a way to import 
them. In one case I renamed a form and started getting an error  
The class frmOptions can be designed, but is not the first class in the file. 
I could not fix that so simply deleted and re-created the form again. 
In VBA the forms can be referred to by name, eg frmOptions. In VB.Net they have to 
be instantiated, otherwise you get an error 
Reference to a non-shared member requires an object reference 
http://msdn.microsoft.com/en-us/library/zwwhc0d0(v=vs.80).aspx 
says: Avoid adding the Shared keyword  
My solution is to name the Class FormCount, instance is Dim frmCount as 
FormCount, so the same variable name frmCount can be used in the code. 
The controls have different properties and methods from VBA.  
In VBA I could add listbox or combobox items by .List = array, in vb.net it is 
frmOptions.cboClass.Items.AddRange(ary) 
The VB.Net ListBox is limited to ONE column of strings, no MultiColumn property. 
I could use a ListView but that's more complex than I want. So I created a sub to load 
the items from a range, concatenating the two columns into one string. On the code 
that used the listbox I then had to parse the item back into its elements, so there is no 
escaping some added complexity. 
VBA .Value of a listbox becomes .SelectedValue 
The click event of a listbox is 
lbxWords_SelectedIndexChanged 
VBA .Value of a checkbox becomes .Checked. 
VBA .Caption of a control becomes .Text. 
VBA has a .ShowModal property; in vb.net use either the .Show method for non-
modal or .ShowDialog for modal. 
The events have to have a “handles” clause added to  the declaration: 
Private Sub cmdOK_Click(ByVal sender As System.ObjectByVal e As 
System.EventArgsHandles cmdOK.Click 
The parameters can be omitted for simplicity: 
Private Sub cmdOK_Click() Handles cmdOK.Click 
In VBA you can access the .Designer property to get lists of controls, that does not 
seem to be available in .Net. 
Troubleshooting Ribbon Interface complications 
The following reference document shows both the VBA and the VB.NET (they call it 
Visual Basic) signatures for all the callbacks: 
http://msdn.microsoft.com/en-us/library/aa722523(v=office.12).aspx 
Customizing the 2007 Office Fluent Ribbon for Developers (Part 3 of 3) 
The ribbon XML is stored in the ProjectName.dna file. For some reason to do with 
the Ribbon context, it can only see procedures in the Ribbon handling class. If you 
give it any other sub to call, it will not find it. The only ways to connect them are 
either: 
a)  A button onAction with the special value of "RunTagMacro" which is an Excel-Dna 
procedure that calls Application.Run(Tag). 
onAction="RunTagMacro" tag="MySub"
It does not pass any parameter to the macro. Be aware that if the tag name already 
exists in any other VBA addin loaded before the Excel-Dna XLL addin, that sub will 
be run instead. You have to be sure that the Tag is unique. 
b)  Or, a button has an onAction with a sub name that is present in the Ribbon handler 
class. This is the only way of passing the control to the sub which can then examine 
the ID and Tag if desired. 
Here is some code that illustrates both of those: 
<DnaLibrary Name="TasksAnalyzer Add-in" RuntimeVersion="v4.0"> 
<ExternalLibrary Path="TasksAnalyzer.dll" /> 
<CustomUI> 
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
<ribbon startFromScratch="false"> 
<tabs> 
<tab id="Tab_CCTWAVB" label="Tasks Analyzer" keytip="Q" insertAfterMso="TabAddIns"> 
<group id="CCTWAVBgroup" label="Task Analyzer (VB)"> 
<button id="CCTWAVBButton1" onAction="RunTagMacro" tag="TA_CountInSelection"  
label="Analyze Task" screentip="Analyze Tasks Frequency "  
size="normal" imageMso="WordCountList" /> 
<button id="CCTWAVBButton2" onAction="CCTWAVBButton2" tag="TA_ShowFrmCount"  
label="Filter Form" screentip="Show Form to filter analyzed data" size="normal"  
imageMso="FilterAdvancedByForm" /> 
</group> 
</tab> 
</tabs> 
</ribbon> 
</customUI> 
</CustomUI> 
</DnaLibrary> 
The Ribbon class is 
Imports ExcelDna.Integration.CustomUI   ' needed for IRibbonControl 
Imports ExcelDna.Integration.ExcelDnaUtil   ' for Application object 
Imports System.Runtime.InteropServices  ' needed for <ComVisible(True)>  
<ComVisible(True)> 
Public Class Ribbon 
' implement ExcelDna.Integration.CustomUI.ExcelRibbon to get full Ribbon access. 
Inherits ExcelRibbon 
' Regular Macros can be called from the Ribbon using the onAction='RunTagMacro' helper, 
' which calls a macro named in the tag attribute of a button. 
' Under the covers, RunTagMacro just calls ExcelDnaUtil.Application.Run(tagName).  
'the onAction="MyMacro" attribute will only run methods on the ExcelRibbon-derived class.  
'http://groups.google.com/group/Excel-Dna/browse_thread/thread/60b7fac567c17505 
'IDs have to be unique, can’t use same ID for something like "RunIDMacro" more than once. 
Documents you may be interested
Documents you may be interested