Browse Source

Ajout de make pdf avec weasyprint

prod
Andréas Livet 2 years ago
parent
commit
89d46fdcc8
  1. 12
      Makefile
  2. 71
      pdftoc-to-latex

12
Makefile

@ -18,3 +18,15 @@ help:
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile %: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
# Default make weasyprint target has a bug so we have to call it manually on the generated index.html file
# After that, extract table of content data from the pdf and generate a .tex file
# Then generate a toc.pdf from the .tex file
# And put them together in a .pdf file
# After all, clean up
pdf: weasyprint
weasyprint build/weasyprint/index.html build/weasyprint/index.pdf -s source/css/print-theme.css
./pdftoc-to-latex build/weasyprint/index.pdf > build/weasyprint/toc.tex
- pdflatex -interaction nonstopmode -output-directory=build/weasyprint build/weasyprint/toc.tex
pdftk A=build/weasyprint/index.pdf B=build/weasyprint/toc.pdf cat A1 B A2-end output build/weasyprint/vheliotech.pdf
rm build/weasyprint/index.pdf build/weasyprint/toc.tex build/weasyprint/toc.pdf build/weasyprint/GuidedemontageVheliotech.pdf

71
pdftoc-to-latex

@ -0,0 +1,71 @@
#!/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}
\\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};
push @latex_bm, <<LINE;
\\contentsline {$level}{\\numberline {$number}$title}{$page}%
LINE
}
Loading…
Cancel
Save