SlideShare une entreprise Scribd logo
1  sur  55
Customizing PDF output
from the DITA Open Toolkit




                       Leigh White
               ElementalSource, LLC
Me, me, me


 • Background: English, Theoretical Linguistics
 • NOT a programmer or stylesheet developer
 • 20+ years as a content creator




ElementalSource, LLC
Lower your standards?


 • That depends…
        – Are your standards based on…non-standards?
               • A tweak here, a tweak there, whatever “looks right”
 • That is not a standard!
 • A standard is “an approved model”
        – Predictable and prescriptive
 • PDF processing via the OT is absolutely based on
   standards
        – If you can’t capture your “tweak” with a context-based rule,
          it’s not predictable or prescriptive—drop it!
ElementalSource, LLC
Ask yourself…


 …which is more important:
        – perfect pages
        – more time to spend creating quality content




ElementalSource, LLC
How does the OT make PDFs?


 • Uses the FO plug-in
 • A collection of stylesheets, variables files, build files,
   etc. that transform DITA into XSL:FO and then send it to
   an FO processor
 • You never see an actual page until the PDF is done
        – This is a COMPLETE mind freak for some people
        – And a godsent miracle for others



ElementalSource, LLC
FO plug-in


 • Originally developed to fill in the “hardcopy” gap
 • Currently maintained by Suite Solutions
 • Several folks working on improvements or complete
   re-writes
 • It ain’t pretty but it works




ElementalSource, LLC
What happens




ElementalSource, LLC
Quick tour of the FO plug-in


 • DITA-OTdemofo:




ElementalSource, LLC
The cfg folder


 • DITA-OTdemofocfg:

                       Attribute sets to          Images associated
                            control                    with the
                       appearance of                customization
                           elements



             Stylesheets to
                 control                   Language-specific
             processing and                   variables for
               behavior of                  “boilerplate” text;
                elements                      header/footer
                                             definitions; note
                                              image paths

ElementalSource, LLC
ElementalSource, LLC
Attribute sets


 • Grouped by element “type” (lists, links, tables, etc.) or
   domain (ui, pr, etc.)
 • Everything else is in commons-attr.xsl




ElementalSource, LLC
Attribute sets


 • Expect to see the attributes in the default sets
 • If you customize &
   remove attributes,
   OT “fills them back
   in” from the default




ElementalSource, LLC
Attribute sets


 • Can call other attribute sets:




ElementalSource, LLC
Attribute sets


 • Called by the stylesheets in
   DITA-OTdemofoxsl
 • Use the attribute set name to find the xsl template OR
   use the xsl template to find the attribute set




ElementalSource, LLC
Attribute sets


 • Some files are specific to FO processors:
        – _axf: Antenna House
        – _xep: XEP
        – _fop: Apache FOP




ElementalSource, LLC
basic-settings.xsl


 • Variables that define:
        –   page dimensions
        –   margins
        –   default font size
        –   default line height
 • Use these variables instead of fixed values in attribute
   sets and layout-masters
 • Add more as needed for greater uniformity

ElementalSource, LLC
XSL


 • Lots of these but many you probably won’t touch
 • Grouped by element “type” (lists, links, tables, etc.) or
   domain (ui, pr, etc.)
        – Names match the attribute set files
 • Everything else is in commons.xsl
        – Kitchen sink




ElementalSource, LLC
XSL


 • Some files specific to FO processors:
        – _axf: Antenna House
        – _xep: XEP
        – _fop: Apache FOP




ElementalSource, LLC
_1.0 files


 • Sometimes replace original file:
        – bookmarks_1.0.xsl
        – front-matter_1.0.xsl
 • Sometimes supplement original file:
        –   commons_1.0.xsl
        –   index_1.0.xsl
        –   table_1.0.xsl
        –   toc_1.0.xsl


ElementalSource, LLC
root-processing.xsl


 • Creates the “shell” for your FO file
 • Calls other templates for frontmatter, TOC, index, etc.
 • Creates variables from map metadata that are available
   throughout the build in headers, footers, cover pages,
   etc.




ElementalSource, LLC
Bored?   Confused?



ElementalSource, LLC
Okay, let’s make a PDF!


 • Multiple ditamaps
 • Bookmap
 • ANT build file
        – DITA-OTsamplesant_sample
 • Batch file
        – Copy startcmd.bat from DITA-OT




ElementalSource, LLC
A couple of quick changes


 • ANT build file:
        – Change FO processor
        – Retain the topic.fo file




ElementalSource, LLC
Create your own customization


 • Copy and rename Customization folder
        – Don’t make changes to the default files!
 • Rename and edit catalog.xml.orig
 • Call your customization from your ANT build file
 • Copy a file into your customization
        – commons-attr.xsl




ElementalSource, LLC
Create your own customization


 • In IntellContfoattrs, rename custom.xsl.orig
        – Rename the one in IntellContfoxsl, too
 • Call your commons-attr.xsl from custom.xsl
        – <xsl:import href="commons-attr.xsl"/>
 • Make small, obvious change to commons-attr.xsl and
   run build to test




