

PyQtを用いてHTMLファイルからPDFを作成しているのですが  
エラーが出て動きません  
PDFは作成できるのですが中は真っ白なPDFだけで困っています

エラーコードは  
__agent_connection_block_invoke_2:Connection error - Connection invalid

こんな感じで出てきてどうすればいいのかわからないので教えてくださいお願いします

Python2.7.10でPyQt4を使っています  
コードはこちらになります

[code]

    #coding utf-8
    import markdown
    import sys
    import os
    from PyQt4.QtCore import QUrl
    from PyQt4.QtGui import QApplication, QPrinter
    from PyQt4.QtWebKit import QWebView
    
    app = QApplication(sys.argv)
    web = QWebView()
    printer = QPrinter()
    
    def load_finished():
        global web
        global printer
    
        web.print_(printer)
        QApplication.exit()
    
    def md2html(_fileName):
        md=markdown.Markdown()
        text=""
        for i in open(_fileName,"r"):
             text+=i
        text=md.convert(text)
    
        fn=open("test.html","w")
        fn.write(text)
        fn.close()
    
    def html2pdf():
        global app
        printer.setOutputFormat(QPrinter.PdfFormat)
        printer.setOrientation(QPrinter.Landscape)
        printer.setPageSize(QPrinter.A4)
        printer.setResolution(QPrinter.HighResolution)
        printer.setOutputFileName('test.pdf')
    
        web.loadFinished.connect(load_finished)
        web.load(QUrl.fromLocalFile(os.path.join(os.path.dirname(__file__), 'test.html')))
    
        sys.exit(app.exec_())
    
    
    
    
    md2html("aaa.md")
    html2pdf()
    
[/code]


CC BY-SA 3.0
2015-11-19T06:36:12.287
19026
2015-11-19T12:08:31.900
2015-11-19T09:02:33.303
13330
13330
question
python
pythonでPDF作成について


以下のコードの、

[code]

    web.load(QUrl.fromLocalFile(os.path.join(os.path.dirname(__file__), 'test.html')))
    
[/code]

`QUrl.fromLocalFile` に指定するファイルパスは絶対パスである必要があります。これは、内部で `file://...`
の形式に変換されるためです。実際、`os.path.join(os.path.dirname(__file__), 'test.html')` は
`test.html` になってしまいます(相対パス)。

したがって、ここは以下の様にします。

[code]

    web.load(QUrl.fromLocalFile(os.path.abspath('test.html')))
    
[/code]

また、`md.convert()` は HTML ヘッダを付加しませんので、このままでは UTF-8
文字列が正しく扱われない事になります(いわゆる「文字化け」が発生します)。そのため、`Content-Type` を追加します。

[code]

    text=md.convert(text)
    fn=open("test.html","w")
    =>
    text = '<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"></head><body>' + md.convert(text) + '</body></html>'
    fn=open("test.html","w")
    
[/code]

※ もっと良い方法があるかもしれません。


CC BY-SA 3.0
2015-11-19T12:08:31.900
19048
2015-11-19T12:08:31.900
19026
answer