Compare commits

..
6 Commits
3 changed files with 47 additions and 13 deletions

No files matched your search

+21 -3
View File
@@ -1,12 +1,30 @@
# mlwerke2pdf
Python module to convert texts on http://www.mlwerke.de into pdfs
Python module to convert texts on http://www.mlwerke.de or https://www.marxists.org into Portable Document Format files
# Usage
mlwerke2pdf fetches the linked subsites from the given table of contents and concats them to a single pdf
at this point links and linked images in the pdf are not functional as they point to the mlwerke html structure
converting them to pdf internal links would be possible but rather complex
# dependencies
uses python modules requests, BeautifulSoup4, urllib and weasyprint
# Usage as commandline util
python mlwerke2pdf_shutil.py -u URL -o PDF_OUTPUT_PATH [--dry True optional for not writing any files]
use the base / table of contents of a text like https://www.marxists.org/deutsch/archiv/marx-engels/1848/manifest/index.htm as URL
# Usage as Python module
## create MLWerke Object:
mlwerk = mlwerke2pdf.MLWerk(URL)
use the base of a text like http://www.mlwerke.de/me/me04/me04_459.htm as URL
use the base / table of contents of a text like https://www.marxists.org/deutsch/archiv/marx-engels/1848/manifest/index.htm as URL
## generate a pdf
mlwerk.text2pdf(PDF_OUTPUT_PATH)
## or cominded into one line
mlwerke2pdf.MLWerk(URL).text2pdf(PDF_OUTPUT_PATH)
+12 -10
View File
@@ -1,7 +1,7 @@
import requests
from bs4 import BeautifulSoup
import urllib.parse
import pdfkit
from weasyprint import HTML
class MLWerk:
class SubSite:
@@ -31,22 +31,24 @@ class MLWerk:
if limit != None and i > limit:
break
link = link.get('href')
if not (link == None and ("#" in link or "/" in link)):
if not link == None and not ("#" in link or "/" in link):
self.subsites.append(self.SubSite(urllib.parse.urljoin(self.baseurl, link)))
i += 1
def concatsubsites(self):
for subsite in self.subsites:
for element in subsite.soup.body:
self.soup.body.append(element)
for tag in subsite.soup.body:
if (tag != "\n" and tag.name != "a"):
self.soup.body.append(tag)
def genpdf(self, path):
pdfkit.from_string(str(self.soup), path, options={"enable-local-file-access": ""})
HTML(string=str(self.soup)).write_pdf(path)
def text2pdf(self, path):
def text2pdf(self, path, dry=False):
print("gettings subsites")
self.getsubsites
self.getsubsites()
print("concatting subsites")
self.concatsubsites
print("generating pdf")
self.genpdf(pdf)
self.concatsubsites()
if not dry:
print("generating pdf")
self.genpdf(path)
+14
View File
@@ -0,0 +1,14 @@
import mlwerke2pdf
import argparse
parser = argparse.ArgumentParser(
prog='MLWerke2PDF',
description='convert texts on http://www.mlwerke.de into Portable Document Format files',
epilog='published under GPL-3 at https://git.roteserver.de/humorhenker/mlwerke2pdf')
parser.add_argument('-u', '--url', dest='url', help='base / table of contents of a text like http://www.mlwerke.de/me/me04/me04_459.htm', required=True)
parser.add_argument('-o', '--pdfpath', dest='pdfpath', help='path for the output pdf', required=True)
parser.add_argument('--dry', dest='dryrun', default=False, help="dont store any files just dry fetch")
args = parser.parse_args()
mlwerke2pdf.MLWerk(args.url).text2pdf(args.pdfpath, args.dryrun)