明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1575|回复: 8

[源码] pdf{get; set;}

  [复制链接]
发表于 2020-6-11 19:31:03 | 显示全部楼层 |阅读模式
本帖最后由 1291500406 于 2020-12-21 09:57 编辑

方法一:

操作命令
官网(https://www.pdflabs.com/docs/pdftk-cli-examples/)上有举了一些例子,这里整理成批处理命令方便小白,相关命令保存为.bat文件,然后把希望操作的pdf文件和.bat文件置于同一目录即可。
合并文件夹内所有pdf,输出combind.pdf
@echo offpdftk %cd%\*.pdf cat output %cd%\combined.pdf

把多个PDF的不同页面组合成一个新的PDF文档,这里取base1.pdf的第一页,base2.pdf的第一页,输出combined2.pdf
@echo offpdftk A=%cd%\base1.pdf B=%cd%\base2.pdf cat A1 B1 output %cd%\combined2.pdf

旋转PDF,旋转的角度为上北下南左西右东(north\south\west\east),如下例,combined第一页向右旋转而其他保持不变则旋转参数为1east 2-end,如果全部旋转则是1-endeast(注意:这里没有空格)
@echo offpdftk %cd%\combined.pdf cat 1east 2-end output %cd%\rotate.pdf

使用128位强度对PDF进行所有者加密(owner password),加密后PDF文件处于只读状态,没有所有者密码不能对该PDF做各种文件操作。这里对base1.pdf进行所有者加密,密码为foopass,输出文件为poopass.128.pdf
@echo offpdftk %cd%\base1.pdf output %cd%\foopass.128.pdf owner_pw foopass

同上,同时给PDF加上访问者密码(会弹出一个密码输入框)此例原文件为in.pdf,加密后文件为mydoc.128.pdf,所有者密码为foopass,访问者密码为baz
@echo offpdftk %cd%\base1.pdf output %cd%\foopassbaz.128.pdf owner_pw foopass user_pw baz

解密PDF文档,input_pw空一格,然后是所有者密码,这里输入文件为加密文件foopassbaz.128.pdf,输出文件nopass.pdf,输出文件会去掉所有者密码和访问者密码。
@echo offpdftk %cd%\foopassbaz.128.pdf input_pw foopass output %cd%\nopass.pdf

加水印,以下命令会把stamp.pdf当成背景水印(即stamp.pdf叠加在底层)合到base1上并输出stampback.pdf,如果想把stamp.pdf合成base1的前景水印(即stamp.pdf叠加在表层),把以下的backgroud换成stamp即可。
@echo offpdftk %cd%\base1.pdf background %cd%\stamp.pdf output %cd%\stampback.pdf

以上就是常用的pdf文件操作的相关命令了,实际上PDFtk还有提供了不少功能,具体可与参照官网和输入在CMD输入pdftk --help查看相关资料,这里就不一一写出来了,毕竟小白们没用到那么细致的功能。
附件
附件提供了自己测试用的pdf和小工具libiconv2.dll和pdftk.exe文件,如果有朋友不方便安装(像我的上家公司)可以直接下载附件来操作。

缺点:不允许文件出现空格
优点:用户无需安装exe

方法二:
;;获取页数
(setq pdfobj (vlax-create-object "AcroExch.PDDoc"))
(vlax-invoke  pdfobj 'open "d:\\1.pdf")
(vlax-invoke  pdfobj 'GetNumPages)


;;旋转90度
(setq GetDoc (vlax-create-object "AcroExch.PDDoc"))
#<VLA-OBJECT CAcroPDDoc 1adcadd4>
(setq  PDPage(vlax-invoke  GetDoc 'AcquirePage 1))
#<VLA-OBJECT CAcroPDPage 1adcaf84>
(vlax-invoke PDPage 'getRotate)
0
(vlax-invoke PDPage 'setRotate 90)
-1
(vlax-invoke PDPage 'getRotate)
90

;;获取纸张大小

(setq GetPoint  (vlax-invoke PDPage 'GetSize))
#<VLA-OBJECT CAcroPoint 1adcb0ec>
(vlax-get    GetPoint 'x)
1191
(vlax-get    GetPoint 'y)
842



"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-6-11 19:33:33 | 显示全部楼层
很多PDF工具
本身就提供了命令行操作
 楼主| 发表于 2020-6-11 19:36:28 | 显示全部楼层
masterlong 发表于 2020-6-11 19:33
很多PDF工具
本身就提供了命令行操作

我知道Word.Application可以 ,在探索
发表于 2020-6-11 19:41:31 | 显示全部楼层
本帖最后由 masterlong 于 2020-6-11 19:44 编辑




你可以先看看
有个 libiconv2.dll 文件
和这个是配套的
之前的漏了
已经补上去了


充分利用本身已有的功能
再去实现没有的功能


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2020-6-11 19:42:42 | 显示全部楼层
masterlong 发表于 2020-6-11 19:41
你可以先看看
有个 libiconv2.dll 文件
我不知道是不是和这个工具配套的

谢谢 大师帮忙
发表于 2020-6-12 09:31:04 | 显示全部楼层
PDF免费的全功能的库极少,至少我没找到一个。有个dos版的pdftk已经是见到过的功能最强大的免费软件了。另外LSP其实跟PDF无关,其它更强大的工具都很难处理PDF,建议放弃LSP的念头。
 楼主| 发表于 2020-6-12 20:50:10 | 显示全部楼层
mikewolf2k 发表于 2020-6-12 09:31
PDF免费的全功能的库极少,至少我没找到一个。有个dos版的pdftk已经是见到过的功能最强大的免费软件了。另 ...

lisp局限性的确实有点大
 楼主| 发表于 2020-7-17 15:12:36 | 显示全部楼层
mikewolf2k 发表于 2020-6-12 09:31
PDF免费的全功能的库极少,至少我没找到一个。有个dos版的pdftk已经是见到过的功能最强大的免费软件了。另 ...

AcroExch.PDDoc
发表于 2020-7-17 15:34:49 | 显示全部楼层

这是adobe professional的,非免费。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 01:53 , Processed in 0.183754 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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