Comment convertir une page Web en PDF en utilisant Python

j'ai trouvé une solution pour imprimer la page Web dans le fichier PDF local, en utilisant Python. une des bonnes solutions est D'utiliser Qt, trouvé ici, https://bharatikunal.wordpress.com/2010/01 / .

cela n'a pas fonctionné au début car J'ai eu des problèmes avec L'installation de PyQt4 parce qu'il donnait des messages d'erreur tels que 'ImportError: No module named PyQt4.QtCore', et ' ImportError: aucun module nommé PyQt4.QtCore".

c'était parce que PyQt4 n'est pas installé correctement. J'ai utilisé pour avoir les bibliothèques localisées à C:Python27Lib cependant, ce N'est pas pour PyQt4.

en fait, il suffit de télécharger à partir de http://www.riverbankcomputing.com/software/pyqt/download (pensez à la version correcte de Python que vous utilisez), et l'Installer pour C:Python27 (my case). C'est tout.

maintenant les scripts fonctionnent bien donc je veux le partager. pour plus d'options dans l'utilisation de Qprinter, veuillez vous référer à http://qt-project.org/doc/qt-4.8/qprinter.html#Orientation-enum .

44
demandé sur Mark K 2014-04-29 12:10:40

5 réponses

vous pouvez également utiliser pdfkit :

import pdfkit
pdfkit.from_url('http://google.com', 'out.pdf')
88
répondu NorthCat 2018-01-12 23:24:19

WeasyPrint

pip install weasyprint

python
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> file('google.pdf', 'w').write(pdf)
19
répondu JohnMudd 2015-12-23 15:04:13

merci aux postes ci-dessous, et je suis en mesure d'ajouter sur la page Web Adresse lien à imprimer et l'heure actuelle sur le PDF généré, peu importe le nombre de pages qu'il a.

ajouter du texte au PDF existant en utilisant Python

https://github.com/disflux/django-mtr/blob/master/pdfgen/doc_overlay.py

pour partager le script comme suit:

import time
from pyPdf import PdfFileWriter, PdfFileReader
import StringIO
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from xhtml2pdf import pisa
import sys 
from PyQt4.QtCore import *
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import * 

url = 'http://www.yahoo.com'
tem_pdf = "c:\tem_pdf.pdf"
final_file = "c:\younameit.pdf"

app = QApplication(sys.argv)
web = QWebView()
#Read the URL given
web.load(QUrl(url))
printer = QPrinter()
#setting format
printer.setPageSize(QPrinter.A4)
printer.setOrientation(QPrinter.Landscape)
printer.setOutputFormat(QPrinter.PdfFormat)
#export file as c:\tem_pdf.pdf
printer.setOutputFileName(tem_pdf)

def convertIt():
    web.print_(printer)
    QApplication.exit()

QObject.connect(web, SIGNAL("loadFinished(bool)"), convertIt)

app.exec_()
sys.exit

# Below is to add on the weblink as text and present date&time on PDF generated

outputPDF = PdfFileWriter()
packet = StringIO.StringIO()
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)
can.setFont("Helvetica", 9)
# Writting the new line
oknow = time.strftime("%a, %d %b %Y %H:%M")
can.drawString(5, 2, url)
can.drawString(605, 2, oknow)
can.save()

#move to the beginning of the StringIO buffer
packet.seek(0)
new_pdf = PdfFileReader(packet)
# read your existing PDF
existing_pdf = PdfFileReader(file(tem_pdf, "rb"))
pages = existing_pdf.getNumPages()
output = PdfFileWriter()
# add the "watermark" (which is the new pdf) on the existing page
for x in range(0,pages):
    page = existing_pdf.getPage(x)
    page.mergePage(new_pdf.getPage(0))
    output.addPage(page)
# finally, write "output" to a real file
outputStream = file(final_file, "wb")
output.write(outputStream)
outputStream.close()

print final_file, 'is ready.'
15
répondu Mark K 2017-05-23 12:18:23

voici l'unique amende de travail:

import sys 
from PyQt4.QtCore import *
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import * 

app = QApplication(sys.argv)
web = QWebView()
web.load(QUrl("http://www.yahoo.com"))
printer = QPrinter()
printer.setPageSize(QPrinter.A4)
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setOutputFileName("fileOK.pdf")

def convertIt():
    web.print_(printer)
    print "Pdf generated"
    QApplication.exit()

QObject.connect(web, SIGNAL("loadFinished(bool)"), convertIt)
sys.exit(app.exec_())
7
répondu Mark K 2014-04-29 08:11:24

Voici une solution simple utilisant QT. J'ai trouvé cela dans le cadre d'une réponse à une autre question sur StackOverFlow. Je l'ai testé sur Windows.

from PyQt4.QtGui import QTextDocument, QPrinter, QApplication

import sys
app = QApplication(sys.argv)

doc = QTextDocument()
location = "c://apython//Jim//html//notes.html"
html = open(location).read()
doc.setHtml(html)

printer = QPrinter()
printer.setOutputFileName("foo.pdf")
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setPageSize(QPrinter.A4);
printer.setPageMargins (15,15,15,15,QPrinter.Millimeter);

doc.print_(printer)
print "done!"
6
répondu Jim Paul 2015-03-12 13:31:32