]> Shamusworld >> Repos - ardour-manual/commitdiff
Various improvements in the PDF rendering. More efficient build
authorEd Ward <edwsaintesprit@hotmail.com>
Thu, 1 Aug 2019 11:28:14 +0000 (13:28 +0200)
committerEd Ward <edwsaintesprit@hotmail.com>
Thu, 1 Aug 2019 11:28:14 +0000 (13:28 +0200)
build.py
pdf-template.html
source/css/common.css
source/css/pdf.css
source/css/screen.css

index 75a13f18122c462dcf9ec97e00f242fadca6fa1a..34698537b9c7941469449e69ae253138aa72aa81 100755 (executable)
--- a/build.py
+++ b/build.py
@@ -354,7 +354,7 @@ def BuildOnePageSidebar(fs):
        levelNums = [0]*3
 
        for i in range(len(fs)):
-               # Handle Part/Chapter/subchapter/section/subsection numbering
+               # Handle Part/Chapter/subchapter numbering
                level = fs[i]['level']
                if level < 2:
                        levelNums[2] = 0
@@ -515,22 +515,22 @@ for header in fileStruct:
 
                print(header['title'])
 
-       # Handle TOC scriblings and one-page titles...
-       opl = ''
-       if 'link' in header:
-               opl = ' id="' + header['link'] + '"'
-       else:
-               opl = ' id="' + header['filename'] + '"'
-
+       # Handle TOC scriblings...
        if level == 0:
                toc = toc + '<h2>Part ' + num2roman(levelNums[level]) + ': ' + header['title'] + '</h2>\n';
-               oph = '<h1 class="clear"' + opl +'>Part ' + num2roman(levelNums[level]) + ' - ' + header['title'] + '</h1>\n';
        elif level == 1:
                toc = toc + '\t<p class="chapter">Ch. ' + str(levelNums[level]) + ':&nbsp;&nbsp;<a href="/' + header['filename'] + '/">' + header['title'] + '</a></p>\n'
-               oph = '<h2 class="clear"' + opl +'>' + str(levelNums[level]) + ' - ' + header['title'] + '</h3>\n';
        elif level == 2:
                toc = toc + '\t\t<p class="subchapter"><a href="/' + header['filename'] + '/">' + header['title'] + '</a></p>\n'
-               oph = '<h3 class="clear"' + opl +'>' + str(levelNums[level-1]) + '.' + str(levelNums[level]) + ' - ' + header['title'] + '</h3>\n';
+
+       # Handle one-page and PDF titles...
+       opl = ''
+       if 'link' in header:
+               opl = ' id="' + header['link'] + '"'
+       else:
+               opl = ' id="' + header['filename'] + '"'
+       oph = '<h' + str(level+1) + ' class="clear"' + opl +'>' + header['title'] + '</h' + str(level+1) + '>\n';
+
 
        # Make the 'this thing contains...' stuff
        if HaveChildren(fileStruct, pageNumber):
@@ -680,17 +680,21 @@ if not nopdf:
                print('Generating the PDF...')
 
        # Create the PDF version of the documentation
-       pdfpageFile = open(global_site_dir + 'pdf.html', 'w')
        pdfpage = pdfpage.replace('{% tree %}', opsidebar) # create the TOC
        pdfpage = pdfpage.replace('{{ content }}', '') # cleans up the last spaceholder
        pdfpage = pdfpage.replace('src="/images/', 'src="images/') # makes images links relative
        pdfpage = pdfpage.replace('url(\'/images/', 'url(\'images/') # CSS images links relative
+       # Write it to disk (optional, can be removed)
+       pdfpageFile = open(global_site_dir + 'pdf.html', 'w')
        pdfpageFile.write(pdfpage)
        pdfpageFile.close()
 
+       # Generating the actual PDF with weasyprint (https://weasyprint.org/)
        from weasyprint import HTML
-       doc = HTML(filename = global_site_dir + 'pdf.html')
-       doc.write_pdf(global_site_dir + 'manual.pdf')
+       #from weasyprint.fonts import FontConfiguration
+       #html_font_config = FontConfiguration()
+       doc = HTML(string = pdfpage, base_url = global_site_dir)
+       doc.write_pdf(global_site_dir + 'manual.pdf')#, font_config = html_font_config)
 
 if not quiet:
        print('Processed ' + str(fileCount) + ' files.')
index 18389c8e7f559f985da4023354a21aaea7a19ef2..bd9edd5bca8b833bb4a38188680a4dc502877754 100644 (file)
 <body>
 
        <div class="frontcover">
-
-
-
-       </div>
+               <img src="images/ardour_logo.svg" alt="Ardour logo">
+               <p>The Ardour Manual</p>
+  </div>
 
        <div class="contents">
-               <h1>Table of contents</h1>
+               <h1 id="toc">Table of contents</h1>
 
                {% tree %}
 
