QPageSize QPlatformPrintDevice::supportedPageSize(const QPageSize &pageSize) const { if (!pageSize.isValid()) return QPageSize(); if (!m_havePageSizes) loadPageSizes(); // First try match on name and id for case where printer defines same size twice with different names // e.g. Windows defines DMPAPER_11X17 and DMPAPER_TABLOID with names "11x17" and "Tabloid", but both // map to QPageSize::Tabloid / PPD Key "Tabloid" / ANSI B Tabloid if (pageSize.id() != QPageSize::Custom) { foreach (const QPageSize &ps, m_pageSizes) { if (ps.id() == pageSize.id() && ps.name() == pageSize.name()) return ps; } }
QPageSize QWindowsPrintDevice::defaultPageSize() const { if (!m_havePageSizes) loadPageSizes(); QPageSize pageSize; if (LPDEVMODE pDevMode = getDevmode(m_hPrinter, m_id)) { // Get the default paper size if (pDevMode->dmFields & DM_PAPERSIZE) { // Find the supported page size that matches, in theory default should be one of them foreach (const QPageSize &ps, m_pageSizes) { if (ps.windowsId() == pDevMode->dmPaperSize) { pageSize = ps; break; } } } // Clean-up free(pDevMode); }
QPageSize QWindowsPrintDevice::defaultPageSize() const { if (!m_havePageSizes) loadPageSizes(); QPageSize pageSize; // Allocate the required DEVMODE buffer DWORD dmSize = DocumentProperties(NULL, m_hPrinter, (LPWSTR)m_id.utf16(), NULL, NULL, 0); LPDEVMODE pDevMode = (LPDEVMODE)malloc(dmSize); // Get the default DevMode DWORD result = DocumentProperties(NULL, m_hPrinter, (LPWSTR)m_id.utf16(), pDevMode, NULL, DM_OUT_BUFFER); // Get the default paper size if (result == IDOK && pDevMode->dmFields & DM_PAPERSIZE) { // Find the supported page size that matches, in theory default should be one of them foreach (const QPageSize &ps, m_pageSizes) { if (ps.windowsId() == pDevMode->dmPaperSize) { pageSize = ps; break; } } }
QList<QPageSize> QPlatformPrintDevice::supportedPageSizes() const { if (!m_havePageSizes) loadPageSizes(); return m_pageSizes.toList(); }