ElementalSource, LLC
basic-settings.xsl


 • Copy to your customization




ElementalSource, LLC
Add bookmap metadata to cover


 • Copy root-processing.xsl to your customization
 • Create variables
        – productRev
        – bookNo
 • Copy front-matter_1.0.xsl to your customization
 • Add fo:block elements that contain variables




ElementalSource, LLC
Rearrange info in headers, footers


 • Copy en.xml to your customization
 • Copy static-content.xsl to your customization




ElementalSource, LLC
static-content.xsl


 • insertBodyOddHeader
 • insertBodyEvenHeader
        – Comment out <prodname>, <pagenum>
 • insertBodyOddFooter
 • insertBodyEvenFooter
        – Comment out <heading>
        – Add <prodname>, <version>



ElementalSource, LLC
en.xml


 • <variable id="Body odd footer"/>
        – <param ref-name="prodname"/>&#xA0;<param ref-
          name="version"/><param ref-name="pagenum"/>
 • <variable id="Body even footer"/>
        – <param ref-name="pagenum"/><param ref-
          name="prodname"/>&#xA0;<param ref-name="version"/>




ElementalSource, LLC
Wait!


 • Page numbers are not on the outside in even footers
 • basic-settings.xsl:
        – <xsl:variable name="mirror-page-margins" select="true()"/>




ElementalSource, LLC
Justify footers


 • static-content.xsl:
        – <fo:leader leader-pattern="space"/>
        – Be sure to put in right place!
 • Copy static-content-attr.xsl to your customization
 • Attribute sets odd__footer, even__footer
        – text-align=“justify”
        – text-align-last=“justify”



ElementalSource, LLC
Set up even, odd body pages


 • Copy layout-masters.xsl to your customization
        – Different path in custom.xsl
 • Copy layout-masters-attr.xsl to your customization
 • region-body.odd, region-body.even:
        – <xsl:attribute name="background-
          color">#ffffc0</xsl:attribute>
 • region.before, region.after:
        – <xsl:attribute name="background-
          color">#ffc0ff</xsl:attribute>

ElementalSource, LLC
Change inside, outside margins


 • basic-settings.xsl
        – page-margin-inside
        – page-margin-outside




ElementalSource, LLC
Align footers with margins


 • static-content-attr.xsl
        – odd__footer
               • start-indent ($page-margin-inside)
               • end-indent ($page-margin-outside)
        – even__footer
               • start-indent ($page-margin-outside)
               • end-indent ($page-margin-inside)




ElementalSource, LLC
Why are *all* the pages…


 …yellow and pink, not just body pages?

 • By default, all page types call region-body.odd and
   region-body.even
 • You can change this
        – Add new attribute sets for each page type




ElementalSource, LLC
Restart page numbering


 • Copy commons.xsl to your customization
 • startPageNumbering template:
        – Comment out xsl:if
 • processTopicAppendix template:
        – Add <xsl:call-template name="startPageNumbering"/>
        – (It’s missing for appendix)




ElementalSource, LLC
Add an image to the title page


 • Background image
        – Can also add within flow
 • layout-masters.xsl:
        – Change front-matter-first to use region-
          body__frontmatter.first
 • layout-masters-attr.xsl:
        – Create region-body__frontmatter.first




ElementalSource, LLC
Change fonts


 •    Copy font-mappings.xml to your customization
 •    Uncomment entry in catalog
 •    Add Verdana to “Sans”
 •    Add Palatino to “Serif”
 •    Processor-dependent:
        – XEP: edit xep.xml
        – FOP: edit fop.xconf
        – AH: edit font-config.xml

ElementalSource, LLC
Format TOC levels


 • Copy toc.xsl and toc-attr.xsl to your customization
 • Copy font-weight attribute
        – Add different colors for levels
        – Useful model for any level-based attribute




ElementalSource, LLC
TOC attribute set interaction


 • __toc__topic__content is overwritten by
        – __toc__chapter__content
        – __toc__appendix__content
        – __toc__part__content
  when processing bookmap
 • Many more examples




ElementalSource, LLC
Understanding indent formula


 • concat($side-col-width, ' + (', string($level - 1), ' * ',
   $toc.toc-indent, ') + ', $toc.text-indent)
        – 25pt + (0 * 14pt) + 30pt = 55pt
        – 25pt + (1 * 14pt) + 30pt = 69pt
        – 25pt + (2 * 14pt) + 30pt = 83pt
 • To play with the formula, adjust values for
        – toc.toc-indent
        – toc.text-indent


ElementalSource, LLC
Include +/- levels in TOC


 • Default is 4
 • Controlled by tocMaximumLevel
        – Defined in topic2fo.xsl, topic2fo_1.0.xsl
        – You can hardcode in your customization
 • toc.xsl:
        – <xsl:if test="$topicLevel &lt; $tocMaximumLevel">
        – <xsl:if test="$topicLevel &lt; 3">