index e4716fb5e28ac355bbcf062093800b36b3955a8e..967d65e11af7e09a259e0007171d8c788fbb7d58 100644 (file)
@@ -1,3 +1,17 @@
+@font-face {
+    font-family: 'junge-regular';
+    src: url('junge-regular-webfont.woff') format('woff'),
+         url('junge-regular-webfont.ttf')  format('truetype');
+    font-weight: normal;
+    font-style: normal;
+}
+
+body {
+  font-family: 'junge-regular';
+  font-size: 16px;
+  line-height: 2ex;
+}
+
 kbd {
   display: inline-block;
   min-width: 1em;
index 5429085d52f8ef396f86aadf32a22389cb0a2ddb..c5ae24e3001b5d96eb90925d1ab23137f0d6661d 100644 (file)
@@ -5,26 +5,23 @@
    margin: 1.5cm 1.5cm 1.5cm 1.5cm;
 }
 
-@page :first {
-       size: A4;
-       margin: 1.5cm 1.5cm 1.5cm 1.5cm;
-  background: url("../images/ardour_logo.svg") no-repeat center;
-  background-size: contain;
-}
-
 img {
   max-width: 100%;
 }
 
 div.frontcover {
   page-break-after: always;
+       margin: auto;
+       width: 80%;
+       font-size: 4em;
+       text-align: center;
 }
 
 /* styles for the right hand spread
        Bottom left we display the title of the book, bottom right the page using a CSS
   counter, top right the content of the current chapter
 */
-@page:right {
+@page :right {
    @bottom-left {
        margin: 10pt 0 30pt 0;
        /*border-top: .25pt solid #666;*/
@@ -49,7 +46,7 @@ div.frontcover {
 /* styles for the left hand spread
        Bottom right book title, bottom left current page
 */
-@page:left {
+@page :left {
    @bottom-right {
        margin: 10pt 0 30pt 0;
        /*border-top: .25pt solid #666;*/
@@ -66,7 +63,7 @@ div.frontcover {
 }
 
 /* first page */
-@page:first {
+@page :first {
   @bottom-right {
     content: normal;
     margin: 0;
@@ -78,39 +75,57 @@ div.frontcover {
   }
 }
 
-/* reset chapter and figure counters on the body */
 body {
-       counter-reset: chapternum figurenum;
-       font-family: "Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif;
-       line-height: 1.2;
-       font-size: 9pt;
+       counter-reset: partnum chapternum subchapternum figurenum; /* resets all counters */
+       /*font-family: "Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif;*/
+       font-size: 10pt;
+       line-height: 1.25em;
+
 }
 
-/* get the title of the current chapter - this will be the content of the h1
-reset figure counter as figures start from 1 in each chapter */
 h1 {
-  string-set: doctitle content();
+  string-set: doctitle content(); /* get the title of the current chapter */
   page-break-before: always;
-  counter-reset: figurenum;
-  line-height: 1.3;
-  counter-increment: chapternum;
 }
 
-h1:first-of-type { /* the ToC should not count...*/
+#toc::before { /* the ToC should not count...*/
   content: none;
-  counter-reset: chapternum;
+  counter-reset: partnum;
+  /*counter-increment: partnum -1;*/
+}
+
+h1::before { /* parts */
+  counter-increment: partnum;
+       content: "Part " counter(partnum) " - ";
+}
+
+h2::before {   /* chapter */
+       counter-increment: chapternum;
+       content: "Chapter " counter(chapternum) " - ";
 }
 
-/* increment and display figure counter */
-figcaption:before {
+h3::before {   /* subchapter */
+  counter-increment: subchapternum;
+  content: counter(chapternum) "." counter(subchapternum) " - " ;
+}
+
+figcaption::before {
        counter-increment: figurenum;
-       content: counter(chapternum) "-" counter(figurenum) ". ";
+       content: "Fig. " counter(chapternum) "." counter(figurenum) " - ";
 }
 
+h1 { font-size: 3em; }
+h2 { font-size: 2.25em; counter-reset: subchapternum figurenum; }
+h3 { font-size: 1.75em; }
+h4 { font-size: 1.4em; }
+h5 { font-size: 1.2em; }
+h6 { font-size: 1.1em; }
+
 h1,h2,h3,h4,h5 {
        font-weight: bold;
        page-break-after: avoid;
        page-break-inside:avoid;
+  line-height: 1.25em;
 }
 
 h1+p, h2+p, h3+p {
@@ -154,6 +169,6 @@ a {
 }
 
 /* add page number to cross references */
-a.xref:after {
+a.xref::after {
   content: " (page " target-counter(attr(href, url), page) ")";
 }
index 0d6486fc5adf0b3f9f82428f7cc42f4286f00dfe..bb0f469648a2baa6469292c8f06bd1ee6b21d7e2 100644 (file)
@@ -1,17 +1,3 @@
-@font-face {
-    font-family: 'junge-regular';
-    src: url('junge-regular-webfont.woff2') format('woff2'),
-         url('junge-regular-webfont.woff') format('woff'),
-         url('junge-regular-webfont.ttf')  format('truetype');
-    font-weight: normal;
-    font-style: normal;
-}
-
-body {
-  font-family: 'junge-regular';
-  font-size: 16px;
-  line-height: 2ex;
-}
 
 .clear {
   clear:both;