복붙노트

[PYTHON] 파이썬을 사용하여 웹 페이지를 PDF로 변환하는 방법

PYTHON

파이썬을 사용하여 웹 페이지를 PDF로 변환하는 방법

파이썬을 사용하여 웹 페이지를 로컬 파일 PDF로 인쇄하는 솔루션을 찾고있었습니다. 좋은 해결책 중 하나는 https://bharatikunal.wordpress.com/2010/01/에있는 Qt를 사용하는 것입니다.

그것은 'ImportError : No module PyQt4.QtCore'와 'ImportError : No module PyQt4.QtCore'와 같은 오류 메시지를 주었기 때문에 PyQt4 설치에 문제가있어서 처음에는 작동하지 않았습니다.

PyQt4가 제대로 설치되지 않았기 때문입니다. 필자는 C : \ Python27 \ Lib에 라이브러리를 가지고 있었지만 PyQt4에는 라이브러리가 없었습니다.

실제로 http://www.riverbankcomputing.com/software/pyqt/download (사용중인 올바른 Python 버전을 기억하십시오)에서 다운로드하고 C : \ Python27 (제 경우)에 설치하기 만하면됩니다. 그게 전부 야.

이제 스크립트가 잘 돌아가므로 공유하고 싶습니다. Qprinter 사용에 대한 추가 옵션은 http://qt-project.org/doc/qt-4.8/qprinter.html#Orientation-enum을 참조하십시오.

해결법

  1. ==============================

    1.또한 pdfkit을 사용할 수 있습니다.

    또한 pdfkit을 사용할 수 있습니다.

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

    2.WeasyPrint

    WeasyPrint

    pip install weasyprint
    
    python
    >>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
    >>> len(pdf)
    92059
    >>> file('google.pdf', 'w').write(pdf)
    
  3. ==============================

    3.아래의 게시물 덕분에, 그리고 얼마나 많은 페이지를 가지고 있건 상관없이 생성 된 PDF에 인쇄 할 웹 페이지 링크 주소와 현재 시간을 추가 할 수있었습니다.

    아래의 게시물 덕분에, 그리고 얼마나 많은 페이지를 가지고 있건 상관없이 생성 된 PDF에 인쇄 할 웹 페이지 링크 주소와 현재 시간을 추가 할 수있었습니다.

    파이썬을 사용하여 기존 PDF에 텍스트 추가

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

    아래의 스크립트를 공유하려면 :

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

    4.다음은 잘 작동하는 것입니다.

    다음은 잘 작동하는 것입니다.

    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_())
    
  5. ==============================

    5.다음은 QT를 사용하는 간단한 솔루션입니다. 나는 이것을 StackOverFlow에 대한 다른 질문에 대한 답의 일부로 발견했다. 나는 그것을 Windows에서 테스트했다.

    다음은 QT를 사용하는 간단한 솔루션입니다. 나는 이것을 StackOverFlow에 대한 다른 질문에 대한 답의 일부로 발견했다. 나는 그것을 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. from https://stackoverflow.com/questions/23359083/how-to-convert-webpage-into-pdf-by-using-python by cc-by-sa and MIT license