script - Cómo convertir una página web en PDF usando Python
python y html5 (5)
Estaba encontrando una solución para imprimir una página web en un archivo PDF local, usando Python. una de las buenas soluciones es usar Qt, que se encuentra aquí, https://bharatikunal.wordpress.com/2010/01/ .
No funcionó al principio porque tuve un problema con la instalación de PyQt4 porque me dio mensajes de error como ''ImportError: Ningún módulo llamado PyQt4.QtCore'', y ''ImportError: Ningún módulo llamado PyQt4.QtCore''.
Fue porque PyQt4 no está instalado correctamente. Solía tener las bibliotecas ubicadas en C: / Python27 / Lib, pero no es para PyQt4.
De hecho, simplemente necesita descargar desde http://www.riverbankcomputing.com/software/pyqt/download (tenga en cuenta la versión de Python correcta que está utilizando) e instálelo en C: / Python27 (mi caso). Eso es.
Ahora los scripts funcionan bien, así que quiero compartirlos. para obtener más opciones sobre el uso de Qprinter, consulte http://qt-project.org/doc/qt-4.8/qprinter.html#Orientation-enum .
Aquí hay una solución simple usando QT. Encontré esto como parte de una respuesta a una pregunta diferente en . Lo probé en 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!"
Gracias a las publicaciones a continuación, y puedo agregar la dirección del enlace de la página web que se imprimirá y la hora actual en el PDF generado, sin importar cuántas páginas tenga.
Agregar texto a PDF existente usando Python
https://github.com/disflux/django-mtr/blob/master/pdfgen/doc_overlay.py
Para compartir el script de la siguiente manera:
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.''
También puedes usar pdfkit :
import pdfkit
pdfkit.from_url(''http://google.com'', ''out.pdf'')
aquí está el que funciona bien:
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_())
pip install weasyprint
python
>>> pdf = weasyprint.HTML(''http://www.google.com'').write_pdf()
>>> len(pdf)
92059
>>> file(''google.pdf'', ''w'').write(pdf)