标签: qprinter

如何使用Python将网页转换为PDF

我正在寻找使用Python将网页打印成本地文件PDF的解决方案.一个很好的解决方案是使用Qt,在这里找到,https://bharatikunal.wordpress.com/2010/01/.

它在开始时没有用,因为我遇到了安装PyQt4的问题,因为它给出了错误消息,例如'ImportError:没有名为PyQt4.QtCore的模块'和'ImportError:没有名为PyQt4.QtCore的模块'.

这是因为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.

python pdf webpage qprinter

69
推荐指数
9
解决办法
13万
查看次数

如何从Qt应用程序创建pdf文件?

在我的Qt应用程序中,我正在进行一些网络测试.我必须根据测试输出创建一个报告.所以我需要以pdf格式创建报告.

有人可以告诉我如何将我的测试结果放在pdf文件中吗?我的结果包含使用Qwt库的图表.

pdf graph qt4 qwt qprinter

8
推荐指数
1
解决办法
1万
查看次数

页面上的打印错误(qtWebkit)

Qt5.2.1中的错误:

唯一的问题是纠正,QPrintPreviewDialog但当打印在纸上打印时,故障仍然存在.

随着QPrintPreviewDialog网页的工作完美,但"纸"(纸打印)从第二页"文本"和"图像"(无背景)消失(显然是错误只发生(即除第一个出现的BUG所有页面)内联元素).

请参阅:https: //bugreports.qt.io/browse/QTBUG-37240(请参阅测试用例的附件)


Qt5.0.1,Qt5.0.2和Qt5.1.0中的错误

打印带有小字体和图像的QWebView的第一页.

显然,只有内联元素(文本和图像)才会出现问题.

注意:该错误发生在Windows XP,Windows 7,Window 7 x64,Mac OS X 10.8.3中

[编辑]

Source-html:http://jsfiddle.net/bdm6Y/2/

框架内容:http://jsfiddle.net/bdm6Y/2/show/

ErrorPrint

资源:

QPrinter p;
p.setPaperSize(QPrinter::A4);
p.setFullPage(true);
p.setResolution(300);
p.setOrientation(QPrinter::Portrait);

QPrintPreviewDialog preview(&p);
preview.setWindowTitle(ui->myWebView->page()->mainFrame()->title());
connect(&preview, SIGNAL(paintRequested(QPrinter*)), this, SLOT(printPreview(QPrinter*)));
preview.exec();

...

void printPreview(QPrinter *printer) {
    ui->myWebView->print(printer);
}
Run Code Online (Sandbox Code Playgroud)

我不知道这是一个错误还是我做错了什么,它会是什么?

谢谢!

[编辑]

QT错误报告:

https://bugreports.qt.io/browse/QTBUG-30621

qt qwebview qwebkit qprinter

6
推荐指数
1
解决办法
1544
查看次数

QPrinter无法正确设置HTML页面样式以在PDF文档中呈现图像

我想创建一个具有正确样式HTML的PDF文档.这就是我想要的:

QTextDocument *doc = new QTextDocument();
const char* s1 = "<html><head><style>body { font-family: sans-serif;}.note-atomic { background: rgb(242,242,242); width: 1000px; margin: 5px auto; border: 1px solid grey; border-radius: 8px;padding: 5px;}</style></head><body><div class = 'note-atomic'>Hi</div><img src = '/Users/attitude/Desktop/RnSghvV.png' width='400' height='300' /></body></html>";
doc->setHtml(QString::fromStdString(s1));

QPrinter *printer = new QPrinter();
printer->setOutputFileName("/Users/attitude/Desktop/fool.pdf");
printer->setOutputFormat(QPrinter::PdfFormat);

QPainter *painter = new QPainter();
painter->begin( printer );
doc->drawContents(painter, printer->pageRect().translated( -printer->pageRect().x(), -    printer->pageRect().y() ));
doc->print(printer);

const char* s2 = "<html><body><div>Bye</div></body></html>";
doc->setHtml(QString::fromStdString(s2));

printer->newPage();
doc->drawContents(painter, printer->pageRect().translated( -printer->pageRect().x(), - printer->pageRect().y() ));

doc->print(printer);
painter->end();
Run Code Online (Sandbox Code Playgroud)

我希望PDF有两页 - 第一页有文字Hi …

c++ pdf qt qtextdocument qprinter

6
推荐指数
1
解决办法
1415
查看次数

PyQt 打印 QWidget

我尝试按照文档打印 QWidet,但收到错误。当我运行以下代码时,我得到了QPaintDevice: Cannot destroy paint device that is being painted.

import sys
from PyQt4 import QtGui, QtCore

class SampleApp(QtGui.QDialog):
    def __init__(self):
        super().__init__()

        layout = QtGui.QVBoxLayout()
        self.setLayout(layout)

        text_editor = QtGui.QTextEdit()
        layout.addWidget(text_editor)

        button = QtGui.QPushButton("Print")
        layout.addWidget(button)
        button.clicked.connect(self.print_me)

    def print_me(self):
        printer = QtGui.QPrinter()
        printer.setOutputFormat(QtGui.QPrinter.PdfFormat)
        printer.setOutputFileName("Test.pdf")

        self.painter = QtGui.QPainter(printer)
        margins = printer.getPageMargins(QtGui.QPrinter.DevicePixel)
        xscale = (printer.pageRect().width() - margins[0]) / self.width()
        yscale = (printer.pageRect().height() - margins[1]) / self.height()
        scale = min(xscale, yscale)
        self.painter.scale(scale, scale)

        self.render(self.painter)

