Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [VB6] Printer - non carica font se ruoto il testo

    Se cambio la font di un testo ruotato, alcune font me le accetta (es. Arial Narrow, Courier New), altre non le riconosce (es. Windings, OCR-B-10 BT) e le sostituisce con quello di default (Arial). Se le stesse font le uso semplicemente con l'oggetto printer senza ruotare il testo, allora me le riconosce. Da che può dipendere? Allego il codice.
    Grazie
    codice:
    Private Const LF_FACESIZE = 32
    
    Private Type LOGFONT
       lfHeight As Long
       lfWidth As Long
       lfEscapement As Long
       lfOrientation As Long
       lfWeight As Long
       lfItalic As Byte
       lfUnderline As Byte
       lfStrikeOut As Byte
       lfCharSet As Byte
       lfOutPrecision As Byte
       lfClipPrecision As Byte
       lfQuality As Byte
       lfPitchAndFamily As Byte
       lfFaceName As String * LF_FACESIZE
    End Type
    
    Private Type DOCINFO
       cbSize As Long
       lpszDocName As String
       lpszOutput As String
       lpszDatatype As String
       fwType As Long
    End Type
    
    Private Declare Function CreateFontIndirect Lib "gdi32" Alias _
    "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
    
    Private Declare Function SelectObject Lib "gdi32" _
    (ByVal hdc As Long, ByVal hObject As Long) As Long
    
    Private Declare Function DeleteObject Lib "gdi32" _
    (ByVal hObject As Long) As Long
    
    Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" _
    (ByVal lpDriverName As String, ByVal lpDeviceName As String, _
    ByVal lpOutput As Long, ByVal lpInitData As Long) As Long
    
    Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) _
    As Long
    
    Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" _
    (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, _
    ByVal lpString As String, ByVal nCount As Long) As Long ' or Boolean
    
    Private Declare Function StartDoc Lib "gdi32" Alias "StartDocA" _
    (ByVal hdc As Long, lpdi As DOCINFO) As Long
    
    Private Declare Function EndDoc Lib "gdi32" (ByVal hdc As Long) _
    As Long
    
    Private Declare Function StartPage Lib "gdi32" (ByVal hdc As Long) _
    As Long
    
    Private Declare Function EndPage Lib "gdi32" (ByVal hdc As Long) _
    As Long
    
    Sub StampaTestoVerticale(Testo As String, X As Double, Y As Double, TipoFont As String, DESIREDFONTSIZE As Double)
        Dim OutString As String
        Dim lf As LOGFONT
        Dim result As Long
        Dim hOldfont As Long
        Dim hPrintDc As Long
        Dim hFont As Long
        Dim CostanteMM As Double
        
        'Printer.Print "Printer Object"
        
        lf.lfFaceName = Space(Len(lf.lfFaceName))
        lf.lfFaceName = TipoFont & Chr(0)
        
        hPrintDc = Printer.hdc
        OutString = Trim(Testo)
    
        'CostanteMM = 56.6928579108186
        CostanteMM = 56.6928579108186 / 48 * 40
    
        lf.lfEscapement = 900
        lf.lfHeight = (DESIREDFONTSIZE * -20) / Printer.TwipsPerPixelY
        hFont = CreateFontIndirect(lf)
        hOldfont = SelectObject(hPrintDc, hFont)
        result = TextOut(hPrintDc, X * CostanteMM, Y * CostanteMM, OutString, Len(OutString))
        result = SelectObject(hPrintDc, hOldfont)
        result = DeleteObject(hFont)
    End Sub
    
    Sub Prova
        StampaTestoVerticale "q", 37, 243, "Courier New", 16  'funziona
        StampaTestoVerticale "q", 47, 243, "Wingdings", 16  'non funziona, sostituisce con Arial
        Printer.FontName = "Wingdings"  'funziona
        Printer.Print "q"
    End Sub

  2. #2
    Utente di HTML.it L'avatar di tippolo
    Registrato dal
    Dec 2005
    Messaggi
    103
    ciao
    non dipende dal codice, ma alcuni font non possono essere ruotati

  3. #3
    Originariamente inviato da tippolo
    ciao
    non dipende dal codice, ma alcuni font non possono essere ruotati
    Non è il caso di queste font.
    L' OCR-B-10 BT è quella font (obbligatoria) utilizzata come stringa ottica nei bollettini postali ruotata di 90° ed è una delle più comuni. Se apri un pdf di un bollettino, la stringa ottica te la fa selezionare come font, non come immagine. Inoltre il problema si presenta comunque se con questo metodo non ruoto il testo.
    Quasi sicuramente dipende da queste font, ma non riesco a capire ancora cosa hanno in comune rispetto alle altre che funzionano...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.