закладки для одной страницы coldfusion/DDX PDF

Есть ли возможность создавать закладки (для оглавления DDX) с помощью Coldfusion или DDX без открытия новой страницы?

Coldfusion дает нам возможность создавать pdf-закладки с помощью:

<cfdocumentsection name=""></cfdocumentsection>

Но это также создает новую страницу.

Любая помощь приветствуется.

код:

<cfdocument name="myPdf" format="PDF">
    <cfdocumentsection name="section 1">
        This is section 1
    </cfdocumentsection>
    <cfdocumentsection name="section 2">
        This is section 2
    </cfdocumentsection>
    <cfdocumentsection name="section 3">
        This is section 3
    </cfdocumentsection>
</cfdocument>
<cfprocessingdirective suppressWhitespace="true">
        <cfcontent type="application/pdf" reset="true" variable="#tobinary(myPdf)#"/>
</cfprocessingdirective>

это приводит к документу в формате PDF с 3 страницами и 3 закладками


person Xavier L.    schedule 20.05.2016    source источник
comment
Тег <cfdocumentsection> сам по себе не создает новую страницу. Скорее всего, это произошло из-за чего-то еще в вашем коде, но вы не предоставили код для просмотра. Так что мы ничем не можем помочь. Добавьте больше своего кода в вопрос, чтобы мы могли вам помочь.   -  person Miguel-F    schedule 23.05.2016
comment
у меня такое чувство, что cfdocumentsection действительно создает новую страницу, я играл с ней некоторое время назад, и это что-то наткнулось на то, что я не мог найти способ обойти   -  person luke    schedule 23.05.2016


Ответы (2)


Я нашел решение, но это непросто:

Допустим, у нас есть 3 секции неопределенной длины.

    <cfsavecontent variable="section1">
        <p>This is section 1</p>
    </cfsavecontent>
    <cfsavecontent variable="section2">
        <p>This is section 2</p>
    </cfsavecontent>
    <cfsavecontent variable="section3">
        <p>This is section 3</p>
    </cfsavecontent>

<cfset sectionList = 'section1,section2,section3'>
<cfset bookmarkList = "">
<cfset content = "">
<cfset currentPage = 1>
<cfloop list="#sectionList#" index="i">
    <cfdocument name="infoPdf" format="PDF" bookmark="false">
        <cfdocumentsection>
            <cfoutput>#content#</cfoutput>
            <h2>FakeHeader</h2>
        </cfdocumentsection>
    </cfdocument>

Получите информацию о странице, чтобы узнать, на какой странице будет контент

        <cfpdf action="getinfo" name="pdfInfo" source="infoPdf">
        <cfset currentPage = pdfInfo.TotalPages>
        <cfset bookmarkList = listAppend(bookmarkList, currentPage)> 
        <cfset content &= VARIABLES[i]> 
        <cfdocument name="myPdf" format="PDF" bookmark="false">
            <cfdocumentsection>
                <cfoutput>#content#</cfoutput>
            </cfdocumentsection>
        </cfdocument>
    </cfloop>
    <cfset fileWrite(ExpandPath("test.pdf"),myPdf)>

Определить bookmark.xml для манипулирования DDX

<cfxml variable="bookmarks">
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Bookmarks xmlns="http://ns.adobe.com/pdf/bookmarks" version="1.0">
    <cfoutput>
        <cfloop from="1" to="#listlen(sectionList)#" index="i">
            <Bookmark>
                <Title>#ListGetAt(sectionList,i)#</Title>
                <Dest>
                  <Fit PageNum="#ListGetAt(bookmarkList,i)-1#"/>
                </Dest>
            </Bookmark>  
        </cfloop>
    </cfoutput>
</Bookmarks>
</cfxml>
<cfset fileWrite(ExpandPath("/bookmarks.xml"),bookmarks)>

DDX-файл

<cfsavecontent variable="myDDX">
    <DDX xmlns="http://ns.adobe.com/DDX/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ns.adobe.com/DDX/1.0/ coldfusion_ddx.xsd">
        <PDF result="Out1">
            <PDF source="test"/>
            <Bookmarks source="inputxml"/>
        </PDF>
        <PDF result="Out">
            <TableOfContents includeInTOC="false" bookmarkTitle="Table of Contents"  maxBookmarkLevel="infinite">   
                <TableOfContentsEntryPattern applicableLevel="all">
                    <StyledText>
                        <p font-family="Arial" font-size="11pt">
                            <_BookmarkTitle/>
                            <Space/>
                            <Space/>
                            <leader leader-pattern="dotted"/>
                            <Space/>
                            <Space/> 
                            <_BookmarkPageCitation/>
                        </p>
                    </StyledText>
                </TableOfContentsEntryPattern>
            </TableOfContents>
            <PDF source="Out1"/>
        </PDF>
    </DDX>
</cfsavecontent>

DDX-обработка

    <cfset inputStruct = StructNew()>
    <cfset inputStruct.test = 'test.pdf'>
    <cfset inputStruct.inputxml = "bookmarks.xml"/>
    <cfset outputStruct = StructNew()>
    <cfset outputStruct.Out = "CombinedDocument.pdf">
<cfpdf action="processddx" ddxfile="#myddx#" inputfiles="#inputStruct#" outputfiles="#outputStruct#" name="ddxVar">
<cfpdf action="read" source="CombinedDocument.pdf" name="resultPdf">
<cfprocessingdirective suppressWhitespace="true">
    <cfcontent type="application/pdf" reset="true" variable="#tobinary(resultPdf)#"/>
</cfprocessingdirective> 
person Xavier L.    schedule 26.05.2016

Попробуйте добавить в свой тег <cfdocument> атрибут bookmark, чтобы включить закладки в PDF. Нравится:

<cfdocument name="myPdf" format="PDF" bookmark="yes">
    ...

ПРИМЕЧАНИЕ. Поддержка этого была добавлена ​​в ColdFusion 9. Вы не упомянули, какую версию используете.

см. документацию

Закладки

ColdFusion 9 поддерживает закладки. В теге cfdocument установите для атрибута bookmark значение yes. Затем укажите имя закладки для каждого тега cfdocumentsection.

person Miguel-F    schedule 23.05.2016
comment
который по-прежнему создает новую страницу для каждой закладки/cfdocumentsection - person luke; 24.05.2016
comment
Я использую Coldfusion 2016. Bookmark=true просто создает закладку для PDF, но по-прежнему создает новую страницу для каждого раздела cfdocument. Я пытаюсь добавить несколько закладок/страниц. Многоуровневая закладка также была бы хорошей функцией, например. вложение тегов cfdocumentsection, но это не поддерживается. это работает только с DDX. Но каждая закладка по-прежнему приводит к новой странице. - person Xavier L.; 24.05.2016