The Original FileMaker Community
Business Templates - Demo Apps - Video Tutorials -Samples - Help - 46000 Member Forum

The Leading Filemaker Developer Tools

How to Merge PDF with table of contents – FileMaker

 

We got a new example database to show how to merge PDFs. One of the feature beside adding page numbers is to build a table of contents for the document with clickable entries:

 

Set Variable [ $pdf ; Value: MBS(“DynaPDF.New“) ]

 

#

 

# create dummy page for table

 

Set Variable [ $r ; Value: MBS(“DynaPDF.AppendPage“; $pdf) ]

 

Set Variable [ $r ; Value: MBS(“DynaPDF.EndPage“; $pdf) ]

 

#

 

# create table for index

 

Set Variable [ $r ; Value: MBS(“DynaPDF.SetPageCoords“; $pdf; “TopDown”) ]

 

Set Variable [ $table ; Value: MBS(“DynaPDF.Table.Create“; $pdf; 10; 2; 500; 20) ]

 

#

 

Set Variable [ $r ; Value: MBS(“DynaPDF.Table.SetFont“; $table; -1; -1; “Helvetica”; 0; 1; “unicode”) ]

 

Set Variable [ $r ; Value: MBS(“DynaPDF.Table.SetFontSize“; $table; -1; -1; 14) ]

 

Set Variable [ $r ; Value: MBS( “DynaPDF.Table.SetColWidth“; $Table; 0; 450; 1 ) ]

 

Set Variable [ $r ; Value: MBS( “DynaPDF.Table.SetColWidth“; $Table; 1; 50;1 ) ]

 

#

 

# Build Table Of Contents

 

Go to Record/Request/Page [ First ]

 

Set Variable [ $destPage ; Value: 2 ]

 

Loop

 

#

 

# open PDF

 

If [ not IsEmpty ( Merge PDFs::InputPDF ) ]

 

Set Variable [ $r ; Value: MBS(“DynaPDF.OpenPDFFromContainer“; $pdf; Merge PDFs::InputPDF) ]

 

If [ MBS(“IsError“) ]

 

Show Custom Dialog [ “Failed to open PDF.” ; $r ]

 

Exit Script [ Text Result:    ]

 

End If

 

Else If [ not IsEmpty ( Merge PDFs::InputPath ) ]

 

Set Variable [ $r ; Value: MBS(“DynaPDF.OpenPDFFromFile“; $pdf; Merge PDFs::InputPath) ]

 

If [ MBS(“IsError“) ]

 

Show Custom Dialog [ “Failed to open PDF.” ; $r ]

 

Exit Script [ Text Result:    ]

 

End If

 

Else

 

# no PDF?

 

End If

 

#

 

# check if we have pages to import

 

Set Variable [ $pageCount ; Value: MBS( “DynaPDF.GetImportPageCount“; $PDF ) ]

 

If [ $pageCount > 0 ]

 

Set Variable [ $lastPage ; Value: MBS(“DynaPDF.ImportPDFFile“; $pdf; $destpage) ]

 

If [ GetAsNumber($lastPage) >0 ]

 

#

 

# put in a named destination for this new page

 

Set Variable [ $NamedDest ; Value: “Record” & Get(RecordID) ]

 

Set Variable [ $NamedDestHandle ; Value: MBS( “DynaPDF.CreateNamedDest“; $PDF; $NamedDest; $DestPage; “Fit”) ]

 

# add table entry

 

Set Variable [ $rowNum ; Value: MBS(“DynaPDF.Table.AddRow“; $table) ]

 

Set Variable [ $r ; Value: MBS(“DynaPDF.Table.SetCellText“; $table; $rowNum; 0; “left”; “top”; Merge PDFs::InputName) ]

 

Set Variable [ $r ; Value: MBS(“DynaPDF.Table.SetCellText“; $table; $rowNum; 1; “right”; “top”; $destPage) ]

 

# add click action

 

Set Variable [ $Action ; Value: MBS( “DynaPDF.CreateGoToActionEx“; $PDF; $NamedDestHandle) ]

 

Set Variable [ $r ; Value: MBS( “DynaPDF.Table.SetCellAction“; $Table; $rowNum; 0; $action; “Invert” ) ]

 

Set Variable [ $r ; Value: MBS( “DynaPDF.Table.SetCellAction“; $Table; $rowNum; 1; $action; “Invert” ) ]

 

#

 

Set Variable [ $destPage ; Value: $lastPage + 1 ]

 

End If

 

End If

 

#

 

# optionally close import files

 

Set Variable [ $r ; Value: MBS(“DynaPDF.CloseImportFile“; $pdf) ]

 

#

 

# next file

 

Go to Record/Request/Page [ Next ; Exit after last: On ]

 

End Loop

 

#

 

# Draw Table

 

Set Variable [ $r ; Value: MBS(“DynaPDF.EditPage“; $pdf; 1) ]

 

Set Variable [ $r ; Value: MBS(“DynaPDF.Table.Draw“; $table; 50; 50; 742) ]

 

Set Variable [ $r ; Value: MBS(“DynaPDF.EndPage“; $pdf) ]

 

#

 

# show final PDF

 

Set Field [ Merge PDFs::FinalPDF ; MBS(“DynaPDF.Save“; $pdf; “Merged.pdf”) ]

 

Set Variable [ $r ; Value: MBS(“DynaPDF.Release“; $pdf) ]

 

The example file will be included in the next plugin prerelease. Please do not hesitate to contact us with questions.

 

 

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More