コード例 #1
0
ファイル: cmndata.cpp プロジェクト: czxxjtu/wxPython-1
// 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);
    }
}
コード例 #2
0
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 );
}
コード例 #3
0
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;
}