明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 613|回复: 13

[经验] 我也来一个利用PDFtk合并某文件夹中所有PDF

[复制链接]
发表于 2025-2-13 17:38:34 | 显示全部楼层 |阅读模式
本帖最后由 夏生生 于 2025-2-14 08:33 编辑

***警告,请谨慎测试,会删除您的PDF***
利用了麦叔的模拟dos execute函数,需保证您有PDFTK.EXE,且其在AutoCAD的支持文件搜索路径中,功能为利用PDFtk合并某文件夹中所有PDF,并删除原有PDF
  1. (defun c:tt  (/ diy_dos_execute cmd file files folder1 folder2 output)
  2. ;此函数来自麦叔(老迈[Less is more])
  3. (defun diy_dos_execute  (exefile win wait / exec)
  4.     (and (setq exec (vlax-create-object "wscript.shell"))
  5.    (progn  (vlax-invoke exec
  6.            'run
  7.            exefile
  8.            (cond
  9.          ((member win (list 2 3 5)) win)
  10.          (5))
  11.            (if wait
  12.          1
  13.          0))
  14.     (vlax-release-object exec)))
  15.     (princ))
  16. (setq file    (findfile "PDFTK.exe")
  17.        folder1 (vl-filename-directory file)
  18.        file    (getfiled "选择任意PDF文件" (strcat folder1 "/") "pdf" 8)
  19.        folder2 (vl-filename-directory file)
  20.        files   (vl-directory-files folder2 "*.pdf")
  21.        file    (apply 'strcat
  22.           (mapcar '(lambda (x) (strcat folder2 "\\" x " ")) files))
  23.        output  (strcat folder2
  24.            "\\"
  25.            (getstring t "\n输入合并后文件名:")
  26.            ".pdf"))
  27. (setq cmd (strcat "cmd /c cd /d " folder1 " & pdftk " file "cat output " output))
  28. (diy_dos_execute cmd 2 1)
  29. (if(findfile output)(foreach n files (vl-file-delete (strcat folder2 "\\" n)))))


评分

参与人数 1明经币 +1 收起 理由
USER2128 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 6 天前 | 显示全部楼层
本帖最后由 sandyvs 于 2025-2-15 23:10 编辑

;可能会被安全软件拦截,我这第一次运行火绒会提示

;[功能] 工具-合并PDF,(czx:mergepdf OriPatch TgtPatch PdfName)
;[用法](czx:mergepdf "F:\\文档\\临时合并PDF" "F:\\桌面\\临时生成" (strcat (vl-filename-base (getvar 'DwgName)) ".pdf"))
;[说明]oripatch 要合成PDF的文件夹或PDF完整路径表//tgtpatch = 合并后的PDF文件夹//pdfname = 合并后的PDF名称(.pdf)
(defun czx:mergepdf (OriPatch TgtPatch PDFName / myapp pdflist pdflst pdfpath tkpath)
        (if (and (p:stringp OriPatch) (vl-file-directory-p OriPatch));源文件夹存在
                (progn
                        (setq pdflst (vl-directory-files OriPatch "*.PDF" 1)) ;源文件夹存在PDF
                        (if pdflst
                                (setq pdflist (apply 'strcat (mapcar '(lambda (x) (strcat "\"" OriPatch "\\" x "\" ")) pdflst)))
                        )
                )
                (progn
                        (if (and (listp OriPatch) (vl-every '(lambda (x) (and (p:stringp x) (= ".PDF" (strcase (vl-filename-extension x))))) OriPatch))
                                (setq pdflist (apply 'strcat (mapcar '(lambda (x) (strcat "\""  x "\" ")) OriPatch)))
                        )
                )
        )
        (if (setq TKPath (findfile "pdftk.exe"));如果Pdftk存在
          (if
                        (and
                                pdflist
                                (vl-file-directory-p TgtPatch);目标文件夹存在
                                ;(setq PDFName (strcat (menucmd "M=$(edtime,$(getvar,date),合并_MODDHHMMSS)") "-" PreNam  ".pdf"));合并后的文件名
                        )
                        (progn
                                (princ "\n 文件合并中,请耐心等待!!!")
                          (czx:runps (strcat "\"" TKPath "\" "
                                      pdflist
                                      "cat output \"" (setq pdfpath (strcat TgtPatch "\\" PDFName)) "\"")
                                        nil
                                )
                                
                          (if (vl-file-directory-p TgtPatch)
                                        (vlax-invoke (vla-GetInterfaceObject *Acad* "WScript.Shell") "run" TgtPatch))
                                (while (null(findfile pdfpath))
                                        ;(princ)
                                )
                                (if (findfile pdfpath)
                                  (progn
                                                (setq myapp (vlax-create-object "Shell.Application"))
                                          (vlax-invoke-method myapp "shellexecute" pdfpath "" "" "open" 0)
                                          (princ  "\n 合并完成!" )
                                                (vlax-release-object myapp)
                                  )
                                )
                        )
          )
                (alert "请将pdftk.exe放到cad搜索路径后重试!")
        )
)

;[功能] 工具-运行powershell,(czx:RunPS command flag)
;[用法](czx:RunPS "Get-Process | Out-File C:\\AdminLog.txt" t)
;[说明]command = 要执行的命令//flag = T为管理员,nil为普通
(defun czx:RunPS (command flag / run)
  (setq shell (vlax-create-object "Shell.Application"))
  (if flag (setq run "runas") (setq run ""))
  (vlax-invoke-method
    shell
    'ShellExecute
    "powershell.exe"                  
    (strcat "-Command \"" command "\"")
    ""                                
    run                           
    0                                 ; 窗口模式(0= 隐藏 1=正常窗口)
  )
  (vlax-release-object shell)
)
回复 支持 反对

使用道具 举报

发表于 前天 23:56 | 显示全部楼层
zj20190405 发表于 2025-2-19 23:09
能删除合并前的文件就好了

这不难啊,合并完后删除pdflist的文件就行啊,如果是合并指定文件夹中的,就转换成完整路径再删除。或者编个直接获取指定文件夹中的pdf文件的函数,合并完后再删除
回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层
kucha007 发表于 2025-2-13 23:40
前排提醒,慎用:文件没合并,倒是把我PDF都删没了(没进回收站哈哈哈

加了个if,只要合并后文件名非原文件名应该不会删除了,你的问题估计是没pdftk,我发的是个思路,逻辑不严谨。
回复 支持 反对

使用道具 举报

发表于 2025-2-13 17:54:46 | 显示全部楼层
可以先把要合并的文件复制到临时文件夹中,合并后删除复制的PDF,这是不是好一些
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-2-13 18:09:35 来自手机 | 显示全部楼层
ssyfeng 发表于 2025-2-13 17:54
可以先把要合并的文件复制到临时文件夹中,合并后删除复制的PDF,这是不是好一些

直接不删除就行,去掉最后一行。
回复 支持 反对

使用道具 举报

发表于 2025-2-13 19:58:58 来自手机 | 显示全部楼层
我记得论坛上也有一个
回复 支持 反对

使用道具 举报

发表于 2025-2-13 20:39:14 | 显示全部楼层
试用一下,谢谢分享
回复 支持 反对

使用道具 举报

发表于 2025-2-13 23:40:06 | 显示全部楼层
前排提醒,慎用:文件没合并,倒是把我PDF都删没了(没进回收站哈哈哈
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
这些外部程序,用ai直接写个python简单得多
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
sandyvs 发表于 2025-2-15 11:26
;可能会被安全软件拦截,我这第一次运行火绒会提示

;[功能] 工具-合并PDF,(czx:mergepdf OriPatch Tgt ...

p:stringp 函数少了吧?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-21 03:24 , Processed in 0.180028 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表