现在我需要实现pdf的两步操作:
1.我需要将Qt的图片导出到pdf文件保存;
2.可以打开已保存的pdf到qt窗口,每页再用图片显示出来。
不知道用什么方式可以实现?
如果Qt不行,C++实现也可以。
多谢。
23 个解决方案
#1
Qt没有原生态支持PDF
楼主可以试试imageMagick提供的Magic++的C++接口
楼主可以试试imageMagick提供的Magic++的C++接口
#2
或者找找libPDF什么的
#3
这个应该只能看PDF有没有可用的接口让实现你的功能了~
#4
我看网上有人用这个实现过的,可以用Qt保存图片到pdf。
网上有现成的代码,保存文字到pdf,但是没有图片的。
有没有做过的给个建议?
网上有现成的代码,保存文字到pdf,但是没有图片的。
有没有做过的给个建议?
#5
他还不是用的其他库,你可以看看他用的什么库,借鉴下。
我建议imageMagick
#6
Qt将文字什么的保存成pdf格式是可以的,跟保存成图片一样,不过参数选pdf就可以了,但是Qt不能直接打开pdf文件进行浏览,得需要第三方库
#7
查查pdf提供了什么操作接口
#8
Qt中有demo的
#9
不是吧,能支持pdf写操作?
#10
知道的能不能给段代码,或者链接,我找了半天没找到啊。
Qt demo是在哪儿啊,告诉一下啊。
Qt demo是在哪儿啊,告诉一下啊。
#11
http://qt-apps.org/content/show.php/qpdfview?content=152086
QT做的PDF的工程源码。
QT做的PDF的工程源码。
#12
qt将文字,或者图片或者widget的内容保存为pdf毫无压力,前几天刚研究了,但是没研究过读取pdf……
下面是研究用的一些代码,因为是研究,所以没有逻辑……
QPrinter printer(QPrinter::HighResolution);
//QPrinter printer(QPrinter::ScreenResolution);
printer.setPageSize(QPrinter::A4);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("test.pdf");
int physiclaDpiX = printer.physicalDpiX();
int physiclaDpiY = printer.physicalDpiY();
int widthMM = printer.widthMM();
int heighMM = printer.heightMM();
QPixmap p= QPixmap::grabWidget(this, 0, 0, width(), height());
QPainter painter;
painter.begin(&printer);
QRect rect = painter.viewport();
QRect rect2 = painter.window();
//QSize size = p.size();
//size.scale(rect.size(), Qt::KeepAspectRatio); //此处保证图片显示完整
//painter.setViewport(rect.x(), rect.y(),size.width(), size.height());
//painter.setWindow(p.rect());
//
// painter.setViewport(rect.x(), rect.y(), rect.width()/2, rect.height()/2);
//painter.setWindow(rect.x(), rect.y(), rect.width()/2, rect.height()/2);
//rect = painter.viewport();
//rect2 = painter.window();
//painter.scale(2,2); //这个会将图像(所有要画的东西)在pdf上放大一倍
painter.scale(((float)rect.width())/p.width(),((float)rect.width())/p.width());
painter.drawPixmap(0,0,p);
QPen pen; //画笔
pen.setColor(QColor(0,0,0));
pen.setWidth(2);
painter.setPen(pen);
painter.drawRect(50, 50 , 2412, 2412); // 2362(像素)/1200(pdf分辨率) = 1.9683333 inch = 5cm
printer.newPage();
painter.drawPixmap(0,0,p);
painter.end();
有一点你要知道的是,pdf默认dpi还是ppi是1200,非常大,所以需要scale,你懂得!
下面是研究用的一些代码,因为是研究,所以没有逻辑……
QPrinter printer(QPrinter::HighResolution);
//QPrinter printer(QPrinter::ScreenResolution);
printer.setPageSize(QPrinter::A4);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("test.pdf");
int physiclaDpiX = printer.physicalDpiX();
int physiclaDpiY = printer.physicalDpiY();
int widthMM = printer.widthMM();
int heighMM = printer.heightMM();
QPixmap p= QPixmap::grabWidget(this, 0, 0, width(), height());
QPainter painter;
painter.begin(&printer);
QRect rect = painter.viewport();
QRect rect2 = painter.window();
//QSize size = p.size();
//size.scale(rect.size(), Qt::KeepAspectRatio); //此处保证图片显示完整
//painter.setViewport(rect.x(), rect.y(),size.width(), size.height());
//painter.setWindow(p.rect());
//
// painter.setViewport(rect.x(), rect.y(), rect.width()/2, rect.height()/2);
//painter.setWindow(rect.x(), rect.y(), rect.width()/2, rect.height()/2);
//rect = painter.viewport();
//rect2 = painter.window();
//painter.scale(2,2); //这个会将图像(所有要画的东西)在pdf上放大一倍
painter.scale(((float)rect.width())/p.width(),((float)rect.width())/p.width());
painter.drawPixmap(0,0,p);
QPen pen; //画笔
pen.setColor(QColor(0,0,0));
pen.setWidth(2);
painter.setPen(pen);
painter.drawRect(50, 50 , 2412, 2412); // 2362(像素)/1200(pdf分辨率) = 1.9683333 inch = 5cm
printer.newPage();
painter.drawPixmap(0,0,p);
painter.end();
有一点你要知道的是,pdf默认dpi还是ppi是1200,非常大,所以需要scale,你懂得!
#13
这个我看了,源码也下了,但是Poppler-Qt4这个库去哪儿找啊?
有现在的库拿来用吗?还是需要下载源码编译?
#14
很好的东西 还得学习呀
#15
qt C++ gui这本书里面就有讲
#16
解决不了啊,是个难题。。
#17
请问qt怎么生成pdf,内容有文本、图片、表格,怎么组织这些内容到一页pdf中啊?
#18
http://m.oschina.net/blog/14279
我最近也在搞这个,我主要是用来显示用,有资料多谢分享!
我最近也在搞这个,我主要是用来显示用,有资料多谢分享!
#19
各位前辈这个问题解决了么,我现在遇到使用Qt打开pdf档的图片的需求,求赐教!
#20
实在Linux环境下
#21
问题解决了吗?现在正在研究!好像很不好弄啊!各位大神!!请支持!
#22
上面的程序在linux下图片创建pdf是不行的
#23
//图片生成pdf
void ProcessImage::image_to_pdf(QPixmap pixmap,QString file_path)
{
QPrinter printer_pixmap(QPrinter::HighResolution);
printer_pixmap.setPageSize(QPrinter::A4); //设置纸张大小为A4
printer_pixmap.setOutputFormat(QPrinter::PdfFormat); //设置输出格式为pdf
printer_pixmap.setOutputFileName(file_path); //设置输出路径
QPainter painter_pixmap;
painter_pixmap.begin(&printer_pixmap);
QRect rect = painter_pixmap.viewport();
int multiple = rect.width()/pixmap.width();
painter_pixmap.scale(multiple, multiple); //将图像(所有要画的东西)在pdf上放大multiple-1倍
painter_pixmap.drawPixmap(0, 0, pixmap); //画图
painter_pixmap.end();
}
//文本生成pdf
void ProcessImage::text_to_pdf(QString text,QString file_path)
{
QPrinter printer_text;
printer_text.setOutputFormat(QPrinter::PdfFormat);
printer_text.setOutputFileName(file_path);
QPainter painter_text;
painter_text.begin(&printer_text);
QPoint point(10, 10);
painter_text.drawText(point, text);
text.clear();
//printer_text.newPage(); //生成新的一页,可继续插入
painter_text.end();
}
void ProcessImage::image_to_pdf(QPixmap pixmap,QString file_path)
{
QPrinter printer_pixmap(QPrinter::HighResolution);
printer_pixmap.setPageSize(QPrinter::A4); //设置纸张大小为A4
printer_pixmap.setOutputFormat(QPrinter::PdfFormat); //设置输出格式为pdf
printer_pixmap.setOutputFileName(file_path); //设置输出路径
QPainter painter_pixmap;
painter_pixmap.begin(&printer_pixmap);
QRect rect = painter_pixmap.viewport();
int multiple = rect.width()/pixmap.width();
painter_pixmap.scale(multiple, multiple); //将图像(所有要画的东西)在pdf上放大multiple-1倍
painter_pixmap.drawPixmap(0, 0, pixmap); //画图
painter_pixmap.end();
}
//文本生成pdf
void ProcessImage::text_to_pdf(QString text,QString file_path)
{
QPrinter printer_text;
printer_text.setOutputFormat(QPrinter::PdfFormat);
printer_text.setOutputFileName(file_path);
QPainter painter_text;
painter_text.begin(&printer_text);
QPoint point(10, 10);
painter_text.drawText(point, text);
text.clear();
//printer_text.newPage(); //生成新的一页,可继续插入
painter_text.end();
}
#1
Qt没有原生态支持PDF
楼主可以试试imageMagick提供的Magic++的C++接口
楼主可以试试imageMagick提供的Magic++的C++接口
#2
或者找找libPDF什么的
#3
这个应该只能看PDF有没有可用的接口让实现你的功能了~
#4
我看网上有人用这个实现过的,可以用Qt保存图片到pdf。
网上有现成的代码,保存文字到pdf,但是没有图片的。
有没有做过的给个建议?
网上有现成的代码,保存文字到pdf,但是没有图片的。
有没有做过的给个建议?
#5
他还不是用的其他库,你可以看看他用的什么库,借鉴下。
我建议imageMagick
#6
Qt将文字什么的保存成pdf格式是可以的,跟保存成图片一样,不过参数选pdf就可以了,但是Qt不能直接打开pdf文件进行浏览,得需要第三方库
#7
查查pdf提供了什么操作接口
#8
Qt中有demo的
#9
不是吧,能支持pdf写操作?
#10
知道的能不能给段代码,或者链接,我找了半天没找到啊。
Qt demo是在哪儿啊,告诉一下啊。
Qt demo是在哪儿啊,告诉一下啊。
#11
http://qt-apps.org/content/show.php/qpdfview?content=152086
QT做的PDF的工程源码。
QT做的PDF的工程源码。
#12
qt将文字,或者图片或者widget的内容保存为pdf毫无压力,前几天刚研究了,但是没研究过读取pdf……
下面是研究用的一些代码,因为是研究,所以没有逻辑……
QPrinter printer(QPrinter::HighResolution);
//QPrinter printer(QPrinter::ScreenResolution);
printer.setPageSize(QPrinter::A4);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("test.pdf");
int physiclaDpiX = printer.physicalDpiX();
int physiclaDpiY = printer.physicalDpiY();
int widthMM = printer.widthMM();
int heighMM = printer.heightMM();
QPixmap p= QPixmap::grabWidget(this, 0, 0, width(), height());
QPainter painter;
painter.begin(&printer);
QRect rect = painter.viewport();
QRect rect2 = painter.window();
//QSize size = p.size();
//size.scale(rect.size(), Qt::KeepAspectRatio); //此处保证图片显示完整
//painter.setViewport(rect.x(), rect.y(),size.width(), size.height());
//painter.setWindow(p.rect());
//
// painter.setViewport(rect.x(), rect.y(), rect.width()/2, rect.height()/2);
//painter.setWindow(rect.x(), rect.y(), rect.width()/2, rect.height()/2);
//rect = painter.viewport();
//rect2 = painter.window();
//painter.scale(2,2); //这个会将图像(所有要画的东西)在pdf上放大一倍
painter.scale(((float)rect.width())/p.width(),((float)rect.width())/p.width());
painter.drawPixmap(0,0,p);
QPen pen; //画笔
pen.setColor(QColor(0,0,0));
pen.setWidth(2);
painter.setPen(pen);
painter.drawRect(50, 50 , 2412, 2412); // 2362(像素)/1200(pdf分辨率) = 1.9683333 inch = 5cm
printer.newPage();
painter.drawPixmap(0,0,p);
painter.end();
有一点你要知道的是,pdf默认dpi还是ppi是1200,非常大,所以需要scale,你懂得!
下面是研究用的一些代码,因为是研究,所以没有逻辑……
QPrinter printer(QPrinter::HighResolution);
//QPrinter printer(QPrinter::ScreenResolution);
printer.setPageSize(QPrinter::A4);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("test.pdf");
int physiclaDpiX = printer.physicalDpiX();
int physiclaDpiY = printer.physicalDpiY();
int widthMM = printer.widthMM();
int heighMM = printer.heightMM();
QPixmap p= QPixmap::grabWidget(this, 0, 0, width(), height());
QPainter painter;
painter.begin(&printer);
QRect rect = painter.viewport();
QRect rect2 = painter.window();
//QSize size = p.size();
//size.scale(rect.size(), Qt::KeepAspectRatio); //此处保证图片显示完整
//painter.setViewport(rect.x(), rect.y(),size.width(), size.height());
//painter.setWindow(p.rect());
//
// painter.setViewport(rect.x(), rect.y(), rect.width()/2, rect.height()/2);
//painter.setWindow(rect.x(), rect.y(), rect.width()/2, rect.height()/2);
//rect = painter.viewport();
//rect2 = painter.window();
//painter.scale(2,2); //这个会将图像(所有要画的东西)在pdf上放大一倍
painter.scale(((float)rect.width())/p.width(),((float)rect.width())/p.width());
painter.drawPixmap(0,0,p);
QPen pen; //画笔
pen.setColor(QColor(0,0,0));
pen.setWidth(2);
painter.setPen(pen);
painter.drawRect(50, 50 , 2412, 2412); // 2362(像素)/1200(pdf分辨率) = 1.9683333 inch = 5cm
printer.newPage();
painter.drawPixmap(0,0,p);
painter.end();
有一点你要知道的是,pdf默认dpi还是ppi是1200,非常大,所以需要scale,你懂得!
#13
这个我看了,源码也下了,但是Poppler-Qt4这个库去哪儿找啊?
有现在的库拿来用吗?还是需要下载源码编译?
#14
很好的东西 还得学习呀
#15
qt C++ gui这本书里面就有讲
#16
解决不了啊,是个难题。。
#17
请问qt怎么生成pdf,内容有文本、图片、表格,怎么组织这些内容到一页pdf中啊?
#18
http://m.oschina.net/blog/14279
我最近也在搞这个,我主要是用来显示用,有资料多谢分享!
我最近也在搞这个,我主要是用来显示用,有资料多谢分享!
#19
各位前辈这个问题解决了么,我现在遇到使用Qt打开pdf档的图片的需求,求赐教!
#20
实在Linux环境下
#21
问题解决了吗?现在正在研究!好像很不好弄啊!各位大神!!请支持!
#22
上面的程序在linux下图片创建pdf是不行的
#23
//图片生成pdf
void ProcessImage::image_to_pdf(QPixmap pixmap,QString file_path)
{
QPrinter printer_pixmap(QPrinter::HighResolution);
printer_pixmap.setPageSize(QPrinter::A4); //设置纸张大小为A4
printer_pixmap.setOutputFormat(QPrinter::PdfFormat); //设置输出格式为pdf
printer_pixmap.setOutputFileName(file_path); //设置输出路径
QPainter painter_pixmap;
painter_pixmap.begin(&printer_pixmap);
QRect rect = painter_pixmap.viewport();
int multiple = rect.width()/pixmap.width();
painter_pixmap.scale(multiple, multiple); //将图像(所有要画的东西)在pdf上放大multiple-1倍
painter_pixmap.drawPixmap(0, 0, pixmap); //画图
painter_pixmap.end();
}
//文本生成pdf
void ProcessImage::text_to_pdf(QString text,QString file_path)
{
QPrinter printer_text;
printer_text.setOutputFormat(QPrinter::PdfFormat);
printer_text.setOutputFileName(file_path);
QPainter painter_text;
painter_text.begin(&printer_text);
QPoint point(10, 10);
painter_text.drawText(point, text);
text.clear();
//printer_text.newPage(); //生成新的一页,可继续插入
painter_text.end();
}
void ProcessImage::image_to_pdf(QPixmap pixmap,QString file_path)
{
QPrinter printer_pixmap(QPrinter::HighResolution);
printer_pixmap.setPageSize(QPrinter::A4); //设置纸张大小为A4
printer_pixmap.setOutputFormat(QPrinter::PdfFormat); //设置输出格式为pdf
printer_pixmap.setOutputFileName(file_path); //设置输出路径
QPainter painter_pixmap;
painter_pixmap.begin(&printer_pixmap);
QRect rect = painter_pixmap.viewport();
int multiple = rect.width()/pixmap.width();
painter_pixmap.scale(multiple, multiple); //将图像(所有要画的东西)在pdf上放大multiple-1倍
painter_pixmap.drawPixmap(0, 0, pixmap); //画图
painter_pixmap.end();
}
//文本生成pdf
void ProcessImage::text_to_pdf(QString text,QString file_path)
{
QPrinter printer_text;
printer_text.setOutputFormat(QPrinter::PdfFormat);
printer_text.setOutputFileName(file_path);
QPainter painter_text;
painter_text.begin(&printer_text);
QPoint point(10, 10);
painter_text.drawText(point, text);
text.clear();
//printer_text.newPage(); //生成新的一页,可继续插入
painter_text.end();
}