Picoleo 22/12/2011, 13:12
Oi Pessoal, o tópico já foi finalizado a algum tempo. Mas eu encontrei um função perfeita que faz gerar arquivos em PDF.
Segue código da função: (Este foi retirado de um sistema que gera cartas para clientes, verifica se a carta ja foi emitida antes, se sim ele troca o diretorio onde sera salvo o arquivo.)
'----------------------------------------------------------------------
Option Compare Database
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Const maxTime = 20 ' in seconds
Private Const sleepTime = 250 ' in milliseconds
Private Pasta As String '= CurrentProject.Path & "\Arquivos\"
Public Function PrintRepPDF(QryTeste As String, RepName As String, NomeArquivo As String, EmitidaTF As Boolean, Optional Condicao As String = "")
PrintRepPDF = True
Dim PDFCreator1 As PDFCreator.clsPDFCreator, DefaultPrinter As String, C As Long, _
OutputFilename As String
Set PDFCreator1 = New clsPDFCreator
With PDFCreator1
.cStart "/NoProcessingAtStartup"
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
If EmitidaTF = False Then
.cOption("AutosaveDirectory") = CurrentProject.Path & "\Arquivos\Cartas de " & Format(Date, "dd.mm.yyyy") & "\" 'CAMINHO ONDE O ARQUIVO DEVERÁ SER SALVO
Else
.cOption("AutosaveDirectory") = CurrentProject.Path & "\Arquivos\Cartas 2a VIA\" & Format(Date, "dd.mm.yyyy") & "\" 'CAMINHO ONDE O ARQUIVO DEVERÁ SER SALVO CASA A CARTA JA FOI EMITIDA ANTERIORMENTE
End If
.cOption("AutosaveFilename") = NomeArquivo
.cOption("AutosaveFormat") = 0 ' 0 = PDF
DefaultPrinter = .cDefaultPrinter
.cDefaultPrinter = "PDFCreator"
.cClearCache
If Condicao <> "" Then 'CASO EXISTA ALGUMA CONDIÇÃO
DoCmd.OpenReport RepName, acViewNormal, Condicao
Else 'CASO NÃO EXISTAM CONDIÇÕES
DoCmd.OpenReport RepName, acViewNormal, QryTeste
End If
.cPrinterStop = False
End With
C = 0
Do While (PDFCreator1.cOutputFilename = "") And (C < (maxTime * 1000 / sleepTime))
C = C + 1
Sleep 200
Loop
OutputFilename = PDFCreator1.cOutputFilename
With PDFCreator1
.cDefaultPrinter = DefaultPrinter
Sleep 4000
.cClose
End With
Sleep 1000 ' Wait until PDFCreator is removed from memory
If OutputFilename = "" Then
MsgBox "Criando arquivo pdf." & vbCrLf & vbCrLf & _
"Um erro foi detectado: Tempo esgotado!", vbExclamation + vbSystemModal
PrintRepPDF = False
End If
End Function
'-----------------------------------------------------------
Valeu, abraço.