Added code to generate PDF
This commit is contained in:
parent
c93b6a57d1
commit
66d28b0c86
72
pdftoc-to-latex
Executable file
72
pdftoc-to-latex
Executable file
@ -0,0 +1,72 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# Script taken from https://gitlab.com/derobert/random-toys/blob/master/pdf/pdftoc-to-latex
|
||||
# Manually adapt for sphinxdoc generated pdf
|
||||
use 5.024;
|
||||
use strict;
|
||||
use warnings qw(all);
|
||||
use IPC::Run3;
|
||||
use LaTeX::Encode;
|
||||
use Encode qw(decode);
|
||||
|
||||
my @levels
|
||||
= qw(chapter section subsection subsubsection paragraph subparagraph);
|
||||
my @counters;
|
||||
|
||||
my ($data_enc, $data);
|
||||
run3 ['pdftk', $ARGV[0], 'dump_data_utf8'], undef, \$data_enc;
|
||||
$data = decode('UTF-8', $data_enc, Encode::FB_CROAK);
|
||||
|
||||
my @latex_bm;
|
||||
|
||||
my $bm;
|
||||
foreach (split(/\n/, $data)) {
|
||||
/^Bookmark/ or next;
|
||||
if (/^BookmarkBegin$/) {
|
||||
add_latex_bm($bm) if $bm;
|
||||
$bm = {};
|
||||
} elsif (/^BookmarkLevel: (\d+)$/a) {
|
||||
++$counters[$1 - 1];
|
||||
$#counters = $1 - 1;
|
||||
$bm->{number} = join(q{.}, @counters);
|
||||
$bm->{level} = $1 - 1;
|
||||
} elsif (/^BookmarkTitle: (.+)$/) {
|
||||
# In Sphinx title include a utf-8 icon of a link, so remove it
|
||||
my $title = substr($1, 0, -1);
|
||||
$bm->{title} = latex_encode($title);
|
||||
} elsif (/^BookmarkPageNumber: (\d+)$/a) {
|
||||
$bm->{page} = $1;
|
||||
} else {
|
||||
die "Unknown Bookmark tag in $_\n";
|
||||
}
|
||||
}
|
||||
add_latex_bm($bm) if $bm;
|
||||
|
||||
print <<LATEX;
|
||||
\\documentclass{report}
|
||||
\\title{Guide de montage Vhéliotech v1.0}
|
||||
\\setcounter{page}{2}
|
||||
\\begin{document}
|
||||
${ \join('', @latex_bm) }
|
||||
\\end{document}
|
||||
LATEX
|
||||
|
||||
exit 0;
|
||||
|
||||
sub add_latex_bm {
|
||||
my $bm = shift;
|
||||
# Don't extract top level title and subtitle with level > 2
|
||||
if ($bm->{level} == 0 || $bm->{level} > 2) {
|
||||
return;
|
||||
}
|
||||
# Make sections become chapters
|
||||
my $level = $levels[$bm->{level} - 1];
|
||||
# Remove the first number because it refers to the root title (ie always 1.X)
|
||||
my $number = substr($bm->{number}, 2);
|
||||
my $title = $bm->{title};
|
||||
my $page = $bm->{page} + 2;
|
||||
|
||||
push @latex_bm, <<LINE;
|
||||
\\contentsline {$level}{\\numberline {$number}$title}{$page}%
|
||||
LINE
|
||||
}
|
@ -57,9 +57,24 @@ class Document:
|
||||
#venv_path = os.getenv('VIRTUAL_ENV')
|
||||
|
||||
cmd = []
|
||||
|
||||
# update source files from git
|
||||
cmd.append(['git', 'pull'])
|
||||
|
||||
# build the HTML version
|
||||
cmd.append(['sphinx-build', '-M', 'html', self.doc_path + "/repo/source", self.doc_path + "/build"])
|
||||
|
||||
# build the PDF version
|
||||
cmd.append(['sphinx-build', '-M', 'weasyprint', self.doc_path + '/repo/source', self.doc_path + '/build'])
|
||||
cmd.append(['weasyprint', self.doc_path + '/build/weasyprint/index.html', self.doc_path + '/build/weasyprint/index.pdf', '-s', self.doc_path + '/repo/source/css/print-theme.css'])
|
||||
cmd.append(['sh', '-c', current_app.config['DATA_ROOT_DIR'] + '/../pdftoc-to-latex "' + self.doc_path + '/build/weasyprint/index.pdf" > "' + self.doc_path + '/build/weasyprint/toc.tex"'])
|
||||
cmd.append(['sh', '-c', 'pdflatex -interaction nonstopmode -output-directory="' + self.doc_path + '/build/weasyprint" "' + self.doc_path + '/build/weasyprint/toc.tex" || echo OK'])
|
||||
cmd.append(['pdftk', 'A=' + self.doc_path + '/build/weasyprint/index.pdf', 'B=' + self.doc_path + '/build/weasyprint/toc.pdf', 'cat', 'A1', 'B', 'A2-end', 'output', self.doc_path + '/build/weasyprint/vheliotech.pdf'])
|
||||
#cmd.append(['rm', self.doc_path + '/build/weasyprint/index.pdf', self.doc_path + '/build/weasyprint/toc.tex', self.doc_path + '/build/weasyprint/toc.pdf', self.doc_path + '/build/weasyprint/GuidedemontageVheliotech.pdf'])
|
||||
|
||||
# Copy the generated PDF file to the HTML directory, so that it is accessible for download by users
|
||||
cmd.append(['cp', self.doc_path + '/build/weasyprint/vheliotech.pdf', self.doc_path + '/build/html/vheliotech.pdf'])
|
||||
|
||||
task = ProcessTask(cmd, cwd = self.doc_path + "/repo")
|
||||
task.start()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user