做一个手机网站成本,莱芜半岛,wordpress在线考试,奢侈品手表网站向PDF文件插入印章图片比之前实现的向图片文件插入印章麻烦得多。 最初的想法是使用PDF浏览控件在线打开PDF文件#xff0c;然后在控件中实现鼠标移动时动态显示印章#xff0c;点击鼠标时向当前PDF页面的鼠标点击位置插入图片。由于是.net 8的Winform项目#xff0c;选… 向PDF文件插入印章图片比之前实现的向图片文件插入印章麻烦得多。 最初的想法是使用PDF浏览控件在线打开PDF文件然后在控件中实现鼠标移动时动态显示印章点击鼠标时向当前PDF页面的鼠标点击位置插入图片。由于是.net 8的Winform项目选用PdfiumViewer模块的浏览控件打开并显示PDF文档但是测试时发现无法触发控件的paint事件也就难以实现印章图片随鼠标移动同时虽然PdfiumViewer的扩展包Pdfium.Net.Free支持向PDF页面插入图片参考文献4但是同时安装PdfiumViewer、pdfium依赖包、Pdfium.Net.Free时打开PDF文件会报错提示pdfium.dll文件版本出错网上有解决办法但比较麻烦最终决定不用PDF浏览控件。 采用图片方式显示单页PDF文档通过指定页码跳转到指定页面。采用iText7模块打开PDf文档、获取页码数量同时安装ThomSoft.itext7.pdfimage包支持将pdf文档的页面转换为图片这样就类似于向图片盖印章的模式。iText7支持使用PdfCanvas向页面中绘制文本、形状、图片等但是实际测试过程中使用PdfCanvas向已有内容的页面中绘制图片时遇到各种报错最终也没有成功百度出来的示例代码都是新建页面然后向页面中从零开始绘制文本、形状、图片等元素没有找到需要的代码。 itextsharp模块可以向pdf文件中插入图片但是itextsharp模块用于.net framework项目无法用于.net 8项目。 最终选用PdfSharpCore模块向PDF页面插入图片使用比较简单主要代码如下所示
PdfSharpCore.Pdf.PdfDocument doc PdfSharpCore.Pdf.IO.PdfReader.Open(pnlPdf.Tag.ToString(), PdfDocumentOpenMode.Modify);
XImage background XImage.FromFile(comboSeal.Text);
PdfSharpCore.Pdf.PdfPage page doc.Pages[Convert.ToInt32(nudPage.Value)-1];
XGraphics gfx XGraphics.FromPdfPage(page, XGraphicsUnit.Point);XRect rect new XRect(page.Width*(e.X - m_startX) / (m_scale*m_srcImageBmp.Width),page.Height * (e.Y - m_startY) / (m_scale * m_srcImageBmp.Height),page.Width*background.PixelWidth/m_srcImageBmp.Width,page.Height * background.PixelHeight / m_srcImageBmp.Height);//写入指定位置
gfx.DrawImage(background, rect);
doc.Save(test2022.pdf);测试过程中遇到的问题是PdfSharpCore模块将PDF页面导出图片很麻烦因此还是采用iText7及ThomSoft.itext7.pdfimage包打开PDF文件并将指定页面转换为图片后在窗口中显示。鼠标点击控件盖章时计算鼠标在当前页面位置然后用PdfSharpCore模块打开PDF文档、获取当前页面对象绘制印章图片。但是itext7生成的图片尺寸和PdfSharpCore模块的页面尺寸不一致导致根据鼠标点击位置计算印章图片的插入位置及尺寸时始终不对最后没有太好的办法只能计算印章图片与窗口图片的相对位置及尺寸再根据PdfSharpCore模块打开的页面尺寸计算在页面中的位置及尺寸结果勉强能用但算不上所见即所得。后续还得继续调整程序。 下面是窗口截图及导出的pdf文档中插入图片的效果。
参考文献: [1]https://learn.microsoft.com/zh-cn/dotnet/api/skiasharp?viewskiasharp-2.88 [2]https://www.cnblogs.com/sexintercourse/p/17010294.html [3]https://github.com/ststeiger/PdfSharpCore/tree/master [4]https://www.cnblogs.com/xiaohemiao/p/17997370 [5]https://blog.csdn.net/weixin_43918803/article/details/85344624