app = QtGui.QApplication(sys.argv)
ex = SampleApp()
ex.show() …
Run Code Online (Sandbox Code Playgroud)

python pyqt pyqt4 qpainter qprinter

5
推荐指数
1
解决办法
1336
查看次数

我需要按实际(英寸/毫米)比例打印 QGraphicsScene

我正在尝试打印 .a 的内容QGraphicsScene。目标打印机可以是任何打印机 - 从普通打印机到自定义尺寸的特殊打印机。它必须以实际尺寸(英寸、毫米……)打印内容。
QGraphicsScene我使用的假设是 72 ppi。

我假设:
1)将场景渲染到打印机将根据打印机分辨率来完成,这样我就可以获得与屏幕上显示的类似的实际尺寸(英寸/毫米)的项目。
2)我可以将打印机的纸张尺寸设置为所需的画布尺寸(这是一个非常大的场景上的矩形),超出它的范围就不会打印
3)我可以设置边距,“实际画布”之外的内容将不得打印,包括页边空白处的内容。

到目前为止我的所有假设都是错误的:
1)对于不同的打印机,如果我建议接近其默认纸张尺寸的自定义尺寸(或者如果我没有设置纸张),则渲染似乎是最大适合(使用纵横比)尺寸);
如果我设置的纸张尺寸不接近(例如默认“LETTER”尺寸的打印机上的 4x4 英寸),它只会打印一张空白页。
2-3) 在有打印的情况下,打印机只是将画布拉伸至整页,绘图区域之外的所有项目仍会打印。
我尝试在画家上或通过在渲染时设置目标矩形来进行剪辑,结果是对场景的一小部分进行了非常奇怪的剪辑。

我尝试过 HP LaserJet、Adobe PDF 和一些特定尺寸(如 4x6 英寸)的自定义打印机。他们都根据我是否指定纵向或横向将场景缩放到最大尺寸,并完全忽略我的纸张尺寸要求或实际尺寸。

这是一个小示例程序,用于重现我正在尝试做的事情。
代码中的注释显示了我尝试过的一些选项。

#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QGraphicsEllipseItem>
#include <QPrinter>
#include <QPrintDialog>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QGraphicsScene* s = new QGraphicsScene();
    s->setSceneRect(-500, -500, 1500, 1500);
    QGraphicsView* view = new QGraphicsView();
    view->setScene(s);
    view->show();

    int canvasSize = 288;    // 4 in
    QRectF …
Run Code Online (Sandbox Code Playgroud)

printing qt qgraphicsscene qprinter

4
推荐指数
1
解决办法
2934
查看次数

无法移动到下一页以使用QPrinter打印HTML内容

在我的小应用程序中,我想在每个页面中预览一些HTML内容,因此我使用了以下代码

/*
* Handle events when clicking button to preview content
*/
void MainWindow::on_pushButton_clicked()
{
    QPrinter printer;
    printer.setPaperSize(QPrinter::A4);
    printer.setOrientation(QPrinter::Portrait);
    printer.setFullPage(true);

    QPrintPreviewDialog *printPreview = new QPrintPreviewDialog(&printer);
    connect(printPreview, SIGNAL(paintRequested(QPrinter*)), this, SLOT(printAllTitle(QPrinter*)));

    printPreview->setWindowTitle("Demo");
    Qt::WindowFlags flags(Qt::WindowTitleHint);
    printPreview->setWindowFlags(flags);
    printPreview->showMaximized();
    printPreview->exec();
}

/*
* Show preview content
*/
void MainWindow::printAllTitle(QPrinter *printer)
{
    QVector<QString> titles;
    titles.push_back("Title 1");
    titles.push_back("Title 2");

    QString strStream;
    QTextStream out(&strStream);

    for (int i = 0; i < titles.size(); i++) {
        out << "<html><head></head><body>";
        out << "<p style=\"font-size:20pt\">" + titles.at(i) + "</p>";
        out << "</body></html>"; …
Run Code Online (Sandbox Code Playgroud)

qt qprinter

2
推荐指数
1
解决办法
1278
查看次数

从pyqt5的主页打印

我在pyqt5中编写了一些代码,在main main中创建了一个表:

class Ui_MainWindow(object):
    def setupUi(self, MainWindow): ...
    def retranslateUi(self, MainWindow):...
        self.pushButton.setText(_translate("MainWindow", "print"))
        self.pushButton.clicked.connect(self.printer)
    def printer(self):...
Run Code Online (Sandbox Code Playgroud)

并通过以下方式使用此类:

app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

我想知道如何从程序的主页打印?

python pyqt python-3.x qprinter pyqt5

1
推荐指数
1
解决办法
6779
查看次数