Subject: Setting paper size using PrtdevMode
Posted By: Fehrer Post Date: 12/12/2003 7:41:12 AM
Hi guys....I had a problem with printing an invoice report on a continuous paper 4.75"x5.5"

Everytime users click button cmdPrintInvoice on frmOrderForm in order to print an invoice report rptInvoice based on OrderID popped up by input box(set within the query), it always prints on normal A3 paper, which is 9.5"x11"...

Even tough I have already set the paper size on the Page Setup at Report design view and Print Dialog box for printing an invoice report with the paper size 4.75"x5.5" (half A3 paper size), it's still not working ...also there was no custom paper size function on the print dialog box

So, it is possible to force printing an invoice report with the paper size 4.75"x5.5" by using VBA code or how to change the default paper size (by inch) into cm...I was thinking the problem is related with PrtDevMode by setting the PaperLength and PaperWidth...but i am still learning about VBA and confuse in setting the papersize...I desperately need some help please...

Ohh, I'm using access xp on windows 2000 and Epson LQ1050+ printer (dot matrix)...sory for very long explanation...i tried to make it as clear as possible

Thanks a million in advance for any help and advice

Cheers,

Fehrer



Reply By: jemacc Reply Date: 12/12/2003 11:42:27 AM
this may shed some light

http://support.microsoft.com/?kbid=200546

Reply By: Fehrer Reply Date: 12/14/2003 11:23:48 AM
Hi jemacc,

Thanks for ur advice...it's very helpful...
As I saw from the url u posted, i have made some modification to the vba coding because i'm using access xp and my printer doesn't have several paper trays....

Here is my coding...

Option Compare Database

Private Type str_DEVMODE
    RGB As String * 94
End Type

Private Type type_DEVMODE
    strDeviceName As String * 32
    intSpecVersion As Integer
    intDriverVersion As Integer
    intSize As Integer
    intDriverExtra As Integer
    lngFields As Long
    intOrientation As Integer
    intPaperSize As Integer
    intPaperLength As Integer
    intPaperWidth As Integer
    intScale As Integer
    intCopies As Integer
    intDefaultSource As Integer
    intPrintQuality As Integer
    intColor As Integer
    intDuplex As Integer
    intResolution As Integer
    intTTOption As Integer
    intCollate As Integer
    strFormName As String * 32
    lngPad As Long
    lngBits As Long
    lngPW As Long
    lngPH As Long
    lngDFI As Long
    lngDFr As Long
End Type

Public Sub CheckCustomPage(ByVal rptName As String)

    Dim DevString As str_DEVMODE
    Dim DM As type_DEVMODE
    
    Dim strDevModeExtra As String
    Dim rpt As Report
    Dim intResponse As Integer

    ' Opens report in Design view.
    DoCmd.OpenReport rptName, acDesign
    Set rpt = Reports(rptName)

    If Not IsNull(rpt.PrtDevMode) Then
        strDevModeExtra = rpt.PrtDevMode

        ' Gets current DEVMODE structure.
        DevString.RGB = strDevModeExtra
        LSet DM = DevString
        If DM.intPaperSize = 256 Then

            ' Display user-defined size.
            intResponse = MsgBox("The current custom page size is " & _
                          DM.intPaperWidth / 254 & " inches wide by " & _
                          DM.intPaperLength / 254 & " inches long. Do you want " & _
                          "to change the settings?", vbYesNo + vbQuestion)
        Else
            ' Currently not user-defined.
            intResponse = MsgBox("The report does not have a custom page size. " & _
                          "Do you want to define one?", vbYesNo + vbQuestion)
        End If

        If intResponse = vbYes Then
            ' User wants to change settings. Initialize fields.
            DM.lngFields = DM.lngFields Or DM.intPaperSize Or _
                           DM.intPaperLength Or DM.intPaperWidth

            ' Set custom page.
            DM.intPaperSize = 256

            ' Prompt for length and width.
            DM.intPaperLength = InputBox("Please enter page length in inches.") * 254
            DM.intPaperWidth = InputBox("Please enter page width in inches.") * 254

            ' Update property.
            LSet DevString = DM
            Mid(strDevModeExtra, 1, 94) = DevString.RGB
            rpt.PrtDevMode = strDevModeExtra
            
            DoCmd.OpenReport rptName, acNormal
            
        End If
    End If

    Set rpt = Nothing

End Sub

However, when i run CheckCustomPage("rptInvoice") on the immediate window, it still did not print on 4.75x5.5" page size...was there something wrong with the vba coding...or is it because my printer EPSON LQ 1050+ does not support custom size paper?

What do u think about this?
Have anyone had experience this problem? I'm desperately need help

Cheers,
Fehrer



Reply By: jemacc Reply Date: 12/14/2003 5:50:21 PM
Check your printer documentation.  There may be some escape code you may have to change.

Reply By: Fehrer Reply Date: 12/16/2003 9:50:23 AM
hi jemacc,

unfortunately, my printer is quite pretty old...it's EPSON LQ 1050+ dot matrix...and i lost its documentation ...any other suggestion?

cheers,

fehrer

quote:
Originally posted by jemacc

Check your printer documentation.  There may be some escape code you may have to change.





Reply By: jemacc Reply Date: 12/16/2003 3:35:29 PM
Do you remember how to change the printer mode?  Epson had some unique settings with thier printers.  I believe you can still get the documentation.  If I find the esc codes I will send them to you.


Go to topic 7491

Return to index page 985
Return to index page 984
Return to index page 983
Return to index page 982
Return to index page 981
Return to index page 980
Return to index page 979
Return to index page 978
Return to index page 977
Return to index page 976