Link to home
Start Free TrialLog in
Avatar of mrwhipple
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.PDDoc")
        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(SamplePDFFilePath)
        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(cDIPath, nSourcePage, nStart, nEnd, bOnTop, bOnScreen, bOnPrint, nHorizAlign, nVertAlign, nHorizValue, nVertValue, bPercentage, nScale, bFixedPrint, nRotation, nOpacity)
        jsObj.addWatermarkFromFile(SampleImageFilePath, 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(currentTime, 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.PDDoc")).  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,
Avatar of Bob Learned
Bob Learned
Flag of United States of America image

You might be squeezing the Charmin :)

What is the error on CreateObject?  ActiveX cannot create object?

Bob
Avatar of mrwhipple
mrwhipple

ASKER

When running VB, I can now get past the CreateObject error, now the program blows up on the open (rc = pdDoc.Open(SamplePDFFilePath)).

 
What is the specific error text?

Bob
An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in WatermarkJsoVB.exe

Additional information: The server threw an exception.

 Is the full error I get.
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(cDIPath, nSourcePage, nStart, nEnd, bOnTop, bOnScreen, bOnPrint, nHorizAlign, nVertAlign, nHorizValue,
        'tValue, bPercentage, nScale, bFixedPrint, nRotation, nOpacity)
        jsObj.addWatermarkFromFile(SampleImageFilePath, 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,


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
Avatar of GhostMod
GhostMod
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial