插入多个(;2次);数字签名&xFF0C;我发现pdf中有3个信息字典
我也遇到了同样的问题(在c++中使用podofo进行开发)。插入多个(2次)数字签名后,我发现pdf文件中有3个信息字典: 如何在不使前一个数字签名失效的情况下添加两个数字签名 谢谢 我用记事本++打开文件,发现不同的插入多个(;2次);数字签名&xFF0C;我发现pdf中有3个信息字典,c,pdf,podofo,C,Pdf,Podofo,我也遇到了同样的问题(在c++中使用podofo进行开发)。插入多个(2次)数字签名后,我发现pdf文件中有3个信息字典: 如何在不使前一个数字签名失效的情况下添加两个数字签名 谢谢 我用记事本++打开文件,发现不同的 the first: 97 0 obj<</Title(? G I S e r C l u bThR\n 2 0 1 4 0 7 2 0) /Author(edison qian) /Keywords(GISerClub) /Creator(? M i c r o
the first: 97 0 obj<</Title(? G I S e r C l u bThR\n 2 0 1 4 0 7 2 0) /Author(edison qian) /Keywords(GISerClub) /Creator(? M i c r o s o f t ? W o r d 2 0 1 3)
/CreationDate(D:20150601200942+08'00') /ModDate(D:20150601200942+08'00') /Producer(? M i c r o s o f t ? W o r d 2 0 1 3) >>
the second: 97 0 obj<</Author(edison qian)/CreationDate(D:20150601200942+08'00')/Creator(? M i c r o s o f t ? W o r d 2 0 1 3)/Keywords(GISerClub)
/ModDate(D:20190426155330+08'00')/Producer(? M i c r o s o f t ? W o r d 2 0 1 3)/Title(? G I S e r C l u bThR\n 2 0 1 4 0 7 2 0)>>
the third: 97 0 obj<</Author(edison qian)/CreationDate(D:20150601200942+08'00')/Creator(? M i c r o s o f t ? W o r d 2 0 1 3)/Keywords(GISerClub)
/ModDate(D:20190426155428+08'00')/Producer(? M i c r o s o f t ? W o r d 2 0 1 3)/Title(? G I S e r C l u bThR\n 2 0 1 4 0 7 2 0)>>
我使用上述代码两次,第一个签名无效。
如何添加两个数字签名而不使前一个无效?在右侧绘制PdfCanvas
在分析示例pdf之后,第二个签名使第一个签名无效的原因变得很清楚:在签名过程中,您使用签名的小部件注释更改页面的页面内容
但是更改任何页面的内容都会使以前的签名无效!有关允许和不允许更改已签署文件的详细信息,请参阅
事实上:
PdfPainter painter;
try
{
painter.SetPage( /*&sigXObject*/pPage );
/* Workaround Adobe's reader error 'Expected a dict object.' when the stream
contains only one object which does Save()/Restore() on its own, like
the image XObject. */
painter.Save();
painter.Restore();
draw_annotation( *document, painter, image, annot_rect );
}
显然,您在这里更改了页面内容本身的某些内容。当在应用第二个签名时执行此代码时,第一个签名无效
您在评论中确认:
我使用“&sigXObject”而不是“pPage”,这两个签名都有效!但红印消失了 使用正确的坐标 关于您观察到的红印消失的情况:您在注释外观上绘制图像时使用了错误的坐标 可以使用页面坐标系的坐标,但必须使用外观边界框给定的坐标系中的坐标 因此,你的
painter.DrawImage( annot_rect.GetLeft(), annot_rect.GetBottom(), &image );
如果是错误的,请尝试以下操作
painter.DrawImage( 0, 0, &image );
因为您的外观的边界框是
[ 0 0 151 151 ]
右侧绘画PdfCanvas
在分析示例pdf之后,第二个签名使第一个签名无效的原因变得很清楚:在签名过程中,您使用签名的小部件注释更改页面的页面内容
但是更改任何页面的内容都会使以前的签名无效!有关允许和不允许更改已签署文件的详细信息,请参阅
事实上:
PdfPainter painter;
try
{
painter.SetPage( /*&sigXObject*/pPage );
/* Workaround Adobe's reader error 'Expected a dict object.' when the stream
contains only one object which does Save()/Restore() on its own, like
the image XObject. */
painter.Save();
painter.Restore();
draw_annotation( *document, painter, image, annot_rect );
}
显然,您在这里更改了页面内容本身的某些内容。当在应用第二个签名时执行此代码时,第一个签名无效
您在评论中确认:
我使用“&sigXObject”而不是“pPage”,这两个签名都有效!但红印消失了 使用正确的坐标 关于您观察到的红印消失的情况:您在注释外观上绘制图像时使用了错误的坐标 可以使用页面坐标系的坐标,但必须使用外观边界框给定的坐标系中的坐标 因此,你的
painter.DrawImage( annot_rect.GetLeft(), annot_rect.GetBottom(), &image );
如果是错误的,请尝试以下操作
painter.DrawImage( 0, 0, &image );
因为您的外观的边界框是
[ 0 0 151 151 ]
你说你也有同样的问题。。。和什么一样?你说你发现有三个信息——字典。。。这完全没关系,在增量更新的情况下,通常每个版本都会有一个信息字典。你可能还想展示你的方法的关键代码,并分享一个示例结果?你是对的,我打开“PdfMemDocument”进行增量更新,你还可以分享一个示例结果来说明问题以供分析吗?当然你说你也遇到了同样的问题。。。和什么一样?你说你发现有三个信息——字典。。。这完全没关系,在增量更新的情况下,通常每个版本都会有一个信息字典。你可能还想展示你的方法的关键代码,并分享一个示例结果?你是对的,我打开“PdfMemDocument”进行增量更新。你还可以分享一个示例结果,该结果说明了问题以供分析吗?当然,我使用“&sigXObject”而不是“pPage”,所有两个签名都有效!但是红印消失了,我该如何修改我的代码?衷心感谢您的代码忽略了PdfErrors。您可以检查是否引发了此类异常,如果是,请共享详细信息吗?我调试了代码,没有异常。请参阅“确定”。在这种情况下,您是否也可以共享
draw_annotation
方法的代码以及使用“&sigXObject”而不是“pPage”的示例签名pdf?是的,请参见我使用“&sigXObject”而不是“pPage”,所有两个签名都有效!但是红印消失了,我该如何修改我的代码?衷心感谢您的代码忽略了PdfErrors。您可以检查是否引发了此类异常,如果是,请共享详细信息吗?我调试了代码,没有异常。请参阅“确定”。在这种情况下,您是否也可以共享draw_annotation
方法的代码以及使用“&sigXObject”而不是“pPage”的示例签名pdf?是的,请参阅