jeweyjacobs
2 years ago
commit
000bbcef8c
2 changed files with 145 additions and 0 deletions
@ -0,0 +1,33 @@ |
|||||
|
# ATNOFS Documentation contraption |
||||
|
|
||||
|
## Current sketch |
||||
|
|
||||
|
Currently a python script that will downloads all the chapters as listed here: |
||||
|
<https://octomode.vvvvvvaria.org/atnofs-index/pad/> |
||||
|
|
||||
|
Listed as pads, it will download the HTML + CSS of the pages, and then creates PDF out of them with pagedjs-cli. |
||||
|
|
||||
|
It then compiles the full pdf with pypdftk. |
||||
|
|
||||
|
## Or... |
||||
|
|
||||
|
Maybe it should instead make a very long html from the previews? |
||||
|
<https://octomode.vvvvvvaria.org/atnofs-index/preview.html> |
||||
|
In case we'll want page numbers, etc from pagedjs. |
||||
|
|
||||
|
## Requirements |
||||
|
|
||||
|
* apt install python3 |
||||
|
* pip3 install pypdftk |
||||
|
* npm install -g pupeteer |
||||
|
* export NODE_CHROMIUM_REVISION=729994 |
||||
|
node .nvm/versions/node/v18.12.1/lib/node_modules/pagedjs-cli/node_modules/puppeteer/install.js |
||||
|
* npm install -g chromium |
||||
|
* npm install -g pagedjs-cli |
||||
|
## Sandbox |
||||
|
|
||||
|
To be able to use pagedjs-cli, one need to build a chrome-sandbox (...): |
||||
|
chown root:root chrome_sandbox |
||||
|
sudo chmod 4755 chrome_sandbox |
||||
|
sudo cp chrome_sandbox /usr/local/sbin/chrome-devel-sandbox |
||||
|
export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox |
@ -0,0 +1,112 @@ |
|||||
|
#!/usr/bin/python3 |
||||
|
|
||||
|
import requests |
||||
|
import pypdftk |
||||
|
import subprocess |
||||
|
from requests.auth import HTTPBasicAuth |
||||
|
import re |
||||
|
import os |
||||
|
import sys |
||||
|
|
||||
|
NODE = '/home/dickreckard/.nvm/versions/node/v16.13.0/bin/node' |
||||
|
PAGEDJSCLI = '/home/dickreckard/.nvm/versions/node/v16.13.0/bin/pagedjs-cli' |
||||
|
localhost = '/var/www/html/atnofs/' |
||||
|
localurl = 'http://localhost/atnofs/' |
||||
|
|
||||
|
outputname='atnofs-compiled.pdf' |
||||
|
|
||||
|
authu='octomode' |
||||
|
authp='spider' |
||||
|
authvvvvvv = HTTPBasicAuth('octomode', 'spider') |
||||
|
|
||||
|
e2hprocessor='http://totalism.org:7777/glia2?sourceMethod=post&sinkFormat=text/graph/graphviz' |
||||
|
|
||||
|
chapters=[] |
||||
|
outputs=[] |
||||
|
counter=0 |
||||
|
ooooo_insert='' |
||||
|
|
||||
|
indexmd = requests.get('https://pad.vvvvvvaria.org/atnofs-index.md/export/txt').text |
||||
|
|
||||
|
# download the index of all contributions |
||||
|
|
||||
|
with open('index.md','w') as file: |
||||
|
file.write(indexmd) |
||||
|
|
||||
|
|
||||
|
with open('index.md') as file: |
||||
|
for line in file: |
||||
|
|
||||
|
# searches for the chapter links |
||||
|
|
||||
|
x = re.search ('[.*](.*/pad/)',line) |
||||
|
if x: |
||||
|
line=line.split('(')[1].split(')')[-2] |
||||
|
chapters.append(line) |
||||
|
|
||||
|
# searches for ooooo insert |
||||
|
if 'ooooo' in line: |
||||
|
ooooo_insert=line.split('(')[1].split(')')[-2] |
||||
|
|
||||
|
|
||||
|
#then iterates over all chapters to get the pdf versions |
||||
|
for chapter in chapters: |
||||
|
|
||||
|
name=str(counter).zfill(2)+'-'+chapter.split('/')[-3] |
||||
|
if not os.path.exists(localhost+name): |
||||
|
os.makedirs(localhost+name) |
||||
|
pdffile=name+'.pdf' |
||||
|
|
||||
|
if len(sys.argv)>1 and sys.argv[1]=='local': |
||||
|
|
||||
|
if('octomode.vvvvvvaria.org' in chapter): |
||||
|
preview = requests.get(chapter.replace('pad/','preview.html'), auth=authvvvvvv) |
||||
|
style = requests.get(chapter.replace('pad/','stylesheet.css'), auth=authvvvvvv) |
||||
|
else: |
||||
|
preview = requests.get(chapter.replace('pad/','preview.html')) |
||||
|
style = requests.get(chapter.replace('pad/','stylesheet.css')) |
||||
|
|
||||
|
stylefile=localhost+name+'/stylesheet.css' |
||||
|
with open(stylefile, 'w') as file: |
||||
|
file.write(style.text) |
||||
|
|
||||
|
previewfile=localhost+name+'/preview.html' |
||||
|
localpreview=localurl+name+'/preview.html' |
||||
|
|
||||
|
with open(previewfile, 'w') as file: |
||||
|
file.write(preview.text) |
||||
|
|
||||
|
# hacke before octomode is fixed on vvvvaria |
||||
|
with open(previewfile, "r") as f: |
||||
|
contents = f.readlines() |
||||
|
|
||||
|
contents.insert(5, '<link href="stylesheet.css" rel="stylesheet" type="text/css" media="screen">') |
||||
|
|
||||
|
with open(previewfile, "w") as f: |
||||
|
contents = "".join(contents) |
||||
|
f.write(contents) |
||||
|
# end hack |
||||
|
|
||||
|
# this is the pagedjs client version making the pdf out of the localhost version of the html |
||||
|
subprocess.run([NODE, PAGEDJSCLI, localpreview, '-o', pdffile]) |
||||
|
|
||||
|
else: |
||||
|
if('octomode.vvvvvvaria.org' in chapter): |
||||
|
chapter=chapter.replace('://','://'+authu+':'+authp+'@') |
||||
|
preview = chapter.replace('pad/','pagedjs.html') |
||||
|
subprocess.run([NODE, PAGEDJSCLI, preview, '-o', pdffile]) |
||||
|
|
||||
|
outputs.append(pdffile) |
||||
|
|
||||
|
counter+=1 |
||||
|
|
||||
|
if ooooo_insert: |
||||
|
all_graphs = requests.get(ooooo_insert+'/export/txt') |
||||
|
graphs=all_graphs.text.split('[graph]"""') |
||||
|
print(len(graphs)) |
||||
|
|
||||
|
|
||||
|
# compiling all the files in one big pdf! |
||||
|
|
||||
|
output = pypdftk.concat(outputs,out_file=outputname) |
||||
|
|
Loading…
Reference in new issue