2016-03-30 16 views
1

pdfkitを試しましたが、これを解決できませんでした。issuepython-htmlページをpdf形式で保存するには?

代替手段があるのでしょうか? 他の方法でウェブページをPDFファイルとして保存する方法はありますか?

EDIT

私は、@ lqbalの提案の下でxhtml2pdfを使用しようとしました。 で使用されているGoogleフォントを削除した場合にのみ、が動作しました。 -See reference

しかし、これらのフォントがないと、Webページはひどい形式になります。

答えて

0

はこれを試してみてください:

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

私はそれがこのスクリプトを実行する他のいくつかのパッケージをインストールする必要がありますようです。それは私が実装しようとしているものは非常に小さなプロジェクトであり、私はそれを複雑にしたくないのです。とにかく、あなたの提案に感謝し、もし私がそれを試してみませんどのような良いソリューションはありません。 :) –

関連する問題