Hướng dẫn how do i download a webpage as a pdf in python? - làm cách nào để tải xuống một trang web dưới dạng pdf trong python?

Tôi đã tìm giải pháp để in trang web vào tệp PDF địa phương, sử dụng Python. Một trong những giải pháp tốt là sử dụng Qt, được tìm thấy ở đây, https://bharatikunal.wordpress.com/2010/01/.

Nó không hoạt động ngay từ đầu vì tôi gặp vấn đề với việc cài đặt PYQT4 vì nó đã đưa ra các thông báo lỗi như 'ImportError: No module named PyQt4.QtCore' và 'ImportError: No module named PyQt4.QtCore'.

Đó là bởi vì PYQT4 không được cài đặt đúng cách. Tôi đã từng có các thư viện được đặt tại C: \ python27 \ lib tuy nhiên nó không dành cho pyqt4.

Trên thực tế, nó chỉ cần tải xuống từ http://www.riverbankcomputing.com/software/pyqt/doad (tâm trí phiên bản Python chính xác bạn đang sử dụng) và cài đặt nó vào C: \ Python27 (trường hợp của tôi). Đó là nó.

Bây giờ các tập lệnh chạy tốt nên tôi muốn chia sẻ nó. Để biết thêm tùy chọn trong việc sử dụng QPrinter, vui lòng tham khảo http://qt-project.org/doc/qt-4.8/qprinter.html#orientation-enum.

Hướng dẫn how do i download a webpage as a pdf in python? - làm cách nào để tải xuống một trang web dưới dạng pdf trong python?

0m3r

11.9K15 Huy hiệu vàng31 Huy hiệu bạc69 Huy hiệu đồng15 gold badges31 silver badges69 bronze badges

hỏi ngày 29 tháng 4 năm 2014 lúc 8:10Apr 29, 2014 at 8:10

Hướng dẫn how do i download a webpage as a pdf in python? - làm cách nào để tải xuống một trang web dưới dạng pdf trong python?

1

Bạn cũng có thể sử dụng pdfkit:

Cách sử dụng

import pdfkit
pdfkit.from_url('http://google.com', 'out.pdf')

Cài đặt

MacOS:

pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)
1

Debian/Ubuntu:

pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)
2

Windows:

pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)
3

Xem tài liệu chính thức cho macOS/ubuntu/os khác: https://github.com/jazzcore/python-pdfkit/wiki/installing-wkhtmltopdf

Đã trả lời ngày 20 tháng 5 năm 2014 lúc 13:24May 20, 2014 at 13:24

Hướng dẫn how do i download a webpage as a pdf in python? - làm cách nào để tải xuống một trang web dưới dạng pdf trong python?

NorthcatnorthcatNorthCat

9.24716 Huy hiệu vàng46 Huy hiệu bạc 50 Huy hiệu Đồng16 gold badges46 silver badges50 bronze badges

17

Dấu ấn

pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)

Sunit Gautam

4.6052 Huy hiệu vàng17 Huy hiệu bạc29 Huy hiệu đồng2 gold badges17 silver badges29 bronze badges

Đã trả lời ngày 23 tháng 12 năm 2015 lúc 15:04Dec 23, 2015 at 15:04

JohnmuddjohnmuddJohnMudd

13,5K2 Huy hiệu vàng26 Huy hiệu bạc24 Huy hiệu đồng2 gold badges26 silver badges24 bronze badges

10

Nhờ các bài đăng dưới đây và tôi có thể thêm vào địa chỉ liên kết trang web để được in và hiện tại thời gian trên PDF được tạo, bất kể nó có bao nhiêu trang.

Thêm văn bản vào PDF hiện có bằng Python

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

Để chia sẻ kịch bản như dưới đây:

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.'

Đã trả lời ngày 30 tháng 4 năm 2014 lúc 7:31Apr 30, 2014 at 7:31

Hướng dẫn how do i download a webpage as a pdf in python? - làm cách nào để tải xuống một trang web dưới dạng pdf trong python?

Mark Kmark kMark K

7.96913 Huy hiệu vàng53 Huy hiệu bạc101 Huy hiệu đồng13 gold badges53 silver badges101 bronze badges

8

Theo câu trả lời này: Cách chuyển đổi trang web thành PDF bằng cách sử dụng Python, lời khuyên là sử dụng pdfkit. Bạn cũng phải cài đặt wkhtmltopdf.pdfkit. You also have to install wkhtmltopdf.

