我有一个包含数百张图片(照片)的文件,我需要在预览中向某些人展示。这个预览应该是一个采购订单(快速,没有任何"亲")我会给他们,以便人们可以在他们想要一张图片的情况下放一个十字架(就这么简单)。
我尝试自动生成采购订单,PDF上每页有两个(A4)。
我使用Qt / C ++和三个对象:
QPdfWriter
QPainter的
QImage的
这是pdf生成类的开头:
int order = 1;
qDebug() << "pdf creation";
QString logoName = QFileDialog::getOpenFileName(0, "Sélectionner le logo", QString(), "Images (*.png *.bmp *.jpg)");
QString fileName = QFileDialog::getSaveFileName(0, "Export PDF",
QString(), "*.pdf");
QString dir = QFileDialog::getExistingDirectory(0, "Sélectionner le dossier de photos");
QFont titleFont("Arial", 24);
titleFont.setUnderline(true);
QFont textFont("Times new roman", 12);
QDirIterator it(dir);
if (!fileName.isEmpty()) {
if (QFileInfo(fileName).suffix().isEmpty())
fileName.append(".pdf");
QPdfWriter writer(fileName);
QPainter painter(&writer);
painter.setRenderHint(QPainter::Antialiasing);
int height = painter.device()->height();
int semi = height/2;
int width = painter.device()->width();
int digits = 1;
qDebug() << "height : " << height << " width : " << width;
QImage logo(logoName);
QImage finalLogo = logo.scaled(3750, 1250, Qt::KeepAspectRatio);
while(it.hasNext()){
it.next();
digits = countDigits(order);
if(it.fileInfo().isFile()){
if(order%2!=0){
painter.drawImage(300,100,finalLogo);
QImage currentPreview(it.filePath());
QImage finalPreview = currentPreview.scaled(3250,4000, Qt::KeepAspectRatio);
painter.drawImage(650,1500,finalPreview);
其余的只是文字/边框的绘制。
我在调试中尝试过:工作正常 我在发布时编译,将所有.dll放在文件中(包括平台)并在没有Qt的情况下运行它:工作正常
然后我把文件放在usb棒上,我把它放在我用于图片的另一台电脑上,那台电脑没有Qt。 我启动了.exe,应用程序与我的dev-pc完全相同
但是当我调用PDF创建时,我用我的数据填充了FileDialogs,它运行了大约30秒(文件中有很多图片)并生成PDF。
我打开它,而不是PDF上的单张图片。
所有的行和文字都没有任何问题,它会生成正确数量的采购订单,但不会生成一张图片......既不是徽标(QImage finalLogo)
也不是预览(QImage finalPreview)
。
就像QPainter::drawText()/drawLine()
确实有效,但不是QPainter::drawImage
。
令人不安,因为它在计算机上运行而在另一台计算机上运行...编译/发布时我做错了什么?
答案 0 :(得分:0)
(Answered in the comments - converted to a community wiki.)
OP写道:好的!我想到了。处理jpeg的dll不在正确的目录中,我把它移到了正确的目录中,并且它有效。