justacoder
justacoder

Reputation: 2704

Error with multiple PDF Generation in CF

I'm getting an error when producing a multi-page PDF.

The pages attribute is not specified for the MERGE action in the cfpdf tag.

The line that is causing the issue is: <cfpdf action="merge" source="#ArrayToList(variables.pdfList)#" destination="promega.pdf" overwrite="yes" />

I tried looking in Adobe's documentation bug cannot find an attribute pages for the merge action. Thoughts?

        <!--- Append PDF to list for merge printing later --->
        <cfset ArrayAppend(variables.pdfList, "#expandPath('.')#\general.pdf") />

        <cfset variables.userAgenda = GetAttendeeSchedule(
            variables.event_key,
            variables.badgeNum
        ) />


        <!--- Field CFID is the id of the agenda item; use this for certificate selection --->
        <cfif variables.userAgenda.recordcount>
            <cfloop query="variables.userAgenda">
                <cfset variables.title = Trim(variables.userAgenda.CUSTOMFIELDNAMEONFORM) />

                <cfpdfform source="#expandPath('.')#\promega_certificate.pdf" destination="#cfid#.pdf" action="populate">

                        <cfset variables.startdate = replace(CUSTOMFIELDSTARTDATE, "T", " ") />

                        <cfpdfformparam name="WORKSHOP" value="#variables.title#">
                        <cfpdfformparam name="NAME" value="#variables.badgeInfo.FirstName# #variables.badgeInfo.LastName#">
                        <cfpdfformparam name="STARTDATE" value="#DateFormat(variables.startdate, "medium" )#">

                </cfpdfform>

                <!--- Append PDF to list for merge printing later --->
                <cfset ArrayAppend(variables.pdfList, "#expandPath('.')#\#cfid#.pdf") />
            </cfloop>
        </cfif>

        <cfif ArrayLen(variables.pdfList)>
            <cfpdf action="merge" source="#ArrayToList(variables.pdfList)#" destination="promega.pdf" overwrite="yes" />
            <!--- Delete individual files --->
            <cfloop list="#ArrayToList(variables.pdfList)#" index='i'>
                <cffile action="delete" file="#i#" />
            </cfloop>
            <cftry>
                <cffile action="delete" file="#expandPath('.')#\general.pdf" />
                <cfcatch></cfcatch>
            </cftry>
            <cfheader name="Content-Disposition" value="attachment;filename=promega.pdf">
            <cfcontent type="application/octet-stream" file="#expandPath('.')#\promega.pdf" deletefile="Yes">

            <cflocation url="index.cfm" addtoken="false" />
        </cfif>

Upvotes: 1

Views: 896

Answers (2)

Tom Hubbard
Tom Hubbard

Reputation: 16119

This happens when source is a single file rather than a comma separated list of files. I'm guessing that if it's a single file is is expecting to extract some pages rather than add.

Upvotes: 2

Nebu
Nebu

Reputation: 1793

I tried the following on my coldfusion 9 machine and it worked just fine:

<cfset strPath = GetDirectoryFromPath(GetCurrentTemplatePath()) />
<Cfset pdflist = arrayNew(1)>
<Cfset pdflist[1] = "#strPath#page1.pdf">
<Cfset pdflist[2] = "#strPath#page2.pdf">

<cfpdf action="merge" source="#ArrayToList(pdflist)#" destination="#strPath#merged.pdf" overwrite="yes" />

You could try to merge the pages like this and check whether you still get an error:

<cfset strPath = GetDirectoryFromPath(GetCurrentTemplatePath()) />
<Cfset pdflist = arrayNew(1)>
<Cfset pdflist[1] = "#strPath#page1.pdf">
<Cfset pdflist[2] = "#strPath#page2.pdf">

<cfpdf action="merge" destination="#strPath#merged.pdf" overwrite="yes">
    <Cfloop from=1 to="#arraylen(pdflist)#" index="x">
    <cfpdfparam source="#pdfList[x]#">
    </cfloop>
</cfpdf>

Upvotes: 0

Related Questions