flytkgl / PDFQFZ

PDF加盖骑缝章的小工具
1.43k stars 176 forks source link

请求功能 #3

Closed btwise closed 2 years ago

btwise commented 3 years ago

@flytkgl 大师,盖章部分逻辑能不能修改一下,以适应更多场景 1,骑缝章如果pdf文件页数太多的话印章会被分割太多,无法看清楚,可否设置每隔多少页,重复分割骑缝章

大神有时间的话,在完善一下,谢谢

hyh19962008 commented 3 years ago

讲真,单页的话,你随便用一个PDF编辑器的插入图片功能不好?

btwise commented 3 years ago

主要是骑缝章逻辑,能不能再改改😁

btwise commented 3 years ago

比如文档有100页,骑缝章可以自定义每隔5页盖一次,然后在重复分割,这样才能保证所有的页面都能盖上

flytkgl commented 2 years ago

比如文档有100页,骑缝章可以自定义每隔5页盖一次,然后在重复分割,这样才能保证所有的页面都能盖上

最新版本更新了相关内容: 添加文件模式 支持骑缝章和印章分别设置 支持设置骑缝章的高度位置 骑缝章分割份数不超过20,超过就循环分割

ps:这次是用VS2022生成的程序,比2017的大了一倍多,不知道啥情况

btwise commented 2 years ago

比如文档有100页,骑缝章可以每5页盖一次,然后在重复分割,这样保证所有的页面都能盖上

最新版本更新了相关内容: 添加文件模式 支持骑缝章和印章分别设置 支持骑缝章的高度 骑缝章分割份数位置不超过20,超过就循环分割

ps:这是用VS2022生成的程序,比2017的大一倍多,不知道啥情况

VS2022是纯64位的😁

PDF分为PDF标准格式电子版和图片格式(扫描件),itextsharp是否支持判断,如果是标准电子格式,盖章可以盖到文字下方GetUnderContent,避免遮盖原有文字,如果是图片格式,只能选择上方加调整透明度

flytkgl commented 2 years ago

无论是扫描件或者电子格式印章都应该在上方吧,我看PDF的电子签名都是直接放在文字上方的,png格式图片的透明背景或者纯黑色背景都会被替换成透明色,一般不会遮盖太多文字的,不行就调整下位置咯

btwise commented 2 years ago

无论是扫描件或者电子格式印章都应该在上方吧,我看PDF的电子签名都是直接放在文字上方的,png格式图片的透明背景或者纯黑色背景都会被替换成透明色,一般不会遮盖太多文字的,不行就调整下位置咯

真实的盖章,透过印泥的红色是可以看到黑色文字的,一些用户使用提出的!倒是我尝试自己改写了,增加了PDF是否是图片格式的选项,但一些组件是可以自动判断是否符合PDF/A格式的,不知道itextsharp是否支持 另外我尝试通过转换PDF为图片然后加载到图片框进行预览,有一些问题,有时间帮我看看是不是写的乱七八糟:)我也刚接触C#,很多东西并不熟悉!

btwise commented 2 years ago

@flytkgl 盖章的PDF是否应该增加数字签名功能,以防止文件被任意修改?

flytkgl commented 2 years ago

@flytkgl 盖章的PDF是否应该增加数字签名功能,以防止文件被任意修改?

调整了印章的不透明度为0.6,不知道是不是你想要的效果 数字签名的相关代码也加上了,怕你们没有证书不会用,我就没启用,你要用的话自己改下代码里的isSign为true,再把证书路径和私钥密码改为自己的就好了

btwise commented 2 years ago

@flytkgl盖章的PDF是否应该增加数字签名功能,以防止文件被任意修改?

调整了印章的不知道为0.6,不知道是不是你想要的效果 数字签名的相关代码也加上了,怕没有证书不会用,我相信你们,你要的话自己改下代码里的isSign为true,再把证书路径和使密码改为自己就好了

就是这样的,透明之前我已经改过了,数字签名不是有个样式吗,这样是不是就把公章作为签名样式了?

btwise commented 2 years ago

image 签名不能完成啊,是哪里问题

flytkgl commented 2 years ago

image 签名不能完成啊,是哪里问题

证书路径或者密码不对,目前签名样式是隐藏的,你要开启的话把我注释掉的那几行代码取消注释,然后再把最后设置签名为隐藏的那行代码注释掉就好了

btwise commented 2 years ago

证书文件和密码是我在vs里创建的啊,这个证书不能用吗?

btwise commented 2 years ago

添加一个创建证书的过程,自动添加到证书变量更为傻瓜化,当然也可以选取自己的证书文件

flytkgl commented 2 years ago

我是用IE浏览器导出的个人证书测试的,其他证书还没测试.

就昨晚看到你说要数字签名,临时赶工出来的,哪有时间搞什么傻瓜化......

btwise commented 2 years ago

我是用IE浏览器导出的个人证书测试的,其他证书还没测试.

就昨晚看到你说要数字签名,临时赶工出来的,哪有时间搞什么傻瓜化......

不着急,慢慢完善

btwise commented 2 years ago

我重新制作了一个证书,可以数字签名了 有两个疑问: 如果开启显示签名样式的话,签名样式的公章图片和插入的公章图片没有完全重合,看上去很乱 现在默认是在尾页进行签名,是否有必要跟随盖章模式,可以首页,尾页,全部都有签名呢?

flytkgl commented 2 years ago

我重新制作了一个证书,可以数字签名了 有两个疑问: 如果开启显示签名样式的话,签名样式的公章图片和插入的公章图片没有完全重合,看上去很乱 现在默认是在尾页进行签名,是否有必要跟随盖章模式,可以首页,尾页,全部都有签名呢?

第一个问题不好调整,你可以判断下如果开启了数字签名就不要插入公章图片,这样就不会重叠了,但是数字签名好像是不能调整透明度的 第二个问题,你直接把if(isSign&&i == numberOfPages)改成if(isSign)就好了

btwise commented 2 years ago

我重新制作了一个证书,可以数字签名了 有两个疑问: 如果开启显示签名样式的话,签名样式的公章图片和插入的公章图片没有完全重合,看上去很乱 现在默认是在尾页进行签名,是否有必要跟随盖章模式,可以首页,尾页,全部都有签名呢?

第一个问题不好调整,你可以判断下如果开启了数字签名就不要插入公章图片,这样就不会重叠了,但是数字签名好像是不能调整透明度的 第二个问题,你直接把if(isSign&&i == numberOfPages)改成if(isSign)就好了

这个判断我改了,去掉了最后一页数字的判断,只能选首页和尾页时有,选全部盖章好像还是不行

btwise commented 2 years ago

应该调整为选择盖完章之后是否进行数字签名,签名位置和图片样式自己选择重新来一次,别和盖章的过程混一起是不是要好一些

btwise commented 2 years ago

我想重新添加一个窗口进行数字签名处理,如何把主窗体的变量传递到另外的窗体里?

flytkgl commented 2 years ago

查了下资料,PDF的数字签名是针对整个文件的,所以不能直接给每一页都加签名,真要加的话需要先把每一页拆分成单独的文件签名后再合并......这太麻烦我就不做了 刚更新的版本已启用数字签名,支持工具创建证书(默认跟程序保存在同一个目录)和自定义证书 如果选择数字签名但是不加印章的话,程序会添加隐藏签名,否则最后一个印章图片会替换成数字签名图片

MisterWei-maker commented 2 years ago

20211120155005 大佬,是我缺少什么库吗?NET库也已经是最新版了。

flytkgl commented 2 years ago

20电脑要安装.NET4.8才行,在改用VS2022编译并要支持创建证书的时候把这些库都更新到最新了211120155005 大佬,是我缺少什么库吗?NET库也已经是最新版了。

电脑要安装.NET4.8才行,在改用VS2022编译并要支持创建证书的时候把这些库都更新到最新了

btwise commented 2 years ago

.NET4.7.1加vs2019可以正常运行,但总提示一些包需要重新安装

btwise commented 2 years ago

@flytkgl 我添加了图片框预览pdf功能,但当pdf页数多的时候总会出错,有时间帮我看看呗,我能加你微信或qq吗

btwise commented 2 years ago

如果使用Adobe创建的签名文件签名,显示签名有效性:有效,但是使用程PDFQFZ创建的证书签名,显示有效性:未知,是缺少什么环节吗?

flytkgl commented 2 years ago

如果使用Adobe创建的签名文件签名,显示签名有效性:有效,但是使用程PDFQFZ创建的证书签名,显示有效性:未知,是缺少什么环节吗?

