我这里是写论文,自己用qt做了个坐标绘图软件,不想通过第三方截图软件截图后插入word或者外部转为pdf,然后用adobe acrobat pdf阅读器软件裁剪导出为eps格式图片给latex用,这样做清晰度会受影响。所以想直接通过qt导出pdf,这样非常清晰,而且更方便使用,下图是我的软件:

 Qt5把图片如何导出为pdf再到剪切板_qt

 我实现后的效果如下:

Qt5把图片如何导出为pdf再到剪切板_qt截图_02

可以看到,这是我清晰的。实现代码如下:(就一个函数就完成了,注释比较详细,看一下就懂了)


#include <QPdfWriter>
#include <QPainter>


void MainWindowDraw::on_pushButtonScreenshotPDF_clicked()
{
/********************* 截图 *********************/
QPoint tmp = QPoint(ui->customPlot->x(),ui->customPlot->y()+ui->menubar->height());
QPixmap pix=QWidget::grab(QRect(tmp,ui->customPlot->size()));

/********************* pdf文件生成 *********************/
QString path = QCoreApplication::applicationDirPath() + "/tmp.pdf";
//实例化该文件,并以只写的方式打开
QFile pdfFile(path);
if(!pdfFile.open(QIODevice::WriteOnly))
{
QMessageBox::warning(this,tr("write File"),tr("Cannot open file:\n%1").arg(path));
return;
}
QPdfWriter *pdfWriter = new QPdfWriter(&pdfFile); //实例化QPdfWriter
QPainter *pic_painter = new QPainter(pdfWriter); //实例化QPainter
pdfWriter->setPageSize(QPagedPaintDevice::A4); //设置纸张为A4纸
pdfWriter->setResolution(QPrinter::ScreenResolution); //设置分辨率

// 开始绘图
QRect rect = pic_painter->viewport(); //获取painter的视口区域
int factor = rect.width()/pix.width(); //计算painter视口区域与抓取图片区域的尺寸比例因子
pic_painter->scale(factor,factor); //绘制时按照比例因子放大
pic_painter->drawPixmap(10,10,pix); //按照坐标画图

delete pic_painter;
delete pdfWriter;
pdfFile.close();

/********************* 复制进入剪切板 *********************/
QList<QUrl> copyfile;
QUrl url=QUrl::fromLocalFile(path); //待复制的文件
if(url.isValid()){
copyfile.push_back(url);
}else{
return;
}
QMimeData *data=new QMimeData;
data->setUrls(copyfile);

QClipboard *clip=QApplication::clipboard();
clip->setMimeData(data);
ui->textBrowserStatus->append("导出为pdf成功ok");
}