// Use paper size defined in this object to set the wxPrintData // paper id void wxPageSetupDialogData::CalculateIdFromPaperSize() { wxASSERT_MSG( (wxThePrintPaperDatabase != NULL), wxT("wxThePrintPaperDatabase should not be NULL. Do not create global print dialog data objects.") ); wxSize sz = GetPaperSize(); wxPaperSize id = wxThePrintPaperDatabase->GetSize(wxSize(sz.x* 10, sz.y * 10)); if (id != wxPAPER_NONE) { m_printData.SetPaperId(id); } }
void udPageElementItem::UpdateInnerContent() { // získání rodičovského elementu uddPageElement* page = wxDynamicCast( GetParent(), uddPageElement ); // nastavit velikost stránky page->SetPageSize( MilimetersToPixels( GetPaperSize( ( PaperSize ) m_nPaperFormat ) ) ); // nastavit okraje page->SetMargins( MilimetersToPixels( m_nMarginLeft ), MilimetersToPixels( m_nMarginTop ), MilimetersToPixels( m_nMarginRight ), MilimetersToPixels( m_nMarginBottom) ); // vycentrování - !!! PROVIZORNÍ !!!, lepší by asi byl nějaký vlastní grid //wxSize canvasSize = page->GetParentCanvas()->GetSize(); wxSize canvasSize = IPluginManager::Get()->GetMainNotebook()->GetSize(); // nutné při deserializaci canvasSize = canvasSize.operator *=(0.5); wxRealPoint pageSize = page->GetRectSize(); int x = canvasSize.x - pageSize.x / 2; int y = 30; page->SetRelativePosition( x, y ); }
bool PrintFile(BaseEngine *engine, WCHAR *printerName, bool displayErrors, const WCHAR *settings) { bool ok = false; //if (!HasPermission(Perm_PrinterAccess)) // return false; #ifndef DISABLE_DOCUMENT_RESTRICTIONS if (engine && !engine->AllowsPrinting()) engine = nullptr; #endif if (!engine) { if (displayErrors) MessageBoxWarning(nullptr, _TR("Cannot print this file"), _TR("Printing problem.")); return false; } ScopedMem<WCHAR> defaultPrinter; if (!printerName) { defaultPrinter.Set(GetDefaultPrinterName()); printerName = defaultPrinter; } HANDLE printer; BOOL res = OpenPrinter(printerName, &printer, nullptr); if (!res) { if (displayErrors) MessageBoxWarning(nullptr, _TR("Printer with given name doesn't exist"), _TR("Printing problem.")); return false; } LONG returnCode = 0; LONG structSize = 0; LPDEVMODE devMode = nullptr; // get printer driver information DWORD needed = 0; GetPrinter(printer, 2, nullptr, 0, &needed); ScopedMem<PRINTER_INFO_2> infoData((PRINTER_INFO_2 *)AllocArray<BYTE>(needed)); if (infoData) res = GetPrinter(printer, 2, (LPBYTE)infoData.Get(), needed, &needed); if (!res || !infoData || needed <= sizeof(PRINTER_INFO_2)) goto Exit; structSize = DocumentProperties(nullptr, printer, printerName, nullptr, /* Asking for size, so */ nullptr, /* not used. */ 0); /* Zero returns buffer size. */ if (structSize < sizeof(DEVMODE)) { // If failure, inform the user, cleanup and return failure. if (displayErrors) MessageBoxWarning(nullptr, _TR("Could not obtain Printer properties"), _TR("Printing problem.")); goto Exit; } devMode = (LPDEVMODE)malloc(structSize); if (!devMode) goto Exit; // Get the default DevMode for the printer and modify it for your needs. returnCode = DocumentProperties(nullptr, printer, printerName, devMode, /* The address of the buffer to fill. */ nullptr, /* Not using the input buffer. */ DM_OUT_BUFFER); /* Have the output buffer filled. */ if (IDOK != returnCode) { // If failure, inform the user, cleanup and return failure. if (displayErrors) MessageBoxWarning(nullptr, _TR("Could not obtain Printer properties"), _TR("Printing problem.")); goto Exit; } ClosePrinter(printer); printer = nullptr; // set paper size to match the size of the document's first page // (will be overridden by any paper= value in -print-settings) devMode->dmPaperSize = GetPaperSize(engine); { Print_Advanced_Data advanced; Vec<PRINTPAGERANGE> ranges; ApplyPrintSettings(settings, engine->PageCount(), ranges, advanced, devMode); PrintData pd(engine, infoData, devMode, ranges, advanced); ok = PrintToDevice(pd); if (!ok && displayErrors) MessageBoxWarning(nullptr, _TR("Couldn't initialize printer"), _TR("Printing problem.")); } Exit: free(devMode); if (printer) ClosePrinter(printer); return ok; }