Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [VB6] Creare PDF

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    28

    [VB6] Creare PDF

    Ambiente: VB6 - Windows 7 (32 o 64 bit)
    Come "stampare" un file PDF ?
    In altre parole come creare un file PDF ?
    Quale software aggiuntivo utilizzare ?
    PDFCreator sembra non funzionare.
    Ogni suggerimento è bene accetto. Grazie.

  2. #2
    Utente di HTML.it L'avatar di Giorg10
    Registrato dal
    Aug 2014
    Messaggi
    141
    Puoi utilizzare Inkscape è per il disegno vettoriale ma modifica e crea anche PDF in manaiera eccellente.

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    A parte il fatto che non capisco proprio cosa c'entri VB6 con Inkscape, che è un programma di grafica vettoriale, il che significa tutt'altra cosa che stampare in PDF. Certo, anche Adobe Illustrator genera PDF, Photoshop, e via discorrendo, e comunque credo che oggi come oggi sia difficile trovare programmi che non salvano nel formato PDF.

    Generare un PDF da VB6 è un'altro paio di maniche.

    Tornando al vero problema:
    PDF Creator funziona benissimo, come qualsiasi altra stampate PDF virtuale.

    Quindi alla domanda:

    Come "stampare" un file PDF ?

    la risposta è:
    seleziona la stampante PDF Creator nella finestra di stampa.


  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    28
    Grazie ma io pensavo a qualcosa di più semplice ed immediato che mi consenta di utilizzare lo stesso medesimo codice che serve per stampare su carta (i vari Printer.Print per intenderci) per creare un file PDF.
    Con XP utilizzo con soddisfazione PDF Creator vers. 1.5 e posso, in ordine temporale :
    1) settare la stampante (virtuale) a "PDFCreator"
    2) stampare
    3) ripristinare la stampante di default.
    Con Windows 7 e PDFCreator 2.0.2 non riesco a fare tutto ciò.

    A gibra rispondo: tutto ok ma vorrei farlo automaticamente, all'interno di un mio programma in VB6 che, a scelta dell'utilizzatore, consenta di stampare su carta o creare il PDF corrispondente.
    Ultima modifica di Andropa; 27-02-2015 a 21:53

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Ecco, adesso ti sei spiegato meglio.
    una cosa e stampare, un'altra è generare un file PDF completamente da codice sorgente.

    La questione non è così semplice, e soprattutto generare un PDF è completamente diverso da generare un normale file da stampare con Print. Cioè non puoi.
    Comunque, scarica la classe clsPDFCreator di Luigi Micco

    Download [Luigi Micco homepage]
    http://www.luigimicco.altervista.org/doku.php/download

    c'è la versione gratuita (ma limitata) e quella a pagamento (ovvero i sorgenti li puoi avere con 200€).
    Le funzionalità della versione FREE sono comunque già notevoli. Vedi se ti bastano quelle.

    Sul mio sito trovi anche un progetto Prova Login (giunto alla 4ª versione) che, tra le tante altre cose, usa proprio questa classe creare un PDF con l'elenco dei clienti partendo da un recordset. Se ti serve lo trovi qui:

    Progetto Prova Login
    http://nuke.vbcorner.net/Projects/VB...S/Default.aspx




    P.S. Magari c'è anche altro in giro per il web.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    28
    No, non mi sono spiegato bene.
    Rimedio inserendo qui sotto un progettino completo (sviluppato in VB6 sotto XP e PDFCreator vers. 1.5) che ha due pulsanti: uno consente di effettuare la stampa su carta ed uno crea un file PDF. Importante: la parte con le varie istruzioni Printer.print, ecc. ecc. è la medesima per i due pulsanti (Sub Stampa).
    In questo modo ho il vantaggio che con lo stesso medesimo codice ottengo 2 output: su carta o su file, a scelta.
    Se viceversa adottassi la classe di Luigi Micco sarei costretto a riscrivere tutta la una parte di codice e, in caso di modifiche, dovrei effettuare queste modifiche SIA nella parte della stampa su carta CHE in quella su file.
    Il progettino non funziona però (e qui chiederei il vostro aiuto) sotto Windows Seven.
    Grazie.

    '=============================================
    ' Crea un file PDF oppure stampa su carta
    '
    ' Per la creazione del file o la stampa su carta
    ' utilizza il medesimo codice
    '=============================================

    Option Explicit

    Private WithEvents PDFCreator1 As PDFCreator.clsPDFCreator
    Private pErr As clsPDFCreatorError, opt As clsPDFCreatorOptions
    Private noStart As Boolean, fac As Double, StartTime As Date
    Private Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    Private Type WindowsDevice
    WindowsDeviceUserName As String
    WindowsDeviceShortName As String
    WindowsDevicePortName As String
    End Type
    Const WINDOWS_SECTION_NAME = "windows"
    Const DEVICE_KEY_NAME = "device"


    Sub Stampa()
    '--- questa sub è lanciata da entrambi i pulsanti
    Printer.ScaleMode = 6
    Printer.CurrentX = 10: Printer.CurrentY = 100
    Printer.FontName = "Arial": Printer.FontSize = 14
    Printer.Print "PROVA"
    End Sub

    Private Sub BotCreaPDF_Click()
    Dim OldP As String
    Dim PP As Printer
    Dim OrgPrinter As WindowsDevice
    Dim CartellaPDF As String
    Dim NomeFilePDF As String
    Dim Z As Long
    CartellaPDF = App.Path
    NomeFilePDF = "ProvaPDF.pdf"
    Call GetDefaultPrinter(OrgPrinter)
    OldP = OrgPrinter.WindowsDeviceUserName
    With opt
    .AutosaveDirectory = CartellaPDF
    .AutosaveFilename = NomeFilePDF
    .UseAutosave = 1
    .UseAutosaveDirectory = 1
    .AutosaveFormat = 0
    End With
    Set PDFCreator1.cOptions = opt
    Set Printer = Printers(PrinterIndex("PDFCreator"))
    With Printer
    .ScaleMode = 6
    .PrintQuality = 150
    End With
    '-----------------
    Stampa
    '-----------------
    Printer.EndDoc
    PDFCreator1.cPrinterStop = False
    Do
    Z = DoEvents()
    Loop Until Dir$(CartellaPDF + "/" + NomeFilePDF) <> ""
    PDFCreator1.cPrinterStop = False
    '--- Ripristino la stampante di default
    For Each PP In Printers
    If UCase(PP.DeviceName) Like UCase(OldP) Then
    Set Printer = PP
    Exit For
    End If
    Next

    PDFCreator1.cClose
    While PDFCreator1.cProgramIsRunning
    DoEvents
    Sleep 100
    Wend
    DoEvents
    Set PDFCreator1 = Nothing
    Set pErr = Nothing
    Set opt = Nothing


    MsgBox ("Fatto")
    End Sub

    Private Sub BotStampaSuCarta_Click()
    Stampa
    Printer.EndDoc
    End Sub

    Private Sub GetDefaultPrinter(recDefaultPrinter As WindowsDevice)
    Dim StrPos As Integer
    Dim DefaultPrinter As String
    '
    DefaultPrinter = GetString(WINDOWS_SECTION_NAME, DEVICE_KEY_NAME, "", "")
    StrPos = InStr(DefaultPrinter, ",")
    recDefaultPrinter.WindowsDeviceUserName = Left$(DefaultPrinter, StrPos - 1)
    DefaultPrinter = Mid$(DefaultPrinter, StrPos + 1)
    StrPos = InStr(DefaultPrinter, ",")
    recDefaultPrinter.WindowsDeviceShortName = Left$(DefaultPrinter, StrPos - 1)
    recDefaultPrinter.WindowsDevicePortName = Mid$(DefaultPrinter, StrPos + 1)
    End Sub

    Private Function PrinterIndex(Printername As String) As Long
    Dim i As Long
    For i = 0 To Printers.Count - 1
    If UCase(Printers(i).DeviceName) = UCase$(Printername) Then
    PrinterIndex = i
    Exit For
    End If
    Next i
    End Function

    Function GetString(SectionName As String, KeyName As String, DefaultValue As String, ProfileName As String) As String
    Dim KeyValueLength As Integer
    Dim KeyValue As String
    KeyValue = Space$(256)
    If Trim$(ProfileName) = "" Then
    KeyValueLength = GetProfileString(SectionName, KeyName, DefaultValue, KeyValue, Len(KeyValue))
    Else
    KeyValueLength = GetPrivateProfileString(SectionName, KeyName, DefaultValue, KeyValue, Len(KeyValue), ProfileName)
    End If
    GetString = Left$(KeyValue, KeyValueLength)
    End Function

    Private Sub Form_Load()
    '=================== PDF CREATOR
    Set PDFCreator1 = New clsPDFCreator
    Set pErr = New clsPDFCreatorError
    With PDFCreator1
    .cVisible = True
    If .cStart("/NoProcessingAtStartup") = False Then
    If .cStart("/NoProcessingAtStartup", True) = False Then
    Exit Sub
    End If
    .cVisible = True
    End If
    ' Get the options
    Set opt = .cOptions
    .cClearCache
    noStart = False
    End With
    End Sub

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Quote Originariamente inviata da Andropa Visualizza il messaggio
    No, non mi sono spiegato bene.
    Quote Originariamente inviata da Andropa Visualizza il messaggio
    Il progettino non funziona però (e qui chiederei il vostro aiuto) sotto Windows Seven.
    Grazie.
    E perché non l'hai detto subito, invece che farci perdere tempo per darti un aiuto che non ti serve???

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    28
    L'aiuto mi serve sì, se qualcuno è così cortese da darmelo.
    Difatti ho scritto che il progettino funziona benissimo sotto Windows XP e PDFCreator 1.5.
    Ho scritto :
    Il progettino non funziona però (e qui chiederei il vostro aiuto) sotto Windows Seven.
    Ma non funziona sotto Windows Seven (sia con PDF Creator 1.5 che 1.73). Ed io vorrei utilizzarlo appunto sotto Windows Seven.
    Ultima modifica di Andropa; 01-03-2015 a 00:53

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.