ElementalSource, LLC
Remove the mini-TOC


 • ANT build file:
        – <property name="args.chapter.layout" value="BASIC"/>




ElementalSource, LLC
Format index page numbers


 •    Copy index-attr.xsl, index.xsl to your customization
 •    Find index-page-citation-list (in index.xsl)
 •    Put whole xsl:if inside <fo:inline>
 •    Call attribute set __index__page__link
 •    Add attributes to __index__page__link (index-attr.xsl)




ElementalSource, LLC
Omit top-level index page #s


• In index.xsl:
<xsl:when test="opentopic-index:index.entry">
   <!--<xsl:for-each select="child::opentopic-index:refID[last()]">
      <fo:inline index-key="{@value}"/>
   </xsl:for-each>-->
</xsl:when>
<xsl:otherwise>
...

• This is a complete kludge but the list is silent…any better
  ideas?


ElementalSource, LLC
Dynamically scale images


 • “Create a chart note”
        – Image is way too big
 • commons-attr.xsl
        – “image” attribute set:
        <xsl:attribute name="content-width">scale-to-
          fit</xsl:attribute>
        <xsl:attribute name="content-height">100%</xsl:attribute>
        <xsl:attribute name="width">100%</xsl:attribute>
        <xsl:attribute name="scaling">uniform</xsl:attribute>

 • Watch out for width-height ratios!

ElementalSource, LLC
Why didn’t I…


 …Talk more about how to format specific elements?

 • Because that’s the easiest thing to do!
        – Once you find the correct attribute set, it’s a matter of adding
          a new attribute or changing the value of an existing one.




ElementalSource, LLC
Frame-FO crosswalk

                       1. (attribute set name)
                       2. text-indent
                       3. margin-left
                       4. margin-right
                       5. text-align
                       6. margin-top/
                          space-above
                       7. margin-bottom/
                          space-below
                       8. line-height
                       9. line-height-shift-
                          adjustment

ElementalSource, LLC
Frame-FO crosswalk

                       1.   font-family
                       2.   font-size
                       3.   font-style
                       4.   font-weight
                       5.   text-transform
                       6.   color
                       7.   letter-spacing
                       8.   font-stretch
                       9.   xml:lang

ElementalSource, LLC
Frame-FO crosswalk

                       10. text-decoration
                       11. text-decoration
                       12. text-decoration
                       13. baseline-shift
                       14. font-variant




ElementalSource, LLC
Frame-FO crosswalk

                       1. break-before;
                          page-break-before
                       2. keep-with-next.within-
                          page/keep-together
                       3. keep-with-
                          previous.within-page/
                          keep-together
                       4. orphans, widows
                       5. span
                       6. fo:float*
                       7. relative-align
ElementalSource, LLC
Frame-FO crosswalk

                       1. hyphenation-ladder-
                          count
                       2. hyphenation-remain-
                          character-count
                       3. hyphenation-push-
                          character-count
                       4. hyphenate;
                          hyphenation-keep
                       5. word-spacing
                       6. border-top*
                       7. border-bottom*
ElementalSource, LLC
Other resources


 • Jarno Elovirta's web-based PDF plug-in generator:
   http://dita-generator.appspot.com/pdf-plugin/

 • Patrick Quinlan's (Ditanauts.org) mypdf plug-in:
   http://sourceforge.net/p/mypdf/home/Home/

 • Suite Solutions’ DITA-OT webinars:
   http://www.suite-sol.com

 • Custom PDFs from the DITA Open Toolkit, Leigh White
   XML Press, 2012
ElementalSource, LLC
Contact me




                                     Leigh White
                             ElementalSource, LLC

                       elementalsource@gmail.com
                                     678.467.7706



ElementalSource, LLC

Contenu connexe

En vedette

Fahrzeugklinik baut Werkstattkette mit Beteiligungskapital aus
Fahrzeugklinik baut Werkstattkette mit Beteiligungskapital ausFahrzeugklinik baut Werkstattkette mit Beteiligungskapital aus
Fahrzeugklinik baut Werkstattkette mit Beteiligungskapital ausfahrzeugklinik GmbH
 
Are Clouds a Game Change? Business says Yes; IT says No!
Are Clouds a Game Change? Business says Yes; IT says No! Are Clouds a Game Change? Business says Yes; IT says No!
Are Clouds a Game Change? Business says Yes; IT says No! Capgemini
 
InP Light Emitting Diodes
InP Light Emitting DiodesInP Light Emitting Diodes
InP Light Emitting Diodesrajvkk
 
Herausforderungen Neuer Medien in der Lehre
Herausforderungen Neuer Medien in der LehreHerausforderungen Neuer Medien in der Lehre
Herausforderungen Neuer Medien in der LehreJohannes Dorfinger
 
Plan social media para un blog
Plan social media para un blogPlan social media para un blog
Plan social media para un blogLluís Raga
 
Short introduction at Informatio Scientifica & Informatio Medicata 2014
Short introduction at Informatio Scientifica & Informatio Medicata 2014Short introduction at Informatio Scientifica & Informatio Medicata 2014
Short introduction at Informatio Scientifica & Informatio Medicata 2014Peter Bencsik
 
Articles and Reviews for March 8, 2012
Articles and Reviews for March 8, 2012Articles and Reviews for March 8, 2012
Articles and Reviews for March 8, 2012levelquilt1692
 
Curso certificado de social media strategist
Curso certificado de social media strategistCurso certificado de social media strategist
Curso certificado de social media strategistJosep Claret
 
Seminario de investigacion - plataformas de desarrollo del borde costero - ca...
Seminario de investigacion - plataformas de desarrollo del borde costero - ca...Seminario de investigacion - plataformas de desarrollo del borde costero - ca...
Seminario de investigacion - plataformas de desarrollo del borde costero - ca...Diego Garib Pavez
 
Autobiografía alvarez felipe
Autobiografía alvarez felipeAutobiografía alvarez felipe
Autobiografía alvarez felipefelipeecheverrria
 

En vedette (16)

Act. 1 unidad 2 yannine adriana martínez valle lao
Act. 1 unidad 2 yannine adriana martínez valle laoAct. 1 unidad 2 yannine adriana martínez valle lao
Act. 1 unidad 2 yannine adriana martínez valle lao
 
Anúncios 24 12 pdf
Anúncios 24 12 pdfAnúncios 24 12 pdf
Anúncios 24 12 pdf
 
Fahrzeugklinik baut Werkstattkette mit Beteiligungskapital aus
Fahrzeugklinik baut Werkstattkette mit Beteiligungskapital ausFahrzeugklinik baut Werkstattkette mit Beteiligungskapital aus
Fahrzeugklinik baut Werkstattkette mit Beteiligungskapital aus
 
Are Clouds a Game Change? Business says Yes; IT says No!
Are Clouds a Game Change? Business says Yes; IT says No! Are Clouds a Game Change? Business says Yes; IT says No!
Are Clouds a Game Change? Business says Yes; IT says No!
 
CV
CVCV
CV
 
InP Light Emitting Diodes
InP Light Emitting DiodesInP Light Emitting Diodes
InP Light Emitting Diodes
 
Herausforderungen Neuer Medien in der Lehre
Herausforderungen Neuer Medien in der LehreHerausforderungen Neuer Medien in der Lehre
Herausforderungen Neuer Medien in der Lehre
 
Apasionada
ApasionadaApasionada
Apasionada
 
Libros de texto 2012 2013
Libros de texto 2012 2013Libros de texto 2012 2013
Libros de texto 2012 2013
 
Plan social media para un blog
Plan social media para un blogPlan social media para un blog
Plan social media para un blog
 
Short introduction at Informatio Scientifica & Informatio Medicata 2014
Short introduction at Informatio Scientifica & Informatio Medicata 2014Short introduction at Informatio Scientifica & Informatio Medicata 2014
Short introduction at Informatio Scientifica & Informatio Medicata 2014
 
Articles and Reviews for March 8, 2012
Articles and Reviews for March 8, 2012Articles and Reviews for March 8, 2012
Articles and Reviews for March 8, 2012
 
Curso certificado de social media strategist
Curso certificado de social media strategistCurso certificado de social media strategist
Curso certificado de social media strategist
 
Renungan tentang waktu
Renungan tentang waktuRenungan tentang waktu
Renungan tentang waktu
 
Seminario de investigacion - plataformas de desarrollo del borde costero - ca...
Seminario de investigacion - plataformas de desarrollo del borde costero - ca...Seminario de investigacion - plataformas de desarrollo del borde costero - ca...
Seminario de investigacion - plataformas de desarrollo del borde costero - ca...
 
Autobiografía alvarez felipe
Autobiografía alvarez felipeAutobiografía alvarez felipe
Autobiografía alvarez felipe
 

Similaire à Custom PDFs from the DITA OT

Getting Started With Xsl Templates
Getting Started With Xsl TemplatesGetting Started With Xsl Templates
Getting Started With Xsl TemplatesWill Trillich
 
Building Content Types with Dexterity
Building Content Types with DexterityBuilding Content Types with Dexterity
Building Content Types with DexterityDavid Glick
 
24221030 Enhance Oracle Sshr With Advanced Personalizations And Oa Fwk Extens...
24221030 Enhance Oracle Sshr With Advanced Personalizations And Oa Fwk Extens...24221030 Enhance Oracle Sshr With Advanced Personalizations And Oa Fwk Extens...
24221030 Enhance Oracle Sshr With Advanced Personalizations And Oa Fwk Extens...Hossam El-Faxe
 
Solr Application Development Tutorial
Solr Application Development TutorialSolr Application Development Tutorial
Solr Application Development TutorialErik Hatcher
 
Information Retrieval - Data Science Bootcamp
Information Retrieval - Data Science BootcampInformation Retrieval - Data Science Bootcamp
Information Retrieval - Data Science BootcampKais Hassan, PhD
 
