kucha007 发表于 2024-2-4 17:17:37

【PDFtk】合并特定文件夹中的PDF

本帖最后由 kucha007 于 2025-2-23 22:11 编辑

Pdftk素材来自:http://bbs.mjtd.com/plugin.php?i ... yOTUzOHwxODE2NzE%3D
函数主体:
20250223-修复了文件名带空格,以及bat闪窗的情况

;使用PDFtk合并特定文件夹中的PDF
(defun K:MPDF4Folder (OriPatch TgtPatch PreNam / TKPath PDFNam FlieNam BatFile obj)
(if
      (and
          (setq TKPath (findfile "pdftk.exe"))
          (vl-file-directory-p OriPatch);源文件夹存在
          (vl-file-directory-p TgtPatch);目标文件夹存在
          (vl-directory-files OriPatch "*.PDF" 1);源文件夹存在PDF
          (setq PDFNam (strcat (substr (rtos (getvar "cdate") 2 0) 1 8) "-" PreNam ".pdf"));合并后的文件名
      )
      (progn
          (if (findfile (strcat TgtPatch PDFNam))(vl-file-delete (strcat TgtPatch PDFNam)));删除重名PDF
          (setq FlieNam (vl-filename-mktemp "PDF合并" nil ".BAT"))
          (setq BatFile (open FlieNam "w"))
          (Write-Line (strcat
                "start /min \"\" "
                TKPath
                " \""
                OriPatch ;源文件路径"%cd%\\
                "*.pdf"
                "\" cat output \""
                TgtPatch ;储存文件路径%cd%\\
                PDFNam ;文件名
                "\""
            )
            BatFile
          )
          (close BatFile)
          (setq obj (vlax-create-object "Shell.Application"))
          (vlax-invoke-method obj "shellexecute" FlieNam "" "" "runas" 0);运行BAT
          (vlax-release-object obj)
          (if (findfile (strcat TgtPatch PDFNam))(vl-file-delete FlieNam));删除BAT
          (vlax-invoke-method (vlax-create-object "Shell.Application") 'Open TgtPatch)
      );打开目标文件夹
      (if (vl-file-directory-p OriPatch)
          (vlax-invoke-method (vlax-create-object "Shell.Application") 'Open OriPatch)
      );打开源文件夹
)
)



参考用法:

(setq TgtPatch (getvar 'DWGPREFIX))
(setq OriPatch (strcat TgtPatch "--PDF--\\"))
(setq PreNam (vl-filename-base (getvar 'DwgName)))
(K:MPDF4Folder OriPatch TgtPatch PreNam)







烟盒迷唇 发表于 2024-2-8 11:15:33

qazxswk 发表于 2024-2-8 10:25
因为用了BAT,放弃用BAT就可以了,借PDFTK工具,在纯LISP代码中可以实现合并的效果的。

怎么写呢,能不能发出来看看{:1_1:}

sandyvs 发表于 2024-4-10 18:46:23

本帖最后由 sandyvs 于 2024-4-10 18:53 编辑

kucha007 发表于 2024-2-26 15:38
求个代码学习一下~
(setq myapp(vlax-create-object "WScript.Shell"))
                        (Vlax-invoke-method myapp "run" (strcat "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe " FlieNam) 0 true)   
                        (vlax-release-object myapp)

这样可以不


这样吧

(setq myapp (vlax-create-object "Shell.Application"))
                          (vlax-invoke-method myapp "shellexecute" FlieNam "" "" "runas" 0)
                          (vlax-release-object myapp)

cghdy 发表于 2024-12-3 20:27:16

sandyvs 发表于 2024-4-10 18:46
(setq myapp(vlax-create-object "WScript.Shell"))
                        (Vlax-invoke-method myap ...

时常会失效,不一定能正确启动.bat文件

lxl217114 发表于 2024-2-5 08:38:38

下一步要整合到批打了么?

lingduwx 发表于 2024-2-5 10:49:51

这个可以,我以前一直是使用其他单独的软件来合并的,现在方便了

烟盒迷唇 发表于 2024-2-5 12:27:03

很多批打都是用这个来合并PDF的

烟盒迷唇 发表于 2024-2-7 09:19:57

黑屏闪过怎么消除呢

qazxswk 发表于 2024-2-8 10:25:40

本帖最后由 qazxswk 于 2024-2-8 10:30 编辑

烟盒迷唇 发表于 2024-2-7 09:19
黑屏闪过怎么消除呢
因为用了BAT,放弃用BAT就可以了,借PDFTK工具,在纯LISP代码中可以实现合并的效果的。

baitang36 发表于 2024-2-14 07:00:54

烟盒迷唇 发表于 2024-2-8 11:15
怎么写呢,能不能发出来看看

试试 startapp

烟盒迷唇 发表于 2024-2-15 09:27:32

baitang36 发表于 2024-2-14 07:00
试试 startapp

明白了,用wscript.shell就可以没有黑屏闪过了

kucha007 发表于 2024-2-26 15:38:51

烟盒迷唇 发表于 2024-2-15 09:27
明白了,用wscript.shell就可以没有黑屏闪过了

求个代码学习一下~
页: [1] 2
查看完整版本: 【PDFtk】合并特定文件夹中的PDF