Nếu bạn có tệp

pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)
4 cục bộ, sau đó bạn cần sử dụng lệnh này:

pdfkit.from_file('test.html', 'out.pdf')

Nhưng điều này sẽ gây ra lỗi nếu bạn chưa thêm các tệp thực thi WKHTMLTOPDF vào đường dẫn hệ thống của mình. Đây là phần đã vấp ngã tôi và tôi muốn chia sẻ.

Trên Windows, hãy mở các biến môi trường của bạn và thêm chúng vào

pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)
5>
pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)
6 của bạn như bên dưới. Trong trường hợp của tôi, các tệp này được đặt ở đây sau khi tôi cài đặt wkhtmltopdf từ một exe:

pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)
8

Hướng dẫn how do i download a webpage as a pdf in python? - làm cách nào để tải xuống một trang web dưới dạng pdf trong python?

Hướng dẫn how do i download a webpage as a pdf in python? - làm cách nào để tải xuống một trang web dưới dạng pdf trong python?

Đã trả lời ngày 29 tháng 1 năm 2018 lúc 22:31Jan 29, 2018 at 22:31

JaradjaradJarad

15.9K19 Huy hiệu vàng90 Huy hiệu bạc144 Huy hiệu đồng19 gold badges90 silver badges144 bronze badges

1

Đây là một trong những hoạt động tốt:

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_())

Hướng dẫn how do i download a webpage as a pdf in python? - làm cách nào để tải xuống một trang web dưới dạng pdf trong python?

Fractalspace

5.3212 Huy hiệu vàng42 Huy hiệu bạc47 Huy hiệu đồng2 gold badges42 silver badges47 bronze badges

Đã trả lời ngày 29 tháng 4 năm 2014 lúc 8:11Apr 29, 2014 at 8:11

Hướng dẫn how do i download a webpage as a pdf in python? - làm cách nào để tải xuống một trang web dưới dạng pdf trong python?

Mark Kmark kMark K

7.96913 Huy hiệu vàng53 Huy hiệu bạc101 Huy hiệu đồng13 gold badges53 silver badges101 bronze badges

2

Theo câu trả lời này: Cách chuyển đổi trang web thành PDF bằng cách sử dụng Python, lời khuyên là sử dụng pdfkit. Bạn cũng phải cài đặt wkhtmltopdf.

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!"

Nếu bạn có tệp

pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)
4 cục bộ, sau đó bạn cần sử dụng lệnh này:Jan 20, 2015 at 20:38

Hướng dẫn how do i download a webpage as a pdf in python? - làm cách nào để tải xuống một trang web dưới dạng pdf trong python?

pdfkit.from_file('test.html', 'out.pdf')
Jim Paul

Nhưng điều này sẽ gây ra lỗi nếu bạn chưa thêm các tệp thực thi WKHTMLTOPDF vào đường dẫn hệ thống của mình. Đây là phần đã vấp ngã tôi và tôi muốn chia sẻ.1 silver badge4 bronze badges

Trên Windows, hãy mở các biến môi trường của bạn và thêm chúng vào

pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)
5>
pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)
6 của bạn như bên dưới. Trong trường hợp của tôi, các tệp này được đặt ở đây sau khi tôi cài đặt wkhtmltopdf từ một exe:

Đã trả lời ngày 29 tháng 1 năm 2018 lúc 22:31

Jaradjarad

import pdfkit


path_wkthmltopdf = "C:\\Folder\\where\\wkhtmltopdf.exe"
config = pdfkit.configuration(wkhtmltopdf = path_wkthmltopdf)

pdfkit.from_url("http://google.com", "out.pdf", configuration=config)

15.9K19 Huy hiệu vàng90 Huy hiệu bạc144 Huy hiệu đồngOct 18, 2019 at 2:09

Hướng dẫn how do i download a webpage as a pdf in python? - làm cách nào để tải xuống một trang web dưới dạng pdf trong python?

Mark Kmark kMark K

7.96913 Huy hiệu vàng53 Huy hiệu bạc101 Huy hiệu đồng13 gold badges53 silver badges101 bronze badges

1

Theo câu trả lời này: Cách chuyển đổi trang web thành PDF bằng cách sử dụng Python, lời khuyên là sử dụng pdfkit. Bạn cũng phải cài đặt wkhtmltopdf.