07 Advanced RTF Template Techniques.doc
07 Advanced RTF Template Techniques.doc07 Advanced RTF Template Techniques.doc
07 Advanced RTF Template Techniques.docMaqsood Joyo
 
20120606 Lazy Programmers Write Self-Modifying Code /or/ Dealing with XML Ord...
20120606 Lazy Programmers Write Self-Modifying Code /or/ Dealing with XML Ord...20120606 Lazy Programmers Write Self-Modifying Code /or/ Dealing with XML Ord...
20120606 Lazy Programmers Write Self-Modifying Code /or/ Dealing with XML Ord...David Horvath
 
Vibe Custom Development
Vibe Custom DevelopmentVibe Custom Development
Vibe Custom DevelopmentGWAVA
 
Solr Recipes Workshop
Solr Recipes WorkshopSolr Recipes Workshop
Solr Recipes WorkshopErik Hatcher
 
Creating Custom Templates for Joomla! 2.5
Creating Custom Templates for Joomla! 2.5Creating Custom Templates for Joomla! 2.5
Creating Custom Templates for Joomla! 2.5Don Cranford
 
Upgrading PDF Plugins to DITA_DITA-OT Day 2016
Upgrading PDF Plugins to DITA_DITA-OT Day 2016Upgrading PDF Plugins to DITA_DITA-OT Day 2016
Upgrading PDF Plugins to DITA_DITA-OT Day 2016IXIASOFT
 
Puppet for Everybody: Federated and Hierarchical Puppet Enterprise
Puppet for Everybody: Federated and Hierarchical Puppet EnterprisePuppet for Everybody: Federated and Hierarchical Puppet Enterprise
Puppet for Everybody: Federated and Hierarchical Puppet EnterprisecbowlesUT
 

Similaire à Custom PDFs from the DITA OT (20)

Getting Started With Xsl Templates
Getting Started With Xsl TemplatesGetting Started With Xsl Templates
Getting Started With Xsl Templates
 
Building Content Types with Dexterity
Building Content Types with DexterityBuilding Content Types with Dexterity
Building Content Types with Dexterity
 
24221030 Enhance Oracle Sshr With Advanced Personalizations And Oa Fwk Extens...
24221030 Enhance Oracle Sshr With Advanced Personalizations And Oa Fwk Extens...24221030 Enhance Oracle Sshr With Advanced Personalizations And Oa Fwk Extens...
24221030 Enhance Oracle Sshr With Advanced Personalizations And Oa Fwk Extens...
 
Solr Application Development Tutorial
Solr Application Development TutorialSolr Application Development Tutorial
Solr Application Development Tutorial
 
Information Retrieval - Data Science Bootcamp
Information Retrieval - Data Science BootcampInformation Retrieval - Data Science Bootcamp
Information Retrieval - Data Science Bootcamp
 
Xml
XmlXml
Xml
 
07 Advanced RTF Template Techniques.doc
07 Advanced RTF Template Techniques.doc07 Advanced RTF Template Techniques.doc
07 Advanced RTF Template Techniques.doc
 
20120606 Lazy Programmers Write Self-Modifying Code /or/ Dealing with XML Ord...
20120606 Lazy Programmers Write Self-Modifying Code /or/ Dealing with XML Ord...20120606 Lazy Programmers Write Self-Modifying Code /or/ Dealing with XML Ord...
20120606 Lazy Programmers Write Self-Modifying Code /or/ Dealing with XML Ord...
 
23xml
23xml23xml
23xml
 
Vibe Custom Development
Vibe Custom DevelopmentVibe Custom Development
Vibe Custom Development
 
Solr Recipes Workshop
Solr Recipes WorkshopSolr Recipes Workshop
Solr Recipes Workshop
 
Creating Custom Templates for Joomla! 2.5
Creating Custom Templates for Joomla! 2.5Creating Custom Templates for Joomla! 2.5
Creating Custom Templates for Joomla! 2.5
 
Solr Masterclass Bangkok, June 2014
Solr Masterclass Bangkok, June 2014Solr Masterclass Bangkok, June 2014
Solr Masterclass Bangkok, June 2014
 
XML
XMLXML
XML
 
The CoFX Data Model
The CoFX Data ModelThe CoFX Data Model
The CoFX Data Model
 
Upgrading PDF Plugins to DITA_DITA-OT Day 2016
Upgrading PDF Plugins to DITA_DITA-OT Day 2016Upgrading PDF Plugins to DITA_DITA-OT Day 2016
Upgrading PDF Plugins to DITA_DITA-OT Day 2016
 
1 xml fundamentals
1 xml fundamentals1 xml fundamentals
1 xml fundamentals
 
Introduce to XML
Introduce to XMLIntroduce to XML
Introduce to XML
 
Puppet for Everybody: Federated and Hierarchical Puppet Enterprise
Puppet for Everybody: Federated and Hierarchical Puppet EnterprisePuppet for Everybody: Federated and Hierarchical Puppet Enterprise
Puppet for Everybody: Federated and Hierarchical Puppet Enterprise
 
Apache solr
Apache solrApache solr
Apache solr
 

