如何找到最低打印机边距?

时间:2016-10-12 16:42:20

标签: qt printing cups page-size ppd

问题:

我正在打印自定义尺寸的场景,打印必须适用于各种打印机,标准或自定义尺寸,或滚动(特别是这个)。一些自定义打印机是边对边的。

用户定义的画布可能与打印机纸张尺寸匹配也可能不匹配....如果图像小于纸张,则某些打印机将使其居中,其他打印机(如HP)将其打印在左上角。

在某些打印机上,我可以设置“自定义”纸张,其他人则不支持。

如果打印机具有最小边距,则某些打印机似乎会剪切,其他打印机会从左上边缘进行渲染,并且可能不会剪裁图像尺寸。

我想自己处理剪辑和边距,并将图像发送到打印机,因为它应该适合“页面”。

m_printer->setPaperSize(QPrinter::Custom);   //gives
QPrinter::setPaperSize: Illegal paper size 30

假设以下工作,

m_printer->setPaperSize(canvasRectangle.size(), QPrinter::Point);

在杯子中获取标记的纸张尺寸仍然会返回ppd中标记的默认值(Letter,w4h4,...)(尽管我可以打印或剪切该尺寸)

我需要什么:

我需要为(选定/自定义)纸张/页面找到最小边距

我以为只要求他们就可以获得利润

qreal left, right, top, bottom;
m_printer->getPageMargins(&left, &top, &right, &bottom, QPrinter::Point);
qDebug() << left << right << top << bottom;

但无论打印机(我试过HP,PDF和自定义边对边打印机),我都得到10 10 10 10。

我以为我会先将它们设置为0 ...我回到了0.(但是打印仍然使用了一些微小的边距,根据设备的不同,它会被剪切或移动,除了边缘到边缘的打印机 - 所以当我没有错误时,如果0不可能将边距设置为0,QPrinter告诉我它将边距设置为0成功。)

现在我正在尝试使用cups(和Qt 4.8)在Linux中完成这项工作 - 我查看了各种打印机的ppd,但我看到的ImageableArea用于提供不同的尺寸,每个尺寸都有不同的边距 - 因此无视最小边距的想法。

我想到最小边距(对于最大可打印区域)不应该取决于所选的纸张,而是取决于打印机的几何形状。

我考虑过为ImageableArea获取杯子ppd选项值 - 但如果我不使用该纸张尺寸,那么获取“默认”纸张尺寸似乎没有用 - 而对于自定义纸张尺寸,则一个范围,所以我不知道我能从中得到什么。

另外 - 我甚至无法为ImageableArea获取杯子选项:

const cups_dest_t* pDest = &m_pPrinters[iPrinterNumber];
for (int i = 0; i < pDest->num_options; ++i) 
    if (strcmp(pDest->options[i].name, pName) == 0) 
        // I can show options like "PageSize", "PageRegion" but not "ImageableArea"

我很难理解这一点......

如何使用Qt或杯子找到最小的打印机边距?

0 个答案:

没有答案