Как объединить файлы .pdf с VBA? - PullRequest
1 голос
/ 28 февраля 2012

Я пытаюсь объединить файлы .pdf с VBA. Ничего особенного, буквально торчащие страницы друг за другом. Я делал многочисленные поиски в Интернете, но не смог найти какие-либо решения, которые даже близко к работе. Кто-нибудь делал это раньше? Спасибо!

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Если библиотека GPL является допустимым вариантом для вас, вы можете использовать ghostscript, как предложено в этом вопросе SO .Вы можете сделать это, вызвав функцию ShellExecute из Windows API или используя класс WScript.Shell, если вы создаете файл vbscript.

Если коммерческая библиотека является опцией, я рекомендую Amyuni PDF Creator ActiveX или Amyuni PDF Converter , оба имеют функцию Append, которая будет выполнять эту работу.Код для Amyuni PDF Converter, например, будет выглядеть следующим образом:

Set PDFDoc = CreateObject("CDintfEx.Document.4.5")
PDFdoc.SetLicenseKey "your company", "your license code"
PDFDoc.Open "test_append1.pdf"
PDFDoc.Append "test_append2.pdf"
PDFDoc.Save "result_append.pdf"
Set PDFdoc = Nothing

Обычный отказ от ответственности распространяется на последнее предложение

0 голосов
/ 06 декабря 2018

Я нашел эту тему, выполняя ту же задачу, когда клиент использовал amyuni.Спасибо yms за хороший подход.Я обнаружил, что Acces падает на «Set PDFdoc = Nothing».Это прекрасно работает для меня:

Public Sub fctPDO_Concatenate_pdf_with_Amyuni_Document_6_0()

' PDO: Usage of .append: Crashes on destruction of pdfdoc-Object. pdf-file is created properly. But usind .append , MS Access crashes - without it's okay.

'       Solution: Build second pdfdoc2 - object , and concatenate using  .AppendEx(Object)   .


On Error Resume Next
Dim PDFdoc As Object
Dim PDFdoc2 As Object

Const strLibraryVersion As String = "CDintfEx.Document.6.0"
' PDO: Examples
'Set PDFdoc = CreateObject("CDintfEx.Document.6.0")     ' PDO: See Object catalog
'Set PDFdoc = CreateObject("CDintfEx.Document")         ' PDO: Not sufficient w/o version
'Set PDFdoc = CreateObject("CDintfEx.Document.4.5")     ' PDO: Older version

Set PDFdoc = CreateObject(strLibraryVersion)
Set PDFdoc2 = CreateObject(strLibraryVersion)

'PDO: Open first file
PDFdoc.Open "D:\PDO_test\Beratungsprotokoll_2018.pdf"


'PDFdoc.Append "D:\PDO_test\GV_0093Z0_Einzelantrag.pdf"   ' PDO: Crashes on   set PDFdoc = nothing

' PDO: Open and append second file (as Object, not as file)
PDFdoc2.Open "D:\PDO_test\GV_0093Z0_Einzelantrag.pdf"
PDFdoc.AppendEx PDFdoc2

' PDO: Open and append third file (as Object, not as file). Re-use of second Object possible
PDFdoc2.Open "D:\PDO_test\result_append_sammel.pdf"
PDFdoc.AppendEx PDFdoc2


'PDO: Save with a new name
PDFdoc.Save "D:\PDO_test\result_append_sammelsammel.pdf"

'PDFdoc.Close => Not existing.

Set PDFdoc = Nothing  '=> Access crashed, with PDFdoc.Append 
Set PDFdoc2 = Nothing

Debug.Print "Done: " & Now() & " Error: " & Err.Number

End Sub

Если вы предпочитаете Ghostscript, вы можете использовать одну строку:

C:\PROGRA~2\gs\gs9.19\bin\gswin32c.exe -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOwnerPassword=pass2 -sUserPassword=pass1 -dCompatibilityLevel=2.0 -sOutputFile="D:\PDO_test\Beratungsprotokoll_2018_Sammel.pdf" "D:\PDO_test\Beratungsprotokoll_2018.pdf" "D:\PDO_test\GV_0093Z0_Einzelantrag.pdf" 

Это объединяет два последних файла в (новый) первый иприменяет пароль (см. детали безопасности перед применением).Короткий путь можно получить с помощью объекта FileScripting "fso", используя

fso.GetFolder(strFolder).ShortPath
0 голосов
/ 04 ноября 2016

Я запускаю sedja-console и добавляю свои pdf в качестве параметров.Довольно легко реализовать.Не забудьте проверить перед запуском Sedja-console, не установлен ли флаг readonly возможного ранее созданного конечного pdf-файла в значение yes, так как нет обратной связи этого внешнего процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...