Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [Visual Basic 2010] Chiusura applicazione

    Ciao,
    Problema:
    Stampo una serie di file con PDFCreator e naturalmente mi si apre il programma associato al tipo di file che stampo, ad es. AcroRd32 in caso di PDF.
    Finché non chiudo manualmente il processo la mia applicazione non va avanti e resta ferma alla prima stampa

    Ecco il codice
    codice:
        Public Sub cConvertFile(ByVal Filetyp As String, ByRef FileDaConvertire As String, Optional ByVal SubFormat As String = "PDF/A-1b")
            Dim fname As String, fi As FileInfo, DefaultPrinter As String
            Dim opt As PDFCreator.clsPDFCreatorOptions
            Dim opt2 As PDFCreator.clsPDFCreator
    
            Dim NomeFile As String
            Dim PosizionePunto As Integer
            Dim PosizioneSlash As Integer
            Dim Este As Integer
            Dim Processo As System.Diagnostics.Process()
            Dim ProcessoPDF As System.Diagnostics.Process()
    
    
    
            PosizionePunto = InStr(FileDaConvertire, ".")
            PosizioneSlash = InStrRev(FileDaConvertire, "\") + 1
            Este = Len(FileDaConvertire) - PosizionePunto
            MsgBox(FileDaConvertire & ";" & PosizionePunto & ";" & PosizioneSlash)
            NomeFile = Mid(FileDaConvertire, PosizioneSlash, Len(FileDaConvertire) - PosizioneSlash - Este)
    
            With OpenFileDialog1
                .Multiselect = False
                .CheckFileExists = True
                .CheckPathExists = True
                '.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*"
            End With
    
            opt = _PDFCreator.cOptions
            With opt
                .UseAutosave = 1
                .UseAutosaveDirectory = 1
                .AutosaveDirectory = Percorso & "\PDFA\"
                .AutosaveFormat = 9
    
                If Filetyp = 5 Then
                    .TIFFResolution = 72
                End If
                opt.AutosaveFilename = NomeFile
            End With
    
            With _PDFCreator
    
                .cOptions = opt
                .cClearCache()
                DefaultPrinter = .cDefaultPrinter
                .cDefaultPrinter = "PDFCreator"
                .cPrintFile(FileDaConvertire)
                ReadyState = False
                .cPrinterStop = False
            End With
    
            With Timer1
                .Interval = maxTime * 1000
                .Enabled = True
                Do While Not ReadyState And .Enabled
                    Application.DoEvents()
                Loop
                .Enabled = False
            End With
     
            If Not ReadyState Then
                MsgBox("Creating printer test page as pdf." & vbCrLf & vbCrLf & _
                 "An error is occured: Time is up!", MsgBoxStyle.Exclamation, Me.Text)
            End If
            _PDFCreator.cPrinterStop = True
            _PDFCreator.cDefaultPrinter = DefaultPrinter
    
            opt = Nothing
        End Sub
    l'applicazione resta ferma alla riga
    codice:
       .cPrintFile(FileDaConvertire)
    fino a quando non chiudo manualmente il processo.

    Non saprei proprio in quale istante far chiudere il processo con
    codice:
           Processo = Process.GetProcessesByName("AcroRd32")
           Processo(0).Kill()
    Idee?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usa gli eventi del PDFCreator usando la WithEvents

    Private WithEvents _PDFCreator As PDFCreator.clsPDFCreator

    e poi utilizza l'evento

    PDFCreator_Ready()
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Tra l'altro puoi anche dirgli di non stare ad aprire il pdf impostando una proprietà di clsPDFCreatorOptions...
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Ciao,
    non mi apre il pdf ma apre il Reader (senza visualizzare alcun documento).

    Esiste una opzione per evitarlo? Non credo... accade la stessa cosa se stampi un documento PDF da tasto Dx > Stampa

    Adesso provo quanto gentilmente proposto da oregon

    Ciao

  5. #5
    oregon come va utilizzato quanto da te proposto?

    Private WithEvents _PDFCreator As PDFCreator.clsPDFCreator è già presente nel mio codice

    Non capisco come e dove utilizzare l'evento PDFCreator_Ready()

  6. #6
    Originariamente inviato da Skyscraper84
    Ciao,
    non mi apre il pdf ma apre il Reader (senza visualizzare alcun documento).

    Esiste una opzione per evitarlo? Non credo... accade la stessa cosa se stampi un documento PDF da tasto Dx > Stampa
    Esiste sì, è il campo OpenOutputFile della classe clsPDFCreatorOptions, documentato (per modo di dire) qui... Impostalo a zero e dovrebbe evitare di aprire il reader.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Appena provato
    Accade la stessa cosa, si apre il reader senza alcun documento e finché non lo chiudo la mia applicazione si pianta

  8. #8
    Hm, sa di bug nel binding di PDFCreator.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    E come potrei risolvere?
    Potrei fare un controllo che se AcroRd32 è aperto lo chiude, ma in quale istante? Il codice si ferma su una istruzione e nn andrebbe ad eseguire il controllo.
    Altrimenti dovrei al contrario far visualizzare il documento "per conferma" di corretta conversione e chiedere all'Utente di chiudere il programma.

    Che mi consigli?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Skyscraper84


    Che mi consigli?
    Ma perché non provi ad usare l'evento che ti ho indicato?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.