import sys
from PyQt5 import QtWidgets, QtWebEngineWidgets
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QPageLayout, QPageSize
from PyQt5.QtWidgets import QApplication

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    loader = QtWebEngineWidgets.QWebEngineView()
    loader.setZoomFactor(1)
    layout = QPageLayout()
    layout.setPageSize(QPageSize(QPageSize.A4Extra))
    layout.setOrientation(QPageLayout.Portrait)
    loader.load(QUrl('https://stackoverflow.com/questions/23359083/how-to-convert-webpage-into-pdf-by-using-python'))
    loader.page().pdfPrintingFinished.connect(lambda *args: QApplication.exit())

    def emit_pdf(finished):
        loader.page().printToPdf("test.pdf", pageLayout=layout)

    loader.loadFinished.connect(emit_pdf)
    sys.exit(app.exec_())

Nếu bạn có tệp

pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)
4 cục bộ, sau đó bạn cần sử dụng lệnh này:Aug 6, 2020 at 19:39

Y.khY.khY.kh

pdfkit.from_file('test.html', 'out.pdf')
2 silver badges6 bronze badges

4

Nhưng điều này sẽ gây ra lỗi nếu bạn chưa thêm các tệp thực thi WKHTMLTOPDF vào đường dẫn hệ thống của mình. Đây là phần đã vấp ngã tôi và tôi muốn chia sẻ.

Trên Windows, hãy mở các biến môi trường của bạn và thêm chúng vào

pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)
5>
pip install weasyprint  # No longer supports Python 2.x.

python
>>> import weasyprint
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> open('google.pdf', 'wb').write(pdf)
6 của bạn như bên dưới. Trong trường hợp của tôi, các tệp này được đặt ở đây sau khi tôi cài đặt wkhtmltopdf từ một exe:

import sys
import json, base64


def send_devtools(driver, cmd, params={}):
    resource = "/session/%s/chromium/send_command_and_get_result" % driver.session_id
    url = driver.command_executor._url + resource
    body = json.dumps({'cmd': cmd, 'params': params})
    response = driver.command_executor._request('POST', url, body)
    return response.get('value')


def get_pdf_from_html(driver, url, print_options={}, output_file_path="example.pdf"):
    driver.get(url)

    calculated_print_options = {
        'landscape': False,
        'displayHeaderFooter': False,
        'printBackground': True,
        'preferCSSPageSize': True,
    }
    calculated_print_options.update(print_options)
    result = send_devtools(driver, "Page.printToPDF", calculated_print_options)
    data = base64.b64decode(result['data'])
    with open(output_file_path, "wb") as f:
        f.write(data)



# example
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

url = "https://stackoverflow.com/questions/23359083/how-to-convert-webpage-into-pdf-by-using-python#"
webdriver_options = Options()
webdriver_options.add_argument("--no-sandbox")
webdriver_options.add_argument('--headless')
webdriver_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chromedriver, options=webdriver_options)
get_pdf_from_html(driver, url)
driver.quit()

Đã trả lời ngày 29 tháng 1 năm 2018 lúc 22:31Jul 26, 2020 at 13:31

Hướng dẫn how do i download a webpage as a pdf in python? - làm cách nào để tải xuống một trang web dưới dạng pdf trong python?

6

Làm cách nào để tải xuống một trang web dưới dạng pdf?

Mở trang web để lưu dưới dạng pdf.press ctrl + p (windows) hoặc cmd + p (mac). Bấm vào mũi tên thả xuống nằm ở phía dưới bên trái.choose 'Lưu dưới dạng PDF' và vị trí cho tệp. Press Ctrl + P (Windows) or Cmd + P (Mac). Click the drop-down arrow located on the bottom left. Choose 'save as PDF' and the location for the file.

Chúng ta có thể chuyển đổi HTML thành PDF trong Python không?

WKHTMLTOPDF là một công cụ dòng lệnh nguồn mở để hiển thị các tệp HTML thành PDF bằng công cụ kết xuất Qt WebKit.Để sử dụng nó trong Python, chúng tôi cũng sẽ cần thư viện PDFKIT, một gói cho tiện ích WKHTMLTOPDF.Đầu tiên, tìm kiếm trình cài đặt WKHTMLTOPDF cho hệ điều hành của bạn.In order to use it in Python, we will also need the pdfkit library which is a wrapper for wkhtmltopdf utility. First, search for the wkhtmltopdf installer for your operating system.