O’Reilly’s Single-Source Workflow 
(2006-2013): 
AsciiDoc 
DocBook XML 
asciidoc.py 
DocBook XSL  
EPUB Stylesheets  
+ Custom CSS 
EPUB 
DocBook XSL  
HTML5  
Stylesheets 
HTML5 
Print PDF 
Web PDF 
AntennaHouse + 
Print CSS3 
AntennaHouse + 
Web CSS3 
EPUB 
DocBook XSL  
EPUB Stylesheets  
Custom XSL for 
EPUB postprocessing 
+ KF8/Mobi7 CSS 
Mobi-ready EPUB 
Kindlegen 
Mobi (KF8) 
Source Content 
Intermediate Output 
Final Output For Sale 
(optional; can start with DocBook) 
Pdf export bookmarks - add, remove, update PDF bookmarks in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Your C# Project with Rapid PDF Internal Navigation Via Bookmark and Outline
export excel to pdf with bookmarks; creating bookmarks in pdf files
Pdf export bookmarks - VB.NET PDF bookmark library: add, remove, update PDF bookmarks in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Your VB.NET Project with Rapid PDF Internal Navigation Via Bookmark and Outline
how to add bookmarks to a pdf; add bookmarks to pdf reader
Three Slowly 
Dawning 
Realizations About 
Our Workflow 
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
document file. Remove bookmarks, annotations, watermark, page labels and article threads from PDF while compressing. Also a preview
pdf bookmark; bookmark template pdf
C# PDF File Split Library: Split, seperate PDF into multiple files
Split PDF file by top level bookmarks. The following C# codes explain how to split a PDF file into multiple ones by PDF bookmarks or outlines.
convert word to pdf with bookmarks; bookmarks pdf
Realization #1: 
Our toolchain is 
rather heavyweight, 
complex 
VB.NET PDF File Split Library: Split, seperate PDF into multiple
Demo Code in VB.NET. The following VB.NET codes explain how to split a PDF file into multiple ones by PDF bookmarks or outlines.
auto bookmark pdf; creating bookmarks in pdf documents
C# PDF File Compress Library: Compress reduce PDF size in C#.net
NET framework. Remove bookmarks, annotations, watermark, page labels and article threads from PDF while compressing. C# class demo
adding bookmarks to pdf; export pdf bookmarks
PDF* Toolchain Stats 
The DocBook project XHTML5 stylesheets** contain: 
•  33,707
lines of HTML-generation code… 
•  …which rely on 
8,346
lines of common dependencies 
Or, in terms of functions, they contain: 
•  1,857
<xsl:template>s… 
•  …which rely on 
272
common dependency <xsl:template>s 
* Separate code base for EPUB/Mobi!
** docbook-epub3-addon-b3!
C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net
Export PDF images to HTML images. The HTML document file, converted by C#.NET PDF to HTML SDK, preserves all the original anchors, links, bookmarks and font
excel hyperlink to pdf bookmark; bookmark pdf in preview
How to C#: Basic SDK Concept of XDoc.PDF for .NET
document. OutLines. This class describes bookmarks in a PDF document. Copyright © <2000-2016> by <RasterEdge.com>. All Rights Reserved.
bookmarks pdf reader; add bookmarks to pdf preview
When doing 
transforms, 
this complexity is a 
necessary evil, 
emphasis on evil 
VB.NET PDF: Basic SDK Concept of XDoc.PDF
document. OutLines. This class describes bookmarks in a PDF document. Copyright © <2000-2015> by <RasterEdge.com>. All Rights Reserved.
bookmark pdf reader; creating bookmarks in a pdf document
C# Create PDF Library SDK to convert PDF from other file formats
file. Create and save editable PDF with a blank page, bookmarks, links, signatures, etc. Create fillable PDF document with fields.
create bookmarks in pdf from excel; how to add bookmarks to pdf document
Peril of a Transform-
Heavy Workflow: 
Troubleshooting is a real  
$!%#@&* 
An example!  
Let’s say your DocBook source is: 
<div class="chapter">!
<h1>Poodles and Cookies</h1>!
...!
</div>!
And your desired/expected HTML 
output is: 
<chapter>!
<title>Poodles and Cookies</title>!
...!
</chapter>!
But then you run your transform… 
<p class="sect1">!
<h2>Poodles and 
Cookies</h2>!
...!
</p>!
<chapter>!
<title>Poodles 
and Cookies</title>!
...!
</chapter>!
…And you say, “What the $!%#@&*?”  
33,707 
lines of 
code 
What about implementing 
validation to preemptively 
catch errors before running 
the transforms? 
Documents you may be interested
Documents you may be interested