'Why would my Libreoffice Basic script fail to make PDFs with working links?

I've written a script using Libreoffice Basic that pulls data from a calc file and puts it in a writer doc and then exports the doc as a PDF. While that works there is an unwanted effect, none of the links work in the PDF. If I manually export the PDF, the links work. How do I alter the script so that the PDFs created will have working links too?

Script follows (links to example PDFs at the end):

REM Making example pdfs based on writer file while pulling data from a calc file
Dim strPath As String

Dim objWriterDoc As Object
Dim objCalcDoc As Object
Dim objCalcSheet as Object
Dim objCalcCellForID as Object
Dim objCalcCellForName as Object
Dim rg as Object
Dim lngRows as Long

Dim args()
Dim PDFargs(1) As New "com.sun.star.beans.PropertyValue"
Dim Watermarkargs(4) As New "com.sun.star.beans.PropertyValue"

REM set PDF export args
PDFargs(0).Name = "FilterName"
PDFargs(0).Value = "writer_pdf_Export"
PDFargs(1).Name = "FilterData"
PDFargs(1).Value = Array(Array("UseLosslessCompression",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("Quality",0,70,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("ReduceImageResolution",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("MaxImageResolution",0,300,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("UseTaggedPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("SelectPdfVersion",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("PDFUACompliance",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("ExportNotes",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("ViewPDFAfterExport",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("ExportBookmarks",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("OpenBookmarkLevels",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("UseTransitionEffects",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("IsSkipEmptyPages",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("ExportPlaceholders",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("IsAddStream",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("ExportFormFields",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("FormsType",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("AllowDuplicateFieldNames",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("HideViewerToolbar",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("HideViewerMenubar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("HideViewerWindowControls",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("ResizeWindowToInitialPage",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("CenterWindow",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("OpenInFullScreenMode",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("DisplayPDFDocumentTitle",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("InitialView",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("Magnification",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("Zoom",0,100,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("PageLayout",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("FirstPageOnLeft",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("InitialPage",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("Printing",0,2,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("Changes",0,4,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("EnableCopyingOfContent",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("EnableTextAccessForAccessibilityTools",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("ExportLinksRelativeFsys",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("PDFViewSelection",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("ConvertOOoTargetToPDFTarget",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("ExportBookmarksToPDFDestination",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("SignPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("Watermark",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("PreparedPasswords",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("PreparedPermissionPassword",0,Array(),com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("SignatureLocation",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("SignatureReason",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("SignatureContactInfo",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("SignaturePassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("SignatureCertificate",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("SignatureTSA",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),_
                         Array("UseReferenceXObject",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE))

REM open the writer file
strPath = ConvertToUrl("/home/wrg/Downloads/example.odt")
objWriterDoc = StarDesktop.loadComponentFromURL(strPath, "default", 0, args())

REM open the calc list
strPath = ConvertToUrl("/home/wrg/Downloads/example_list.ods")
objCalcDoc = StarDesktop.loadComponentFromURL(strPath, "default", 0, args())
objCalcSheet = objCalcDoc.Sheets(0)
REM select the cols of all the needed rows
PTListRanage = objCalcSheet.getCellRangeByName("A1:B10")

REM set watermark params
Watermarkargs(0).Name = "Text"
Watermarkargs(0).Value = "Init" ' Will change this to custom text based on the calc file '
Watermarkargs(1).Name = "Font"
Watermarkargs(1).Value = "Malgun Gothic Semilight"
Watermarkargs(2).Name = "Angle"
Watermarkargs(2).Value = 315 ' Degrees, int '
Watermarkargs(3).Name = "Transparency"
Watermarkargs(3).Value = 88 ' Percent, int '
Watermarkargs(4).Name = "Color"
Watermarkargs(4).Value = 12632256 ' FF0000 = Red; number only '

document   = objWriterDoc.CurrentController.Frame
oDispHelper = createUnoService("com.sun.star.frame.DispatchHelper")

REM main loop of dataset
lngRows = PTListRanage.Rows.Count - 1
For r = 0 To lngRows
    objCalcCellForID = objCalcSheet.getCellByPosition(0,r)
    objCalcCellForName = objCalcSheet.getCellByPosition(1,r)
    
    REM process the row if there is a name to process
    If objCalcCellForName.String <> "" Then
        
        REM set the WhoFor text field
        if objWriterDoc.getTextFieldMasters.hasByName("com.sun.star.text.fieldmaster.SetExpression.WhoFor") then
            oVar = objWriterDoc.getTextFieldMasters.getByName("com.sun.star.text.fieldmaster.SetExpression.WhoFor")
            oVar.DependentTextFields(0).content = objCalcCellForName.String
        else
            msgbox "WhoFor not found"
        end if
        
        REM set the WhoForID text field
        if objWriterDoc.getTextFieldMasters.hasByName("com.sun.star.text.fieldmaster.SetExpression.WhoForID") then
            oVar = objWriterDoc.getTextFieldMasters.getByName("com.sun.star.text.fieldmaster.SetExpression.WhoForID")
            oVar.DependentTextFields(0).content = objCalcCellForID.String
        else
            msgbox "WhoForID not found"
        end if
        
        REM add text watermark
        Watermarkargs(0).Value = "For ID "+objCalcCellForID.String ' Which text will be shown as the watermark '
        oDispHelper.executeDispatch(document, ".uno:Watermark", "", 0, Watermarkargs())
        
        REM export to PDF format
        strPath = ConvertToURL("/home/wrg/Downloads/example("+objCalcCellForID.String+").pdf")
        objWriterDoc.storeToURL(strPath, PDFargs())
    End If
Next r

REM close all the files we opened
objCalcDoc.close(True)
objWriterDoc.close(True)

Links to example PDFs, manually made with working links and script made links don't work. Also, here is a zip that includes PDFs, writer file, calc file, and bas file.

pdf


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source