Закрыть файл pdf из vba
Dany » 23.07.2009 (Чт) 20:19
Всем здорово! Я как обычно открываю темы в основном связанные с проблемами работы и программирования графики (растровой да и векторной). Сегодня столкнулся с одной проблемой, а именно: как можно изображения, текст, и т.д. сохранить в формате PDF, а также производить чтение этой информации. Я думаю, что во всех моих работах именно этого не хватает, поскольку PDF самый экономичный и распространенный формат хранения информации. С чего мне начать, может кто-то этим уже занимался. Если нет давайте вместе попробуем решить этот вопрос и этот материал будет очень интересен все пользователям, а также очень полезен при работе с файлами и данными.iGrok » 23.07.2009 (Чт) 21:48
Dany » 24.07.2009 (Пт) 13:37
Первая ссылка возможно устарела - пишет страница не найдена, а вторая требует установки лицензионной библиотеки. Других нет ссылок?Денис » 24.07.2009 (Пт) 15:08
Я тебе так скажу, без ссылок, простым текстом: Ищи PDF-принтер (сотни вариантов), устанавливай в системе, а из проги просто отправляй на печать в PDF-принтер. Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.JohnK » 24.07.2009 (Пт) 15:45
PDF - закрытый формат. Рекомендую открыть файл Acrobat-ом и через OLE Automation с ним работай.
Код: Выделить всё Option Explicit
Private prAcrobat As Object 'Acrobat.Application
Private prAcrobatDoc As Object
Private prNoAcrobatMsgIsShown As Boolean
Function GetAcrobat() As Object
If prAcrobat Is Nothing Then
Set prAcrobat = CreateObject("AcroExch.App")
prAcrobat.Show
End If
Set GetAcrobat = prAcrobat
If (prAcrobat Is Nothing) And Not prNoAcrobatMsgIsShown Then
prNoAcrobatMsgIsShown = True
MsgBox "Acrobat Reader не установлен на данной машине. Просмотр и печать файлов в формате PDF невозможны. Установите Acrobat Reader!", vbCritical
End If
End Function
Function GetAcrobatDoc() As Object
If prAcrobat Is Nothing Then GetAcrobat
If prAcrobatDoc Is Nothing Then
Set prAcrobatDoc = CreateObject("AcroExch.AVDoc")
prAcrobatDoc.BringToFront
End If
Set GetAcrobatDoc = prAcrobatDoc
If (GetAcrobatDoc Is Nothing) And Not prNoAcrobatMsgIsShown Then
prNoAcrobatMsgIsShown = True
MsgBox "Не могу создать документ PDF. Просмотр и печать файлов в формате PDF невозможны!", vbCritical
End If
End Function
Public Sub ResetAcrobat()
If Not prAcrobatDoc Is Nothing Then
On Error Resume Next
prAcrobatDoc.Close True
Set prAcrobatDoc = Nothing
End If
If Not prAcrobat Is Nothing Then
On Error Resume Next
prAcrobat.CloseAllDocs
prAcrobat.Exit
Set prAcrobat = Nothing
End If
End Sub
Public Sub ShowViaAcrobat(aFile As String)
Dim Acrobat As Object
Dim AcrobatDoc As Object
' Dim Acrobat As Acrobat.CAcroApp
Set Acrobat = GetAcrobat()
Set AcrobatDoc = GetAcrobatDoc()
If AcrobatDoc Is Nothing Then Exit Sub
On Error GoTo ErrorOpen
If AcrobatDoc.IsValid Then AcrobatDoc.Close True
DoEvents
AcrobatDoc.Open aFile, aFile
DoEvents
Acrobat.Show
DoEvents
Acrobat.Restore 1
DoEvents
Exit Sub
ErrorOpen:
On Error Resume Next
ResetAcrobat
End Sub
Public Function PrintViaAcrobat(aFile As String, Optional ShowWindow As Boolean = True) As Boolean
Dim Acrobat As Object
Dim AcrobatDoc As Object
Dim pn As Long
У меня есть документ.pdf с Javascript, который мне нужно загрузить через пользовательскую форму Excel, но у меня возникла проблема с избыточным пустое.pdf-окном, которое я не могу описать в VBA, чтобы я мог закрыть его программным путем.
Для начала, файл.pdf, о котором идет речь, таков, что при нажатии на ссылку внутри документа будет выполняться следующая JS:
Как вы можете видеть, все это создает новый документ (который автоматически открывается в новом окне), сохраняет его в определенном месте с определенным именем и затем закрывает результирующее окно. Все это работает точно так, как предполагалось, когда я открываю документ.pdf с помощью Acrobat.
У меня возникает небольшая проблема, когда я загружаю этот.pdf через пользовательскую форму Excel, поскольку мне нужно сделать это как часть моего более крупного проекта. В этом случае основная функция JS по-прежнему выполняется так, как ожидалось (создает новый пустой.pdf и сохраняет его в нужном месте и с соответствующим именем).
Проблема возникает с последнего шага. Где открытые acrobat экземпляры этого файла закрывают все окно, соответствующее файлу "myDoc", в открывшейся версии Excel я могу закрыть файл только в более крупном окне.
Другими словами, разница в поведении myDoc.closeDoc(); выполните команду:
В acrobat эта команда выполняет так, как если бы пользователь нажал на большой красный X в главном окне управления окна, где открывается "myDoc".
В пользовательской форме excel одна и та же команда работает так, как если бы пользователь нажал, а не большой красный x в блоке управления, а только меньший черный x чуть ниже поля управления. То есть, он закрывает документ, оставляя окно открытым.
Это не было бы проблемой, если бы я мог как-то просто закрыть пустое окно с помощью VBA. к сожалению, я не знаю, как я должен ссылаться на это пустое окно.
Мой вопрос: как я могу обратиться к этому окну в Excel VBA, чтобы я мог закрыть его программным путем?
Само окно выглядит точно так же, как и окно adobe, но оно появляется на панели задач как открытое окно Excel. Диспетчер задач показывает "приложение" как для adobe acrobat, так и для excel, но также указывает, что процесс Adobe Acrobat не выполняется. приложение Adobe показано как принадлежащее процессу EXCEL.EXE.
VBA, похоже, не распознает пустое окно.pdf как любой объект Excel. Но я также, похоже, не могу просто закрыть все экземпляры Adobe Acrobat, потому что, строго говоря, нет процессов adobe acrobat.
Надеюсь, я просто пропустил простой синтаксис здесь, но, очевидно, я не уверен в этом. Может ли кто-нибудь указать мне в правильном направлении?
Читайте также: