问题:
我正在打印自定义尺寸的场景,打印必须在各种打印机上工作,标准或自定义尺寸,或卷筒纸(尤其是这个)。一些定制打印机是边到边的。
用户定义的画布可能会或可能不会匹配打印机的纸张尺寸......如果图像小于纸张,一些打印机会将其居中,而其他打印机(如 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
对于不同的提供尺寸,每种尺寸都有不同的边距 - 所以这违背了最小利润的想法。
我认为最小边距(最大可打印区域)不应该取决于选择的纸张,而是取决于打印机的几何形状。
我考虑获取 cups ppd 选项值ImageableArea
- 但如果我不使用该纸张尺寸,则将其用于“默认”纸张尺寸似乎没有用 - 对于自定义纸张尺寸,有一个范围,所以我不知道我能从中得到什么。
另外-我什至无法获得以下杯子选项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 或 cups 找到最小可能的打印机边距?