Print Page | Close Window

Change Hyperlink Information

Printed From: Debenu Quick PDF Library - PDF SDK Community Forum
Category: For Users of the Library
Forum Name: I need help - I can help
Forum Description: Problems and solutions while programming with the Debenu Quick PDF Library and Debenu PDF Viewer SDK
URL: http://www.quickpdf.org/forum/forum_posts.asp?TID=1304
Printed Date: 16 Jul 25 at 10:38PM
Software Version: Web Wiz Forums 11.01 - http://www.webwizforums.com


Topic: Change Hyperlink Information
Posted By: Andrew Lindsay
Subject: Change Hyperlink Information
Date Posted: 04 Jan 10 at 11:41PM
I have a pdf file that has lots of hyperlinks to external documents.  I would like to programatically change the link destination (or file source) from X:\MyPath\Doc.pdf  -  to Y:\MyNewPath\AnotherDirectory\Doc.pdf
 
Is this possible, and what functions would I need to call.
 
I am using the DLL version with Powerbasic.
 
best regards
 
Andrew Lindsay



Replies:
Posted By: Ingo
Date Posted: 05 Jan 10 at 7:14AM
Hi Andrew!

Perhaps here is something for you:
http://www.quickpdflibrary.com/help/quickpdf/AnnotationsAndHotspotLinks.php
It's possible (perhaps) that DeleteAnnotation works with your links, too.
If it's so then you can use:
AnnotationCount (how many are there on the page)
Get...functions (to get the old properties)
DeleteAnnotation (to remove the old one)
Add...functions (to set the new one)

Cheers, Ingo
 


Posted By: Andrew Lindsay
Date Posted: 06 Jan 10 at 12:50AM
Ingo,
 
I have been trying to snoop around and find out how to do what you have suggested.  To this end, I have tried to retrieve all the characteristics of the links but I am having a few problems.
 
Here is the code I am using (powerbasic)
 
#COMPILE EXE
#DIM ALL
#DEBUG ERROR ON
#INCLUDE "QuickPDFDLL0717.INC"
#INCLUDE "Win32Api.inc"
TYPE AnnoInfo
    ActionType  AS STRING * %MAX_PATH
    ActionID    AS LONG
    AnnoStr(14) AS STRING * %MAX_PATH
    AnnoInt(3)  AS LONG
    AnnoDbl(12) AS DOUBLE
