mrwhipple
asked on
C# and Adobe SDK Watermark
I have Adobe 7.0 SDK. And I am trying to add a watermark to a pdf. There is an example in VB that comes with the SDK, but I'm not very good at VB. I have tried to convert the VB code to C#, but some of the function do not seem to be available in C#.
Here is the original Adobe sample code
Public Sub Main()
' Create a PDDoc IAC object.
Dim pdDoc As Acrobat.CAcroPDDoc
pdDoc = CreateObject("AcroExch.PDD oc")
If pdDoc Is Nothing Then
MsgBox("Failed to create Acrobat PDDoc object.")
End
End If
' Open the source PDF document
Dim rc As Integer
rc = pdDoc.Open(SamplePDFFilePa th)
If rc <> -1 Then
MsgBox("Failed to open PDF document " & SamplePDFFilePath)
End
End If
' Acquire the Acrobat JavaScript Object interface from the PDDoc object
jsObj = pdDoc.GetJSObject
' Add a watermark from a file.
' function prototype:
' addWatermarkFromFile(cDIPa th, nSourcePage, nStart, nEnd, bOnTop, bOnScreen, bOnPrint, nHorizAlign, nVertAlign, nHorizValue, nVertValue, bPercentage, nScale, bFixedPrint, nRotation, nOpacity)
jsObj.addWatermarkFromFile (SampleIma geFilePath , 0, 0, 0, True, True, True, 0, 3, 10, -10, False, 0.4, False, 0, 0.7)
' get current time and make a string from it
Dim currentTime As String
currentTime = Now.ToString
' make a color object
Dim oColor As Object
oColor = jsObj.color.blue()
' Add a text watermark.
' function prototype:
' addWatermarkFromText(cText , nTextAlign, cFont, nFontSize, oColor, nStart, nEnd, bOnTop, bOnScreen, bOnPrint, nHorizAlign, nVertAlign, nHorizValue, nVertValue, bPercentage, nScale, bFixedPrint, nRotation, nOpacity)
jsObj.addWatermarkFromText (currentTi me, 1, "Helvetica", 10, oColor, 0, 0, True, True, True, 0, 3, 20, -45, False, 1.0, False, 0, 0.7)
' save the PDF with watermarks to a new document.
rc = pdDoc.Save(1, OutputFilePath) ' full save
' close original PDF.
pdDoc.Close()
pdDoc = Nothing
jsObj = Nothing
' to clean up, get the Acrobat application,
' close Acrobat if there are no open documents.
Dim gApp As Acrobat.CAcroApp
gApp = CreateObject("AcroExch.App ")
If gApp.GetNumAVDocs = 0 Then
gApp.CloseAllDocs()
gApp.Exit()
End If
' show message. You can comment it out if you really need a quiet operation.
If rc = True Then
MsgBox("PDF with the watermark was saved to " & OutputFilePath)
Else
MsgBox("Operation was failed.")
End If
End Sub
When I try and run the code in VB it blows up right way on (pdDoc = CreateObject("AcroExch.PDD oc")). In my converted C# code I do not have the addWatermarkFromFile function from the Adobe Javascript object.
Looking at the SDK help files I don't understand how I can access all the watermark functions they speak of.
What am I missing or doing wrong? I think I am making this more difficult then it really is.
Thanks,
Here is the original Adobe sample code
Public Sub Main()
' Create a PDDoc IAC object.
Dim pdDoc As Acrobat.CAcroPDDoc
pdDoc = CreateObject("AcroExch.PDD
If pdDoc Is Nothing Then
MsgBox("Failed to create Acrobat PDDoc object.")
End
End If
' Open the source PDF document
Dim rc As Integer
rc = pdDoc.Open(SamplePDFFilePa
If rc <> -1 Then
MsgBox("Failed to open PDF document " & SamplePDFFilePath)
End
End If
' Acquire the Acrobat JavaScript Object interface from the PDDoc object
jsObj = pdDoc.GetJSObject
' Add a watermark from a file.
' function prototype:
' addWatermarkFromFile(cDIPa
jsObj.addWatermarkFromFile
' get current time and make a string from it
Dim currentTime As String
currentTime = Now.ToString
' make a color object
Dim oColor As Object
oColor = jsObj.color.blue()
' Add a text watermark.
' function prototype:
' addWatermarkFromText(cText
jsObj.addWatermarkFromText
' save the PDF with watermarks to a new document.
rc = pdDoc.Save(1, OutputFilePath) ' full save
' close original PDF.
pdDoc.Close()
pdDoc = Nothing
jsObj = Nothing
' to clean up, get the Acrobat application,
' close Acrobat if there are no open documents.
Dim gApp As Acrobat.CAcroApp
gApp = CreateObject("AcroExch.App
If gApp.GetNumAVDocs = 0 Then
gApp.CloseAllDocs()
gApp.Exit()
End If
' show message. You can comment it out if you really need a quiet operation.
If rc = True Then
MsgBox("PDF with the watermark was saved to " & OutputFilePath)
Else
MsgBox("Operation was failed.")
End If
End Sub
When I try and run the code in VB it blows up right way on (pdDoc = CreateObject("AcroExch.PDD
Looking at the SDK help files I don't understand how I can access all the watermark functions they speak of.
What am I missing or doing wrong? I think I am making this more difficult then it really is.
Thanks,
ASKER
When running VB, I can now get past the CreateObject error, now the program blows up on the open (rc = pdDoc.Open(SamplePDFFilePa th)).
What is the specific error text?
Bob
Bob
ASKER
An unhandled exception of type 'System.Runtime.InteropSer vices.COME xception' occurred in WatermarkJsoVB.exe
Additional information: The server threw an exception.
Is the full error I get.
Additional information: The server threw an exception.
Is the full error I get.
ASKER
I have finally got the sample code to work from Adobe.
But I still unable to see how to convert the following VB code to C#
jsObj = pdDoc.GetJSObject
' Add a watermark from a file.
' function prototype:
' addWatermarkFromFile(cDIPa th, nSourcePage, nStart, nEnd, bOnTop, bOnScreen, bOnPrint, nHorizAlign, nVertAlign, nHorizValue,
'tValue, bPercentage, nScale, bFixedPrint, nRotation, nOpacity)
jsObj.addWatermarkFromFile (SampleIma geFilePath , 0, 0, 0, True, True, True, 0, 3, 10, -10, False, 0.4, False, 0, 0.7)
when I do
Acrobat.CAcroPDDoc pdDoc;
CAcroAVDoc avDoc;
avDoc = new AcroAVDocClass();
avDoc.Open (szPdfPathConst, "");
//set the pdDoc object and get some data
pdDoc = (CAcroPDDoc)avDoc.GetPDDoc ();
object jsObj = pdDoc.GetJSObject();
the jsObj does not have a addWatermarkFromFile functions?
So can I assume that I can only access that through VB?
If all else fails I guess I will modify the VB sample program to fit my needs and convert it to a dll to be called from my C# program.
Thanks,
But I still unable to see how to convert the following VB code to C#
jsObj = pdDoc.GetJSObject
' Add a watermark from a file.
' function prototype:
' addWatermarkFromFile(cDIPa
'tValue, bPercentage, nScale, bFixedPrint, nRotation, nOpacity)
jsObj.addWatermarkFromFile
when I do
Acrobat.CAcroPDDoc pdDoc;
CAcroAVDoc avDoc;
avDoc = new AcroAVDocClass();
avDoc.Open (szPdfPathConst, "");
//set the pdDoc object and get some data
pdDoc = (CAcroPDDoc)avDoc.GetPDDoc
object jsObj = pdDoc.GetJSObject();
the jsObj does not have a addWatermarkFromFile functions?
So can I assume that I can only access that through VB?
If all else fails I guess I will modify the VB sample program to fit my needs and convert it to a dll to be called from my C# program.
Thanks,
ASKER
I made a VB dll that I call from my C# application to make my watermark. Not the way I prefer it, but it seems Adobe SDK is not friendly with C#.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
What is the error on CreateObject? ActiveX cannot create object?
Bob