2016-05-20 15 views
2

Gibt es eine Möglichkeit, Lesezeichen (für DDX-Inhaltsverzeichnis) mit Coldfusion oder DDX zu generieren, ohne eine neue Seite zu beginnen?coldfusion/DDX PDF einzelne Seite Lesezeichen

Coldfusion gibt uns die Möglichkeit, PDF-Lesezeichen mit zu generieren:

<cfdocumentsection name=""></cfdocumentsection> 

Aber das schafft auch eine neue Seite.

Alle Hilfe ist willkommen.

Code:

<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> 

dies führt zu einem PDF-Dokument mit 3 Seiten und 3 Lesezeichen

+0

Die '' Tag an sich keine neue Seite schafft. Wahrscheinlich ist es etwas anderes in Ihrem Code, das das verursacht, aber Sie haben den Code nicht für uns angegeben. Wir können also nicht viel helfen. Fügen Sie der Frage mehr Code hinzu, damit wir Ihnen möglicherweise weiterhelfen können. –

+0

Ich habe den Code –

+0

Ich habe ein Gefühl cfdocumentsection erstellt eine neue Seite, ich spielte mit ihm eine Weile zurück und das ist etwas kam, dass ich keinen Weg um – luke

Antwort

1

fand ich die Lösung, aber es ist nicht einfach:

Lassen Sie uns sagen, wir haben drei Abschnitte von undefinierter Länge

<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> 

die Seite Info Steigen Sie an welcher Seite der Inhalt

wird sein, wissen
 <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)> 

definieren bookmark.xml für DDX Manipulation

<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-Datei

<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 Verarbeitung

<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> 
0

In Ihrem <cfdocument> Tag versuchen Sie, das bookmark Attribut Lesezeichen in der PDF zu ermöglichen. Wie folgt aus:

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

HINWEIS: Unterstützung Dazu wurde in Coldfusion 9. Sie nicht erwähnt, welche Version Sie ausführen.

See the docs

Lesezeichen

Coldfusion 9 unterstützt Lesezeichen. Setzen Sie das Lesezeichenattribut im cfdocument-Tag auf yes. Geben Sie dann den Namen des Lesezeichens für jedes cfdocumentsection-Tag an.

+0

finden konnte, die immer noch eine neue Seite für jedes Lesezeichen erstellt/cfdocumentsection – luke

+0

Ich benutze Coldfusion 2016. Bookmark = "true" erzeugt nur das Lesezeichen für die PDF, aber es erstellt immer noch eine neue Seite für jeden cfdocumentsection. Ich versuche, mehrere Lesezeichen/Seite hinzuzufügen. Multi-Level-Lesezeichen wäre auch eine nette Funktion von zB. cfdocumentsection-Tags verschachteln, aber dies wird nicht unterstützt. Das funktioniert nur mit DDX. Aber jedes Lesezeichen führt immer noch zu einer neuen Seite. –

Verwandte Themen