Trying to set up mailing button VB - mailing

I have an Email button but I cant get it to work it is doing notng and i don really know why.
`Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles tbsEmailRenewal.Click
On Error GoTo Err_cmdEMailInvoice_Click
If tbsEmailRenewal.Tag = "" Then Exit Sub
' Create Report
Dim ListReport = New FastReport.Report
ListReport.Load(My.Settings.SystemPath & "\Reports\EmailRenewalLetter.frx")
ListReport.SetParameterValue("CRMConnectionString", "Data Source=" & My.Settings.SQLServer & ";AttachDbFilename=;Initial Catalog=ICOM.Database;Integrated Security=False;Persist Security Info=False;User ID=CRMUser;Password=S0rtmypc!")
ListReport.SetParameterValue("MemberID", objMember.MemberID)
ListReport.Prepare()
' Create Export File
Dim PDFExport As FastReport.Export.Pdf.PDFExport = New FastReport.Export.Pdf.PDFExport
ListReport.Export(PDFExport, My.Settings.SystemPath & "Reports\EMailReport" & Format(objMember.MemberID, "00000") & ".pdf")
' Create EMail
Dim objOutlook As Object
Dim objMailMessage As Outlook.MailItem
objOutlook = CreateObject("Outlook.Application")
objMailMessage = objOutlook.CreateItem(0)
With objMailMessage
.To = txtEmailAddess1.Text
.Subject = "Renewal For " & lblMemberIDValue.Text
.Attachments.Add(My.Settings.SystemPath & "Reports\EMailReport" & Format(objMember.MemberID, "00000") & ".pdf")
.Display()
.Save()
.Close(Outlook.OlInspectorClose.olDiscard)
End With
objMailMessage = Nothing
objOutlook = Nothing
' Log It
Dim sMessage As String
sMessage = Replace(">" & Format(objMember.MemberID, "00000") & " to " & tbsEmailRenewal.Tag, "'", "`")
WriteAuditLogRecord(Me.Name, "tbsEmailRenewal.Click", "INFO", sMessage)
MsgBox("Email has been saved as a Draft", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "ICOM - Action Confirmed")
Err_cmdEMailInvoice_Click:
If Err.Number <> 0 Then
sErrDescription = Err.Description
WriteAuditLogRecord(Me.Name, "cmdEMailInvoice_Click", "Error", sErrDescription)
MsgBox("System Error occurred" & Chr(13) & "tbsEmailRenewal.Click" & Chr(13) & sErrDescription, MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "AztecCRM - Error Reporting")
End If
End Sub`

Are you sure that tbsEmailRenewal.Tag is not empty?
If tbsEmailRenewal.Tag = "" Then Exit Sub

Related

How to Restrict data input to a specific cell

I'm creating a database in ms-access 2016, I want to set a field to email address that only accepts institutional e-mail address excluding such as Gmail, yahoo, Hotmail...etc, if user has entered such an e-mail address as above then the warning or error message be showed to enter correct value.
How can I do it?
You can use the function below in the BeforeUpdate event of the textbox:
Cancel = Not IsMailAddress(Nz(Me!YourTextbox.Value))
If Cancel = True Then
MessageBox "Please enter a valid e-mail address."
End If
and the function:
Public Function IsEmailAddress( _
ByVal strEmailAddresses As String) _
As Boolean
' Checks if strEMailAddr could represent one or more valid e-mail addresses.
' Does not check validity of domain names.
'
' 2003-06-22. Cactus Data ApS, CPH
' 2018-12-01. Expanded to allow for and validate multiple addresses.
' Allowed characters.
Const cstrValidChars As String = "#_-.0123456789abcdefghijklmnopqrstuvwxyz"
Const cstrDot As String = "."
Const cstrAt As String = "#"
' Minimum length of an e-mail address (a#a.ca).
Const cintAddressLenMin As Integer = 6
' Address separator.
Const cstrSeparator As String = ";"
Dim avarAddresses As Variant
Dim Index As Integer
Dim strEmailAddr As String
Dim strValidChars As String
Dim booFailed As Boolean
Dim intPos As Integer
Dim intI As Integer
avarAddresses = Split(strEmailAddresses, cstrSeparator)
For Index = LBound(avarAddresses) To UBound(avarAddresses)
strEmailAddr = avarAddresses(Index)
' Strip a display name.
CleanEmailAddress strEmailAddr
' Convert to lowercase.
strEmailAddr = LCase(strEmailAddr)
' Check that strEMailAddr contains allowed characters only.
For intI = 1 To Len(strEmailAddr)
If InStr(cstrValidChars, Mid(strEmailAddr, intI, 1)) = 0 Then
booFailed = True
End If
Next
If booFailed = False Then
' Check that the first character is not cstrAt.
booFailed = Left(strEmailAddr, 1) = cstrAt
If booFailed = False Then
' Check that the first character is not a cstrDot.
booFailed = Left(strEmailAddr, 1) = cstrDot
If booFailed = False Then
' Check that length of strEMailAddr exceeds
' minimum length of an e-mail address.
intPos = Len(strEmailAddr)
booFailed = (intPos < cintAddressLenMin)
If booFailed = False Then
' Check that none of the last two characters of strEMailAddr is a dot.
booFailed = (InStr(intPos - 1, strEmailAddr, cstrDot) > 0)
If booFailed = False Then
' Check that strEMailAddr does contain a cstrAt.
intPos = InStr(strEmailAddr, cstrAt)
booFailed = (intPos = 0)
If booFailed = False Then
' Check that strEMailAddr does contain one cstrAt only.
booFailed = (InStr(intPos + 1, strEmailAddr, cstrAt) > 0)
If booFailed = False Then
' Check that the character leading cstrAt is not cstrDot.
booFailed = (Mid(strEmailAddr, intPos - 1, 1) = cstrDot)
If booFailed = False Then
' Check that the character following cstrAt is not cstrDot.
booFailed = (Mid(strEmailAddr, intPos + 1, 1) = cstrDot)
If booFailed = False Then
' Check that strEMailAddr contains at least one cstrDot
' following the sign after cstrAt.
booFailed = Not (InStr(intPos, strEmailAddr, cstrDot) > 1)
End If
End If
End If
End If
End If
End If
End If
End If
End If
If booFailed = True Then
Exit For
End If
Next
IsEmailAddress = Not booFailed
End Function

XAF web column grouping

if anyone has work with eXpressApp Framework (XAF)
I'm trying to group the listView by either one or two columns in the collection, Web module without luck, thanks in advance
Private Sub SCA_ViewBy_Execute(sender As Object, e As SingleChoiceActionExecuteEventArgs) Handles SCA_ViewBy.Execute
If SCA_ViewBy.SelectedIndex = 0 Then
Dim listEditor As GridListEditor = TryCast((CType(View, ListView)).Editor, GridListEditor)
If listEditor IsNot Nothing Then
Dim gridView As GridView = listEditor.GridView
gridView.BeginSort()
Try
gridView.ClearGrouping()
gridView.Columns("Division").GroupIndex = 0
gridView.Columns("SubDivision").GroupIndex = -1
Finally
gridView.EndSort()
End Try
End If
ElseIf SCA_ViewBy.SelectedIndex = 1 Then
Dim listEditor As GridListEditor = TryCast((CType(View, ListView)).Editor, GridListEditor)
If listEditor IsNot Nothing Then
Dim gridView As GridView = listEditor.GridView
gridView.BeginSort()
Try
gridView.ClearGrouping()
gridView.Columns("Division").GroupIndex = 0
gridView.Columns("SubDivision").GroupIndex = 1
Finally
gridView.EndSort()
End Try
End If
End If
End Sub
Thanks, I found a solution that works
Private Sub SCA_ViewBy_Execute(sender As Object, e As SingleChoiceActionExecuteEventArgs) Handles SCA_ViewBy.Execute
If SCA_ViewBy.SelectedIndex = 0 Then
' Dim listEditor As GridListEditor = TryCast((CType(View, ListView)).Editor, GridListEditor)
' If listEditor IsNot Nothing Then
' Dim gridView As GridView = listEditor.GridView
' gridView.BeginSort()
' Try
' gridView.ClearGrouping()
' gridView.Columns("Division").GroupIndex = 0
' gridView.Columns("SubDivision").GroupIndex = -1
' Finally
' gridView.EndSort()
' End Try
' End If
Dim listEditor1 As ASPxGridListEditor = TryCast((CType(View, ListView)).Editor, ASPxGridListEditor)
If listEditor1 IsNot Nothing Then
Dim gridView As ASPxGridView = CType(listEditor1.Grid, ASPxGridView)
gridView.ClientInstanceName = View.Id
Dim divisionColumns As GridViewDataColumn = TryCast(gridView.Columns("Division"), GridViewDataColumn)
'Dim subdivisionColumns As GridViewDataColumn = TryCast(gridView.Columns("SubDivision"), GridViewDataColumn)
If divisionColumns IsNot Nothing Then
'detailsColumns.DataItemTemplate = New UpDownButtonsTemplate()
gridView.ClearSort()
gridView.SortBy(divisionColumns, DevExpress.Data.ColumnSortOrder.Ascending)
gridView.GroupBy(divisionColumns, 0)
gridView.ExpandAll()
End If
End If
ElseIf SCA_ViewBy.SelectedIndex = 1 Then
Dim listEditor1 As ASPxGridListEditor = TryCast((CType(View, ListView)).Editor, ASPxGridListEditor)
If listEditor1 IsNot Nothing Then
Dim gridView As ASPxGridView = CType(listEditor1.Grid, ASPxGridView)
gridView.ClientInstanceName = View.Id
Dim divisionColumns As GridViewDataColumn = TryCast(gridView.Columns("Division"), GridViewDataColumn)
Dim subdivisionColumns As GridViewDataColumn = TryCast(gridView.Columns("SubDivision"), GridViewDataColumn)
If divisionColumns IsNot Nothing Then
'detailsColumns.DataItemTemplate = New UpDownButtonsTemplate()
gridView.ClearSort()
gridView.SortBy(divisionColumns, DevExpress.Data.ColumnSortOrder.Ascending)
gridView.GroupBy(divisionColumns, 0)
gridView.GroupBy(subdivisionColumns, 1)
gridView.ExpandAll()
End If
End If
Else
End If
End Sub

Run time error 438: (wks.cells(i, 1))

I am attempting to paste information from a spreadsheet to a form in my Access database but I get an error at the Do Until IsEmpty(wks.Cells(i, 1)) line. I am using Access 2010.
Option Compare Database
Private Sub Cmd_Mass_Upload_Click()
If MsgBox("ARE YOU SURE YOU WANT TO UPDATE RECORDS?", vbOKCancel, "CONFIRM MASS UPDATE") = vbOK Then
Dim wks
Dim db As Database
Dim rsCheckDuplicate As Recordset
Dim rsUpdateCC As Recordset
Dim strSQLCheckDuplicate As String
Dim strUpdateCC As String
Dim succesfullyUpdated As Integer
succesfullyUpdated = 0
i = 1
'If Me.Ctl2003 = True Then
Set wks = Me.upLoadSpreadsheet2010
'End If
'If Me.Ctl2010 = True Then
' Set wks = Me.upLoadSpreadsheet2010
'End If
Do Until IsEmpty(wks.Cells(i, 1))
i = i + 1
Loop
Set db = CurrentDb
If i > 1 Then
For j = 1 To i - 1
strSQLCheckDuplicate = "SELECT TBL_OPEN_VOUCHERS.[VOUCHER NUMBER], TBL_OPEN_VOUCHERS.[INVOICE NUMBER] " & _
"FROM TBL_OPEN_VOUCHERS " & _
"WHERE (((TBL_OPEN_VOUCHERS.[VOUCHER NUMBER])='" & wks.Cells(j, 1) & "') AND ((TBL_OPEN_VOUCHERS.[INVOICE NUMBER])='" & wks.Cells(j, 2) & "'));"
'"WHERE (((TBL_OPEN_VOUCHERS.[VOUCHER NUMBER])='" & wks.Cells(j, 1) & "'));"
Set rsCheckDuplicate = db.OpenRecordset(strSQLCheckDuplicate)
If rsCheckDuplicate.EOF Then
MsgBox "Voucher number " & wks.Cells(j, 1) & " not available in local system!"
Else
rsCheckDuplicate.MoveLast
rsCheckDuplicate.MoveFirst
If rsCheckDuplicate.RecordCount > 1 Then
MsgBox "Voucher number " & wks.Cells(j, 1) & " has multiple entries in local system! Please update manually!"
End If
If Len(wks.Cells(j, 3)) = 6 Then
strUpdateCC = "UPDATE TBL_OPEN_VOUCHERS SET TBL_OPEN_VOUCHERS.[CHARGE TO] = '" & wks.Cells(j, 3) & "', TBL_OPEN_VOUCHERS.COMMENTS_NOTES = '" & Form_FRM_MAIN.USER.Caption & ": PART OF MASS UPLOAD ON " & Now() & "' " & _
"WHERE (((TBL_OPEN_VOUCHERS.[VOUCHER NUMBER])='" & wks.Cells(j, 1) & "') AND ((TBL_OPEN_VOUCHERS.[INVOICE NUMBER])='" & wks.Cells(j, 2) & "'));"
'"WHERE (((TBL_OPEN_VOUCHERS.[VOUCHER NUMBER])='" & wks.Cells(j, 1) & "'));"
DoCmd.RunSQL strUpdateCC
succesfullyUpdated = succesfullyUpdated + 1
Else
MsgBox "Please check Cost Center"
End If
End If
Next
End If
Set wks = Nothing
MsgBox "Successfully uploaded " & succesfullyUpdated & " of " & i - 1 & " records!"
End If
End Sub
Private Sub Command7_Click()
On Error GoTo Err_Command7_Click
DoCmd.Close
Exit_Command7_Click:
Exit Sub
Err_Command7_Click:
MsgBox Err.Description
Resume Exit_Command7_Click
End Sub
Private Sub Ctl2003_Click()
If Me.Ctl2003 = False Then Me.Ctl2010 = True
If Me.Ctl2003 = True Then Me.Ctl2010 = False
End Sub
Private Sub Ctl2010_Click()
If Me.Ctl2010 = True Then Me.Ctl2003 = False
If Me.Ctl2010 = False Then Me.Ctl2003 = True
End Sub
What was the actual error message you were getting?
Have you tried creating a connection to the spreadsheet as a linked table, then treating the spreadsheet as a table?
Your code doesn't specify the datatype of the "wks" object, so the code doesn't know it is a spreadsheet.
Here's the approach I'd use:
Link the spreadsheet as a linked table (External Data, Import Excel Spreadsheet, Link to the DataSource.) This will create a "table" in access which is linked to a spreadsheet that is in a nominated location.
Use a query to identify records that are in your linked table but not in your local table (select s.* from upLoadSpreadsheet2010 s left outer join tbl_open_vouchers v on s.somekeycolumnidontknowthenameof = v.[voucher number] and s.someotherkeycolumn = v.[Invoice Number] where v.[voucher number] is null)
Open the query in your code, iterate through it, and do you thing, or better still create an Append query to do the job for you without any code at all.
The only challenge then is ensure the excel spreadsheet is in the right place at the right time. New spreadsheet? Just put it in the same place as the last spreadsheet and run the process again.

Parsing EMail with VB6 - not splitting properly

When I parse through an email that looks like:
included_po~301993959 'VBCRLF
po_no~vendor~part_no~class~type_code~buyer~qty_ordered~measure~balance_on_order~cost~amt_ordered~order_date~delivery_date~ship_Date~receive_date~open~wo_no 'VBCRLF
301993959~100000~88008K~PROBE 800~F~VAX~4.0 ~EA~4.0~100.3300~401.32000~011513~012313~012313~000000~Y~STOCK 'VBCRLF
301993959~100000~TFCI-010-50~WIRE SPTEF~F~VAX~1.0~SP~1.0~12.6400~12.64000~011513~012313~012313~000000~Y~STOCK 'VBCRLF
301993959~100000~TFIR-010-50~WIRE SPTEF~F~VAX~1.0~SP~1.0~12.6400~12.64000~011513~012313~012313~000000~Y~STOCK 'VBCRLF
using code:
Public Sub AddItems()
Dim aLineItem() As String
Dim aItem() As String
Dim i As Integer
Dim j As Integer
Dim iCnt As Double
Dim msg
Dim Item As Items
ReDim sWo(0)
iCnt = 0
For i = 1 To UBound(sMsg())
aLineItem = Split(sMsg(i), vbCrLf)
For j = 1 To UBound(aLineItem)
If aLineItem(j) <> "" Then
If blah = 1 Then
Debug.Print ("...." & aLineItem(j))
End If
aItem = Split(aLineItem(j), "~")
If (aItem(0) <> "") And (aItem(0) <> "included_po") And (aItem(0) <> "po_no") Then
Item.PO_num = GetWo(aItem(1))
If Item.PO_num <> "0" Then
Item.Company = aItem(1)
Item.Delivery_date = aItem(12)
Item.pn = aItem(2)
Item.QTY_ordered = aItem(6)
Item.Unit_Price = aItem(9)
End If 'If Item.PO_num <> "0" Then
End If 'If aItem(1) <> "" Then
End If ' If aLineItem(j) <> "" Then
Next j
Next i
End Sub
The email parsing looks like this:
....301993959~100000~88008K~PROBE
....8800~F~VAX~4.0~EA~4.0~100.3300~401.32000~011513~012313~012313~000000~Y~S
....TOCK
Is there a better way to parse this email?
EDIT #1:
Public Sub GetMailMsg()
Dim pop3 As jmail.pop3
Dim iCount As Integer
Dim i As Integer
Dim mailID As Integer
Dim j As Integer
Dim sSubject As String
j = 0
ReDim sMsg(0)
'connect to the mail box
Set pop3 = New pop3
pop3.Connect "REMOVED FOR SECURITY"
'Get message count
iCount = pop3.Count
'Read Messages
For i = 1 To iCount
sSubject = pop3.Messages.Item(i).Subject
Label1.Caption = "Reading message.." & sSubject
DoEvents
If InStr(sSubject, "China Purchase Orders") <> 0 Then 'email test
j = j + 1
ReDim Preserve sMsg(j)
sMsg(j) = pop3.Messages.Item(i).Body
Label1.Caption = "Reading mail message for order " & sSubject
If blah = 1 Then
Debug.Print ("Reading mail message for order " & sSubject)
Debug.Print ("Reading mail message for order " & sMsg(j))
End If
End If
Next
pop3.Disconnect
Set pop3 = Nothing
End SUb
--EDIT #2
OUTPUT FROM DEBUG:
Reading mail message for order China Purchase Orders
Reading mail message for order
included_po~301993959
po_no~vendor~part_no~class~type_code~buyer~qty_ordered~measure~balance_o 'VBCRLF
n_order~cost~amt_ordered~order_date~delivery_date~ship_Date~receive_date 'VBCRLF
~open~wo_no 'VBCRLF
301993959~100000~88008K~PROBE 'VBCRLF
8800~F~VAX~4.0~EA~4.0~100.3300~401.32000~011513~012313~012313~000000~Y~S 'VBCRLF
TOCK 'VBCRLF
301993959~100000~TFCI-010-50~WIRE 'VBCRLF
SPTEF~F~VAX~1.0~SP~1.0~12.6400~12.64000~011513~012313~012313~000000~Y~ST 'VBCRLF
OCK 'VBCRLF
301993959~100000~TFIR-010-50~WIRE 'VBCRLF
SPTEF~F~VAX~1.0~SP~1.0~12.6400~12.64000~011513~012313~012313~000000~Y~ST 'VBCRLF
OCK 'VBCRLF
Your lines aren't breaking up properly makes me think there is a problem in the line aLineItem = Split(sMsg(i), vbCrLf). Please check whether you don't have any vbCrLF in the line you aren't getting right.
Is that line one continuous line?
Edit #1 # Jan 16, 2013 1:16pm EST:
I created a file and pasted provided input.
I created a simple program and incorporated your code into it. Please see produced DEBUG below, consisting as expected with 3 lines beginning with 301993959 and ending with STOCK. This is the correct and desirable output, right?
....301993959~100000~TFCI-010-50~WIRE SPTEF~F~VAX~1.0~SP~1.0~12.6400~12.64000~011513~012313~012313~000000~Y~STOCK
....301993959~100000~TFIR-010-50~WIRE SPTEF~F~VAX~1.0~SP~1.0~12.6400~12.64000~011513~012313~012313~000000~Y~STOCK
....301993959~100000~88008K~PROBE 800~F~VAX~4.0 ~EA~4.0~100.3300~401.32000~011513~012313~012313~000000~Y~STOCK
So the code you provided is working fine. If you say the input file is fine too, that means the issue is with how you are reading that email, specifically how you populate sMsg(). Can you post that code please?
Edit #2 # Jan 16, 2013 2:32pm EST:
You are getting some unwanted vbCrLfs in your single record line and you can't split it the way you want. Here is what I suggest you do:
1) If you can modify GetMailMsg to instead of loading Body as it is, go through line by line to avoid generating unwanted vbCrLfs. I have zero experience with pop objects so I don't know if that is possible.
2) If the number of unwanted cbCrLfs is consistent, ex: 2 in a single record, then you can simply adjust your code to concatenate split records like this
DIM concatLine As String
For j = 1 To UBound(aLineItem) Step 3
concatLine = aLineItem(j) & aLineItem(j+1) & aLineItem(j+2)
If concatLine <> "" Then
If blah = 1 Then
Debug.Print ("...." & concatLine)
End If
aItem = Split(concatLine, "~")
If (aItem(0) <> "") And (aItem(0) <> "included_po") And (aItem(0) <> "po_no") Then
Item.PO_num = GetWo(aItem(1))
If Item.PO_num <> "0" Then
Item.Company = aItem(1)
Item.Delivery_date = aItem(12)
Item.pn = aItem(2)
Item.QTY_ordered = aItem(6)
Item.Unit_Price = aItem(9)
End If 'If Item.PO_num <> "0" Then
End If 'If aItem(1) <> "" Then
End If ' If concatLine <> "" Then
Next j
3) or better yet, concat string until you reach the end of the record and then split that concatenated string.
DIM concatLine As String
DIM detailsRecord as Integer
For detailsRecord = 1 To UBound(aLineItem)
if LCase(Right(aLineItem(detailsRecord),5)) = 'wo_no' Then Exit For ' when we find this tag, we know where details record begin
Next detailsRecord
For j = detailsRecord + 1 To UBound(aLineItem) ' begin looping detail records
concatLine = concatLine + aLineItem(j)
If UCase(Right(aLineItem(j), 5)) = "STOCK" Then ' this is your end of the record indicator
If blah = 1 Then
Debug.Print ("...." & concatLine)
End If
aItem = Split(concatLine, "~")
If (aItem(0) <> "") Then
Item.PO_num = GetWo(aItem(1))
If Item.PO_num <> "0" Then
Item.Company = aItem(1)
Item.Delivery_date = aItem(12)
Item.pn = aItem(2)
Item.QTY_ordered = aItem(6)
Item.Unit_Price = aItem(9)
End If 'If Item.PO_num <> "0" Then
End If 'If aItem(1) <> "" Then
End If ' If concatLine <> "" Then
concatLine = ""
Next j
For cases 2 and 3, don't forget to handle the headers first- you will have to move If (aItem(0) <> "") And (aItem(0) <> "included_po") And (aItem(0) <> "po_no") outside the main loop to handle header records (i believe the first 2 or records are headers).
EDIT #3:
I fixed scenario #3 to skip through the header records (assuming 'wo_no' is an indicator of the end of that record), then to concatenate strings to form a single record by searching for an end tag ("STOCK"). This method is going to be flexible enough to handle dynamic number of vbCrLfs in the email body that splits a single record into unpredictable number of strings.
The code was typed in the browser, so I don't guarantee it will work :)
Since you know what should start each line, then use the Split function using "301993959".
Dim LineItems(100) As String
x = Split(sMsg(i), "301993959")
For j = 1 To UBound(x) - 1 'Don't use 0 becuase you don't need that part
LineItems(j - 1) = x(j)
Next i
Of Course you could take it one step further by then splitting each item in the string using "~" as your second delimiter.
Dim LineItems(100, 15) As String
x = Split(Text1.Text, "301993959")
For j = 1 To UBound(x) - 1 'Don't use 0 becuase you don't need that part
y = Split(x(j), "~")
For k = 1 To 15
LineItems(j - 1, k) = y(k)
Next k
Next j

ABCPDF not rendering links

I am using the AddImageUrl function of the ABCPDF library and getting the pages to render fine as PDFs. But I am having a problem where the links (a tags) are not getting rendered in the PDF links but rather as normal text without the link functionality. I have checked the HTML page to make sure that the links exist on the page.
I figured this out. Hopefully, this will help someone else who has this problem. You need to include the following lines before generating the pdf to make the links active.
theDoc.HtmlOptions.AddLinks = true;
We are using ABCPDF.Net version 6 to create a PDF file from HTML. However, the links are not live except for those that appear as URLs in the HTML even when HtmlOptions.AddLinks is set to true. In fact, when it's set to true, the links render with a brown background not present when it's set to false. Here is the code we use to create the PDF using vb.net
Dim theID As Object
Dim pageRect As String
Dim Header As String = Nothing
If SubBank.Length <> 0 Then
If HttpContext.Current.Session("BankType") IsNot Nothing And (HttpContext.Current.Session("BankType") = 1 Or HttpContext.Current.Session("BankType") = 4) Then
Header = "<br/><br/> <br/><br/><div class='bankname1' align='center'>" & SubBank & " </div><div style='float:right'><img src='" & getBaseUrl() & "/Images_Modern/SGPSMainLogo.png' /> </div>"
Else
Header = "<br/><br/> <br/><br/><div class='bankname1' align='center'>" & SubBank & " </div><div style='float:right'><img src='" & getBaseUrl() & "/Images_Modern/bankers_gps_logo_pdf.gif' /> </div>"
End If
If PeerGroup.Length <> 0 AndAlso HttpContext.Current.Session("Product_Id") = 1 Then
Header &= "<div class='bankname2' align='center'>Vs " & PeerGroup & " </div>"
End If
strContent = Header & strContent
End If
Dim objAbc As New WebSupergoo.ABCpdf6.Doc
objAbc.Rect.Inset(15, 15)
CreateErrorText(Header)
Dim ObjSet As New PDFSettings
ObjSet.objAbc = objAbc
ObjSet.OriWidth = objAbc.MediaBox.Width
ObjSet.OriHeight = objAbc.MediaBox.Height
objAbc.HtmlOptions.AddLinks = True
objAbc.HtmlOptions.TargetLinks = True
'objAbc.HtmlOptions.MaxAtomicImageSize = 100
'objAbc.HtmlOptions.ImageQuality = 101
ObjSet.Rotate(Orientation)
'theID = objAbc.AddImageHtml(strContent, True, 0, False)
'objAbc.SetInfo(theID, "/Rotate", "90")
theID = objAbc.AddImageHtml(strContent)
objAbc.Rendering.DotsPerInch = 96S
pageRect = objAbc.Rect.String
Do
'theDoc.FrameRect
If Not objAbc.Chainable(theID) Then Exit Do
objAbc.Page = objAbc.AddPage()
theID = objAbc.AddImageToChain(theID)
Loop
Dim i
For i = 1 To objAbc.PageCount
objAbc.PageNumber = i
objAbc.Flatten()
Next
'added By yuvraj For NS Headder :17/04/2012
If (strContent.IndexOf("NSHEADSTART") > -1) Then
objAbc.HPos = 0.5
objAbc.VPos = 0.5
' objAbc.Color.String = "0 255 0"
objAbc.FontSize = 16
For i = 1 To objAbc.PageCount
objAbc.PageNumber = i
objAbc.Rect.Pin = 0
objAbc.Rect.String = "20 20 400 400"
objAbc.HPos = 0.5
objAbc.AddHtml(getHeadText(strContent))
objAbc.Rect.Move(200, 500)
objAbc.Rect.String = pageRect
objAbc.HPos = 0
Next
End If
'theDoc.Rect.Move 0, -50
objAbc.HPos = 0
objAbc.Save(PDFPath)
objAbc.Clear()
'Response.Redirect(".\PDF\manoj12.pdf")
objAbc = Nothing
theID = Nothinge

Resources