因为Adobe的创建的证书在你电脑的"可信任证书"列表里,而PDFQFZ创建的是自签名证书,并不在"可信任证书"列表里,自己添加到信任列表就好了

PS:我编程都是自学的,并不是什么大神,所以加我大概也帮不了你什么(逃~

btwise commented 2 years ago

如果使用 Adob​​e 创建的签名文件签名,显示签名的有效性:,但是使用 PDF 进程QFZ 创建的证书签名,显示有效性:未知,是缺少什么有效吗?

因为Adobe创建的证书在你电脑的“可信任证书”列表里,而PDFQFZ创建的是自签名证书,不在“可信任证书”列表里,自己添加到信任列表就好了

PS:我编程都是自学的,不是什么大神,所以加我大概也帮不了你什么(逃~

不,我通过你的代码才接触的C#,前后还不到一个月,但是感觉挺有意思,希望得到你的指点,网上搜一些资料很凌乱,现在我再鼓捣加预览功能,试过好多组件,但都不完美

之前找到一个类,感觉挺好的,但无法在win7上运行,现在我是把pdf先转换为图片,然后在图片框循环读取图片文件,加滚动条控制,但是我觉得把转换图片的过程改为文件流不直接保存在磁盘更好,但是不会搞

btwise commented 2 years ago

自签名证书在生成后可以通过代码自动加入信任列表,下次使用加一个通过读取电脑里证书列表选择更为标准

flytkgl commented 2 years ago

你把PDF页面转成图片是先转Bitmap吧,那其实Bitmap就可以直接用在控件里了,没必要保存到本地吧

关于信任证书的问题,每个人生成的自签名证书都不一样,你可以把自己的自签名证书加入信任,别人的电脑也得把你的证书添加为信任才行,然后现在程序本来就是会判断如果同目录下已存在生成的证书就不会再生成了,所以只需要把第一次生成的证书添加为信任,后面的签名也都会可信的了

btwise commented 2 years ago

你把PDF页面转成图片是先转Bitmap吧,那其实Bitmap就可以直接用在控件里了,没必要保存到本地吧

关于信任证书的问题,每个人生成的自签名证书都不一样,你可以把自己的自签名证书加入信任,别人的电脑也得把你的证书添加为信任才行,然后现在程序本来就是会判断如果同目录下已存在生成的证书就不会再生成了,所以只需要把第一次生成的证书添加为信任,后面的签名也都会可信的了

PDF转图片是调用的O2S的一个库,它的写法是直接写到磁盘,需要改成steam的写法,我刚接触,不会灵活使用这个文件流的写法

btwise commented 2 years ago

你把PDF页面转成图片是先转Bitmap吧,那其实Bitmap就可以直接用在控件里了,没必要保存到本地吧 关于信任证书的问题,每个人生成的自签名证书都不一样,你可以把自己的自签名证书加入信任,别人的电脑也得把你的证书添加为信任才行,然后现在程序本来就是会判断如果同目录下已存在生成的证书就不会再生成了,所以只需要把第一次生成的证书添加为信任,后面的签名也都会可信的了

PDF转图片是调用的O2S的一个库,它的写法是直接写到磁盘,频繁读写数据到磁盘,很容易导致读写冲突,需要改成steam的写法,我刚接触,不会灵活使用这个文件流的写法

flytkgl commented 2 years ago

我写好了,你更新看下吧 现在已经支持: 1.PDF预览 2.分别设置印章位置

flytkgl commented 2 years ago

PDF转图片是调用的O2S的一个库,它的写法是直接写到磁盘,频繁读写数据到磁盘,很容易导致读写冲突,需要改成steam的写法,我刚接触,不会灵活使用这个文件流的写法

你看一下调用了O2S库的那个函数,其实就两行关健的东西,其他都可以不要的 所有只需要如下: PDFFile pdfFile = PDFFile.Open(pdfInputPath);//加载PDF文件 Bitmap pageImage = pdfFile.GetPageImage(imgStartPage-1, 56 * 1);//预览图要什么清晰度,直接最低 pictureBox1.Image = pageImage;//显示到控件

flytkgl commented 2 years ago

20211120155005 大佬,是我缺少什么库吗?NET库也已经是最新版了。

你用的是我编译好的程序吧,刚发现是DLL库打包异常导致的,我把有问题的包都删掉了,重新打包了一个,应该正常了,你可以试下