Plus de Leigh White

DITA 1.3 Keyscopes
DITA 1.3 KeyscopesDITA 1.3 Keyscopes
DITA 1.3 KeyscopesLeigh White
 
The Content Revolution: Managing the Move to a CCMS
The Content Revolution: Managing the Move to a CCMSThe Content Revolution: Managing the Move to a CCMS
The Content Revolution: Managing the Move to a CCMSLeigh White
 
The Elusive Promise of Reuse
The Elusive Promise of ReuseThe Elusive Promise of Reuse
The Elusive Promise of ReuseLeigh White
 
To CMS or Not to CMS?
To CMS or Not to CMS?To CMS or Not to CMS?
To CMS or Not to CMS?Leigh White
 
Making the Mental Shift to Topic-Based Authoring and a CMS
Making the Mental Shift to Topic-Based Authoring and a CMSMaking the Mental Shift to Topic-Based Authoring and a CMS
Making the Mental Shift to Topic-Based Authoring and a CMSLeigh White
 
Information Architecture Explained
Information Architecture ExplainedInformation Architecture Explained
Information Architecture ExplainedLeigh White
 
Estimating time-tracking
Estimating time-trackingEstimating time-tracking
Estimating time-trackingLeigh White
 

Plus de Leigh White (8)

DITA 1.3 Keyscopes
DITA 1.3 KeyscopesDITA 1.3 Keyscopes
DITA 1.3 Keyscopes
 
The Content Revolution: Managing the Move to a CCMS
The Content Revolution: Managing the Move to a CCMSThe Content Revolution: Managing the Move to a CCMS
The Content Revolution: Managing the Move to a CCMS
 
The Elusive Promise of Reuse
The Elusive Promise of ReuseThe Elusive Promise of Reuse
The Elusive Promise of Reuse
 
To CMS or Not to CMS?
To CMS or Not to CMS?To CMS or Not to CMS?
To CMS or Not to CMS?
 
Making the Mental Shift to Topic-Based Authoring and a CMS
Making the Mental Shift to Topic-Based Authoring and a CMSMaking the Mental Shift to Topic-Based Authoring and a CMS
Making the Mental Shift to Topic-Based Authoring and a CMS
 
Information Architecture Explained
Information Architecture ExplainedInformation Architecture Explained
Information Architecture Explained
 
Taxonomy
TaxonomyTaxonomy
Taxonomy
 
Estimating time-tracking
Estimating time-trackingEstimating time-tracking
Estimating time-tracking
 

Dernier

Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 

Dernier (20)

Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 

