问题:
我正在打印自定义尺寸的场景,打印必须适用于各种打印机,标准或自定义尺寸,或滚动(特别是这个)。一些自定义打印机是边对边的。
用户定义的画布可能与打印机纸张尺寸匹配也可能不匹配....如果图像小于纸张,则某些打印机将使其居中,其他打印机(如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或杯子找到最小的打印机边距?