有熟悉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);

...全文
495 8 打赏 收藏 转发到动态 举报
写回复
用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

110,534

社区成员

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

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

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