Custom PDFs from the DITA OT

  • 1. Customizing PDF output from the DITA Open Toolkit Leigh White ElementalSource, LLC
  • 2. Me, me, me • Background: English, Theoretical Linguistics • NOT a programmer or stylesheet developer • 20+ years as a content creator ElementalSource, LLC
  • 3. Lower your standards? • That depends… – Are your standards based on…non-standards? • A tweak here, a tweak there, whatever “looks right” • That is not a standard! • A standard is “an approved model” – Predictable and prescriptive • PDF processing via the OT is absolutely based on standards – If you can’t capture your “tweak” with a context-based rule, it’s not predictable or prescriptive—drop it! ElementalSource, LLC
  • 4. Ask yourself… …which is more important: – perfect pages – more time to spend creating quality content ElementalSource, LLC
  • 5. How does the OT make PDFs? • Uses the FO plug-in • A collection of stylesheets, variables files, build files, etc. that transform DITA into XSL:FO and then send it to an FO processor • You never see an actual page until the PDF is done – This is a COMPLETE mind freak for some people – And a godsent miracle for others ElementalSource, LLC
  • 6. FO plug-in • Originally developed to fill in the “hardcopy” gap • Currently maintained by Suite Solutions • Several folks working on improvements or complete re-writes • It ain’t pretty but it works ElementalSource, LLC
  • 8. Quick tour of the FO plug-in • DITA-OTdemofo: ElementalSource, LLC
  • 9. The cfg folder • DITA-OTdemofocfg: Attribute sets to Images associated control with the appearance of customization elements Stylesheets to control Language-specific processing and variables for behavior of “boilerplate” text; elements header/footer definitions; note image paths ElementalSource, LLC
  • 11. Attribute sets • Grouped by element “type” (lists, links, tables, etc.) or domain (ui, pr, etc.) • Everything else is in commons-attr.xsl ElementalSource, LLC
  • 12. Attribute sets • Expect to see the attributes in the default sets • If you customize & remove attributes, OT “fills them back in” from the default ElementalSource, LLC
  • 13. Attribute sets • Can call other attribute sets: ElementalSource, LLC
  • 14. Attribute sets • Called by the stylesheets in DITA-OTdemofoxsl • Use the attribute set name to find the xsl template OR use the xsl template to find the attribute set ElementalSource, LLC
  • 15. Attribute sets • Some files are specific to FO processors: – _axf: Antenna House – _xep: XEP – _fop: Apache FOP ElementalSource, LLC
  • 16. basic-settings.xsl • Variables that define: – page dimensions – margins – default font size – default line height • Use these variables instead of fixed values in attribute sets and layout-masters • Add more as needed for greater uniformity ElementalSource, LLC
  • 17. XSL • Lots of these but many you probably won’t touch • Grouped by element “type” (lists, links, tables, etc.) or domain (ui, pr, etc.) – Names match the attribute set files • Everything else is in commons.xsl – Kitchen sink ElementalSource, LLC
  • 18. XSL • Some files specific to FO processors: – _axf: Antenna House – _xep: XEP – _fop: Apache FOP ElementalSource, LLC
  • 19. _1.0 files • Sometimes replace original file: – bookmarks_1.0.xsl – front-matter_1.0.xsl • Sometimes supplement original file: – commons_1.0.xsl – index_1.0.xsl – table_1.0.xsl – toc_1.0.xsl ElementalSource, LLC
  • 20. root-processing.xsl • Creates the “shell” for your FO file • Calls other templates for frontmatter, TOC, index, etc. • Creates variables from map metadata that are available throughout the build in headers, footers, cover pages, etc. ElementalSource, LLC
  • 21. Bored? Confused? ElementalSource, LLC
  • 22. Okay, let’s make a PDF! • Multiple ditamaps • Bookmap • ANT build file – DITA-OTsamplesant_sample • Batch file – Copy startcmd.bat from DITA-OT ElementalSource, LLC
  • 23. A couple of quick changes • ANT build file: – Change FO processor – Retain the topic.fo file ElementalSource, LLC
  • 24. Create your own customization • Copy and rename Customization folder – Don’t make changes to the default files! • Rename and edit catalog.xml.orig • Call your customization from your ANT build file • Copy a file into your customization – commons-attr.xsl ElementalSource, LLC
  • 25. Create your own customization • In IntellContfoattrs, rename custom.xsl.orig – Rename the one in IntellContfoxsl, too • Call your commons-attr.xsl from custom.xsl – <xsl:import href="commons-attr.xsl"/> • Make small, obvious change to commons-attr.xsl and run build to test ElementalSource, LLC
  • 26. basic-settings.xsl • Copy to your customization ElementalSource, LLC
  • 27. Add bookmap metadata to cover • Copy root-processing.xsl to your customization • Create variables – productRev – bookNo • Copy front-matter_1.0.xsl to your customization • Add fo:block elements that contain variables ElementalSource, LLC
  • 28. Rearrange info in headers, footers • Copy en.xml to your customization • Copy static-content.xsl to your customization ElementalSource, LLC
  • 29. static-content.xsl • insertBodyOddHeader • insertBodyEvenHeader – Comment out <prodname>, <pagenum> • insertBodyOddFooter • insertBodyEvenFooter – Comment out <heading> – Add <prodname>, <version> ElementalSource, LLC
  • 30. en.xml • <variable id="Body odd footer"/> – <param ref-name="prodname"/>&#xA0;<param ref- name="version"/><param ref-name="pagenum"/> • <variable id="Body even footer"/> – <param ref-name="pagenum"/><param ref- name="prodname"/>&#xA0;<param ref-name="version"/> ElementalSource, LLC
  • 31. Wait! • Page numbers are not on the outside in even footers • basic-settings.xsl: – <xsl:variable name="mirror-page-margins" select="true()"/> ElementalSource, LLC
  • 32. Justify footers • static-content.xsl: – <fo:leader leader-pattern="space"/> – Be sure to put in right place! • Copy static-content-attr.xsl to your customization • Attribute sets odd__footer, even__footer – text-align=“justify” – text-align-last=“justify” ElementalSource, LLC
  • 33. Set up even, odd body pages • Copy layout-masters.xsl to your customization – Different path in custom.xsl • Copy layout-masters-attr.xsl to your customization • region-body.odd, region-body.even: – <xsl:attribute name="background- color">#ffffc0</xsl:attribute> • region.before, region.after: – <xsl:attribute name="background- color">#ffc0ff</xsl:attribute> ElementalSource, LLC
  • 34. Change inside, outside margins • basic-settings.xsl – page-margin-inside – page-margin-outside ElementalSource, LLC
  • 35. Align footers with margins • static-content-attr.xsl – odd__footer • start-indent ($page-margin-inside) • end-indent ($page-margin-outside) – even__footer • start-indent ($page-margin-outside) • end-indent ($page-margin-inside) ElementalSource, LLC
  • 36. Why are *all* the pages… …yellow and pink, not just body pages? • By default, all page types call region-body.odd and region-body.even • You can change this – Add new attribute sets for each page type ElementalSource, LLC
  • 37. Restart page numbering • Copy commons.xsl to your customization • startPageNumbering template: – Comment out xsl:if • processTopicAppendix template: – Add <xsl:call-template name="startPageNumbering"/> – (It’s missing for appendix) ElementalSource, LLC
  • 38. Add an image to the title page • Background image – Can also add within flow • layout-masters.xsl: – Change front-matter-first to use region- body__frontmatter.first • layout-masters-attr.xsl: – Create region-body__frontmatter.first ElementalSource, LLC
  • 39. Change fonts • Copy font-mappings.xml to your customization • Uncomment entry in catalog • Add Verdana to “Sans” • Add Palatino to “Serif” • Processor-dependent: – XEP: edit xep.xml – FOP: edit fop.xconf – AH: edit font-config.xml ElementalSource, LLC
  • 40. Format TOC levels • Copy toc.xsl and toc-attr.xsl to your customization • Copy font-weight attribute – Add different colors for levels – Useful model for any level-based attribute ElementalSource, LLC
  • 41. TOC attribute set interaction • __toc__topic__content is overwritten by – __toc__chapter__content – __toc__appendix__content – __toc__part__content when processing bookmap • Many more examples ElementalSource, LLC
  • 42. Understanding indent formula • concat($side-col-width, ' + (', string($level - 1), ' * ', $toc.toc-indent, ') + ', $toc.text-indent) – 25pt + (0 * 14pt) + 30pt = 55pt – 25pt + (1 * 14pt) + 30pt = 69pt – 25pt + (2 * 14pt) + 30pt = 83pt • To play with the formula, adjust values for – toc.toc-indent – toc.text-indent ElementalSource, LLC
  • 43. Include +/- levels in TOC • Default is 4 • Controlled by tocMaximumLevel – Defined in topic2fo.xsl, topic2fo_1.0.xsl – You can hardcode in your customization • toc.xsl: – <xsl:if test="$topicLevel &lt; $tocMaximumLevel"> – <xsl:if test="$topicLevel &lt; 3"> ElementalSource, LLC
  • 44. Remove the mini-TOC • ANT build file: – <property name="args.chapter.layout" value="BASIC"/> ElementalSource, LLC
  • 45. Format index page numbers • Copy index-attr.xsl, index.xsl to your customization • Find index-page-citation-list (in index.xsl) • Put whole xsl:if inside <fo:inline> • Call attribute set __index__page__link • Add attributes to __index__page__link (index-attr.xsl) ElementalSource, LLC
  • 46. Omit top-level index page #s • In index.xsl: <xsl:when test="opentopic-index:index.entry"> <!--<xsl:for-each select="child::opentopic-index:refID[last()]"> <fo:inline index-key="{@value}"/> </xsl:for-each>--> </xsl:when> <xsl:otherwise> ... • This is a complete kludge but the list is silent…any better ideas? ElementalSource, LLC
  • 47. Dynamically scale images • “Create a chart note” – Image is way too big • commons-attr.xsl – “image” attribute set: <xsl:attribute name="content-width">scale-to- fit</xsl:attribute> <xsl:attribute name="content-height">100%</xsl:attribute> <xsl:attribute name="width">100%</xsl:attribute> <xsl:attribute name="scaling">uniform</xsl:attribute> • Watch out for width-height ratios! ElementalSource, LLC
  • 48. Why didn’t I… …Talk more about how to format specific elements? • Because that’s the easiest thing to do! – Once you find the correct attribute set, it’s a matter of adding a new attribute or changing the value of an existing one. ElementalSource, LLC
  • 49. Frame-FO crosswalk 1. (attribute set name) 2. text-indent 3. margin-left 4. margin-right 5. text-align 6. margin-top/ space-above 7. margin-bottom/ space-below 8. line-height 9. line-height-shift- adjustment ElementalSource, LLC
  • 50. Frame-FO crosswalk 1. font-family 2. font-size 3. font-style 4. font-weight 5. text-transform 6. color 7. letter-spacing 8. font-stretch 9. xml:lang ElementalSource, LLC
  • 51. Frame-FO crosswalk 10. text-decoration 11. text-decoration 12. text-decoration 13. baseline-shift 14. font-variant ElementalSource, LLC
  • 52. Frame-FO crosswalk 1. break-before; page-break-before 2. keep-with-next.within- page/keep-together 3. keep-with- previous.within-page/ keep-together 4. orphans, widows 5. span 6. fo:float* 7. relative-align ElementalSource, LLC
  • 53. Frame-FO crosswalk 1. hyphenation-ladder- count 2. hyphenation-remain- character-count 3. hyphenation-push- character-count 4. hyphenate; hyphenation-keep 5. word-spacing 6. border-top* 7. border-bottom* ElementalSource, LLC
  • 54. Other resources • Jarno Elovirta's web-based PDF plug-in generator: http://dita-generator.appspot.com/pdf-plugin/ • Patrick Quinlan's (Ditanauts.org) mypdf plug-in: http://sourceforge.net/p/mypdf/home/Home/ • Suite Solutions’ DITA-OT webinars: http://www.suite-sol.com • Custom PDFs from the DITA Open Toolkit, Leigh White XML Press, 2012 ElementalSource, LLC
  • 55. Contact me Leigh White ElementalSource, LLC elementalsource@gmail.com 678.467.7706 ElementalSource, LLC