有熟悉Spire.PDF的大神吗

leon51 2019-02-12 02:26:42
为了给数10万个pdf加水印,也是操碎了心。下面使用Spire.PDF给pdf添加一个layer,代码是参考官方文档,路径如下:
https://www.e-iceblue.cn/spirepdf/add-and-delete-pdf-layers.html,

个别文档偶尔会提示"未将对象引用设置到对象的实例",此时layer等于null,由于是个别pdf出现此问题,因此怀疑是文档本身的问题,请问如何处理?
PdfPageLayer layer = doc.Pages[i].PageLayers.Add("WaterMark", true);

...全文
542 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
leon51 2019-02-23
  • 打赏
  • 举报
回复
引用 7 楼 xrd42077 的回复:
我也遇到过,文档的问题。把文档拆分成单个PDF之后,再合并PDF能正常读取。一般word转成PDF的文件可能会有此问题。文档实际有10页,但是转成PDF后,在PDF中的切成了两部分前面8页为一部分,后面两页为一部分。 PdfPageBase page = doc.Pages[9];的时候就会报错了。


  for (int j = doc.Pages.Count - 1; j >= 0; j--)
                                    {
                                        PdfPageBase page = doc.Pages[j];
                                    //*****
                                    }


                                    try
                                    {
                                        doc.Split(pattern);
                                        doc.Close();
                                    }
catch (Exception ex)
                                    {
}

感谢你的回复,这一段代码没有看明白.能不能给详细一点呢?
独立观察员 2019-02-15
  • 打赏
  • 举报
回复
免费版只支持10页
xrd42077 2019-02-14
  • 打赏
  • 举报
回复
我也遇到过,文档的问题。把文档拆分成单个PDF之后,再合并PDF能正常读取。一般word转成PDF的文件可能会有此问题。文档实际有10页,但是转成PDF后,在PDF中的切成了两部分前面8页为一部分,后面两页为一部分。 PdfPageBase page = doc.Pages[9];的时候就会报错了。


  for (int j = doc.Pages.Count - 1; j >= 0; j--)
                                    {
                                        PdfPageBase page = doc.Pages[j];
                                    //*****
                                    }


                                    try
                                    {
                                        doc.Split(pattern);
                                        doc.Close();
                                    }
catch (Exception ex)
                                    {
}

Eiceblue 2019-02-13
  • 打赏
  • 举报
回复
如果是个别PDF有问题就得调查下对应文档了。可以把有问题的文档和相关代码发送到spire技术支持邮箱support@e-iceblue.com(或者qq 2181348176)。另外,你用的这种方式在新版本里面已经废弃了,新方法是下面这样:
PdfDocument regH = new PdfDocument("input.pdf");
PdfPageBase regP = regH.Pages[0];
PdfLayer layer = regH.Layers.AddLayer("test", PdfVisibility.On);
PdfCanvas pcA = layer.CreateGraphics(regP.Canvas);
pcA.DrawString("TEST", new PdfFont(PdfFontFamily.Helvetica, 18f), PdfBrushes.Red, new PointF(100, 100));
regH.SaveToFile("output.pdf", FileFormat.PDF);

建议你先用新版本试试
leon51 2019-02-13
  • 打赏
  • 举报
回复
我没有设置下载积分,谁知它自动加了5分
leon51 2019-02-13
  • 打赏
  • 举报
回复
引用 2 楼 胖叔叔写代码 的回复:
这要一点一点看,你这个连续语句中直接读取了doc 对象的子对象 Pages[i] 对象的子对象 PageLayers 到底哪里为null了这需要你一点一点确认,layer在这里任意一个对象为null的时候都为null
引用 3 楼 娃都会打酱油了 的回复:
你把个别出现的pdf上传到网盘让人可以下载了好做测试
我已将代码和pdf上传到下面这个位置了,帮忙看看吧,谢谢! https://download.csdn.net/download/leon51/10955079
  • 打赏
  • 举报
回复
你把个别出现的pdf上传到网盘让人可以下载了好做测试
  • 打赏
  • 举报
回复
这要一点一点看,你这个连续语句中直接读取了doc 对象的子对象 Pages[i] 对象的子对象 PageLayers 到底哪里为null了这需要你一点一点确认,layer在这里任意一个对象为null的时候都为null
免费Spire.PDF for .NET 是一款由e-iceblue公司开发的专业性的PDF文档创建组件。它能够使用户在不用Adobe Acrobat和其他外部控件的情况下,运用.NET 应用程序阅读,编写和操纵PDF 文档。Spire.PDF for .NET不仅可以运用在服端比如:ASP.NET 或者其他环境,还可以应用在Windows Forms 应用程序中。Spire.PDF for .NET 适合应用于所有常见的坏境中,比如:创建好的PDF文档可以存到磁盘中, 还可以在Windows Forms应用程序,ASP.NET 应用程序客户端浏览器中保存为数据流。 Spire.PDF for .NET 功能丰富。 除了基本的功能比如:绘制多种图形,图片,创建窗体字段,插入页眉页脚,输入数据表,自动对大型表格进行分页外,Spire.PDF for .NET还支持PDF数字签名,将HTML转换成PDF格式,提取PDF文档中的文本信息和图片,存为文本格式和各种图片格式,甚至可以将PDF中的附件提取出来。 主要功能 支持嵌入式字体,Truetype 字体和CJK字体。 支持绘图。比如:矩形,环形,弧形,椭圆形,也可以自定笔刷将其填充。 可以将图片从数据流,磁盘文件中载入到PDF 文档中。 在PDF 文档中既可以绘制梯状图形和矢量图像,还支持掩模和水印图像。 可以在PDF 文档中载入数据表。可以设置表中的行和列的格式,还可以在表内加入图形元素。 自动对PDF 中的大型表格进行分页。 创建窗体字段。比如在PDF 文档中创建按钮,文本框,列表框,复选框等等。 在PDF 中插入页眉页脚。 通过设置所有者密码和用户密码来加密PDF文档。 通过作者的签名来保护PDF文档。 读取当前PDF文档的表格并且填充表格。 HTML网页在转换到PDF文档时会拆分为多个大型页面,这些页面可以原原本本的展现在PDF文档中,而且在PDF文档的分页处没有任何文字的截断。用户还可以将这些网页在不需要临时文件的情况下,直接转换为数据流来创建PDF文档。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