END TYPE
FUNCTION PBMAIN () AS LONG
    DIM InstanceID AS DWORD
    DIM i          AS LONG
    DIM myAnno     AS AnnoInfo
    DIM InfoString AS STRING
    InstanceID = QuickPDFCreateLibrary()
    IF (QuickPDFUnlockKey(InstanceID, "INSERT YOUR KEY HERE") = 1) THEN
        IF (QuickPDFLoadFromFile(InstanceID, "TestLinks.pdf") = 1) THEN
            QuickPDFSelectPage InstanceID, 1

            FOR I = 1 TO QuickPDFAnnotationCount(InstanceID)
                myAnno.ActionID = QuickPDFGetAnnotActionID(InstanceID, i)
                myAnno.ActionType = QuickPDFGetActionType(InstanceID, myAnno.ActionID)
                myAnno.AnnoStr(1) = QuickPDFGetAnnotStrProperty(InstanceID, i, 101)
                myAnno.AnnoStr(2) = QuickPDFGetAnnotStrProperty(InstanceID, i, 102)
                myAnno.AnnoStr(3) = QuickPDFGetAnnotStrProperty(InstanceID, i, 103)
                myAnno.AnnoStr(4) = QuickPDFGetAnnotStrProperty(InstanceID, i, 104)
                myAnno.AnnoStr(5) = QuickPDFGetAnnotStrProperty(InstanceID, i, 111)
                myAnno.AnnoStr(6) = QuickPDFGetAnnotStrProperty(InstanceID, i, 112)
                myAnno.AnnoStr(7) = QuickPDFGetAnnotStrProperty(InstanceID, i, 113)
                myAnno.AnnoStr(8) = QuickPDFGetAnnotStrProperty(InstanceID, i, 114)
                myAnno.AnnoStr(9) = QuickPDFGetAnnotStrProperty(InstanceID, i, 115)
                myAnno.AnnoStr(10) = QuickPDFGetAnnotStrProperty(InstanceID, i, 117)
                myAnno.AnnoStr(11) = QuickPDFGetAnnotStrProperty(InstanceID, i, 118)
                myAnno.AnnoStr(12) = QuickPDFGetAnnotStrProperty(InstanceID, i, 127)
                myAnno.AnnoStr(13) = QuickPDFGetAnnotStrProperty(InstanceID, i, 129)
                myAnno.AnnoStr(14) = QuickPDFGetAnnotStrProperty(InstanceID, i, 130)
                myAnno.AnnoInt(1) = QuickPDFGetAnnotIntProperty(InstanceID, i, 109)
                myAnno.AnnoInt(2) = QuickPDFGetAnnotIntProperty(InstanceID, i, 116)
                myAnno.AnnoInt(3) = QuickPDFGetAnnotIntProperty(InstanceID, i, 128)
                myAnno.AnnoDbl(1) = QuickPDFGetAnnotDblProperty(InstanceID, i, 105)
                myAnno.AnnoDbl(2) = QuickPDFGetAnnotDblProperty(InstanceID, i, 106)
                myAnno.AnnoDbl(3) = QuickPDFGetAnnotDblProperty(InstanceID, i, 107)
                myAnno.AnnoDbl(4) = QuickPDFGetAnnotDblProperty(InstanceID, i, 108)
                myAnno.AnnoDbl(5) = QuickPDFGetAnnotDblProperty(InstanceID, i, 119)
                myAnno.AnnoDbl(6) = QuickPDFGetAnnotDblProperty(InstanceID, i, 120)
                myAnno.AnnoDbl(7) = QuickPDFGetAnnotDblProperty(InstanceID, i, 121)
                myAnno.AnnoDbl(8) = QuickPDFGetAnnotDblProperty(InstanceID, i, 122)
                myAnno.AnnoDbl(9) = QuickPDFGetAnnotDblProperty(InstanceID, i, 123)
                myAnno.AnnoDbl(10) = QuickPDFGetAnnotDblProperty(InstanceID, i, 124)
                myAnno.AnnoDbl(11) = QuickPDFGetAnnotDblProperty(InstanceID, i, 125)
                myAnno.AnnoDbl(12) = QuickPDFGetAnnotDblProperty(InstanceID, i, 126)

                InfoString = FORMAT$(myAnno.ActionID) + $LF + _
                             TRIM$(myAnno.ActionType) + $LF + _
                             TRIM$(myAnno.AnnoStr(1)) + $LF + _
                             TRIM$(myAnno.AnnoStr(2)) + $LF + _
                             TRIM$(myAnno.AnnoStr(3)) + $LF + _
                             TRIM$(myAnno.AnnoStr(4)) + $LF + _
                             TRIM$(myAnno.AnnoStr(5)) + $LF + _
                             TRIM$(myAnno.AnnoStr(6)) + $LF + _
                             TRIM$(myAnno.AnnoStr(7)) + $LF + _
                             TRIM$(myAnno.AnnoStr(8)) + $LF + _
                             TRIM$(myAnno.AnnoStr(9)) + $LF + _
                             TRIM$(myAnno.AnnoStr(10)) + $LF + _
                             TRIM$(myAnno.AnnoStr(11)) + $LF + _
                             TRIM$(myAnno.AnnoStr(12)) + $LF + _
                             TRIM$(myAnno.AnnoStr(13)) + $LF + _
                             TRIM$(myAnno.AnnoStr(14)) + $LF + _
                             FORMAT$(myAnno.AnnoInt(1)) + $LF + _
                             FORMAT$(myAnno.AnnoInt(2)) + $LF + _
                             FORMAT$(myAnno.AnnoInt(3)) + $LF + _
                             FORMAT$(myAnno.AnnoDbl(1)) + $LF + _
                             FORMAT$(myAnno.AnnoDbl(2)) + $LF + _
                             FORMAT$(myAnno.AnnoDbl(3)) + $LF + _
                             FORMAT$(myAnno.AnnoDbl(4)) + $LF + _
                             FORMAT$(myAnno.AnnoDbl(5)) + $LF + _
                             FORMAT$(myAnno.AnnoDbl(6)) + $LF + _
                             FORMAT$(myAnno.AnnoDbl(7)) + $LF + _
                             FORMAT$(myAnno.AnnoDbl(8)) + $LF + _
                             FORMAT$(myAnno.AnnoDbl(9)) + $LF + _
                             FORMAT$(myAnno.AnnoDbl(10)) + $LF + _
                             FORMAT$(myAnno.AnnoDbl(11)) + $LF + _
                             FORMAT$(myAnno.AnnoDbl(12))
                MSGBOX InfoString
               
                QuickPDFDeleteAnnotation(InstanceID, i)
            NEXT
        ELSE
            MSGBOX "Document not loaded"
        END IF
    END IF
    QuickPDFSaveToFile(InstanceID, "TestLinksModified.pdf")
    QuickPDFReleaseLibrary(InstanceID)
END FUNCTION
Now when I run this program I do not get all the informatino parameters returned, I only get the first four pieces of information.
 
I have used debug to look at what is happenning, and I seem to get RTL errors reported when accessing certain pieces of information.  The function calls that generate the errors and the error reports are as follows.
 
 
myAnno.ActionType = QuickPDFGetActionType(InstanceID, myAnno.ActionID)
Invalid address specified to RtlSizeHeap( 00180000, 015D30D8 )<0A>
myAnno.AnnoStr(1) = QuickPDFGetAnnotStrProperty(InstanceID, i, 101)
Invalid address specified to RtlSizeHeap( 00180000, 015D33C0 )<0A>
myAnno.AnnoStr(6) = QuickPDFGetAnnotStrProperty(InstanceID, i, 112)
Invalid address specified to RtlSizeHeap( 00180000, 015D30D8 )<0A>
myAnno.AnnoStr(8) = QuickPDFGetAnnotStrProperty(InstanceID, i, 114)
Invalid address specified to RtlSizeHeap( 00180000, 015EDAE8 )<0A>
myAnno.AnnoStr(13) = QuickPDFGetAnnotStrProperty(InstanceID, i, 129)
Invalid address specified to RtlSizeHeap( 00180000, 0151F6F8 )<0A>

Do you have any ideas as to what these errors are, or is there any other information that I could supply to assist?
 
Regards
 
Andrew Lindsay
      


Posted By: Ingo
Date Posted: 06 Jan 10 at 11:42AM
Hi Andrew!

Sorry... but i think perhaps now's the time to post on the official support-page ;-)

Cheers, Ingo



Print Page | Close Window

Forum Software by Web Wiz Forums® version 11.01 - http://www.webwizforums.com
Copyright ©2001-2014 Web Wiz Ltd. - http://www.webwiz.co.uk