技术要点
Itext
图层合并,图层分离
合并:
- 思路1:图层来的是单独文件,需要使用pdfwriter写入
PdfLayer foot = new PdfLayer("layerName1", writer); dcb.BeginLayer(foot); ///加入内容 PdfReader footReader = new PdfReader(footer); PdfImportedPage footerPage = writer.GetImportedPage(footReader, 1); dcb.AddTemplate(footerPage, 0, 0); dcb.EndLayer(); /////设置第二个图层 PdfLayer head = new PdfLayer("layerName2", writer); dcb.BeginLayer(head); PdfReader headReader = new PdfReader(header); PdfImportedPage headerPage = writer.GetImportedPage(headReader, 1); dcb.AddTemplate(headerPage,0,0); dcb.EndLayer();
就是使用文件每一层一层的加入。
- 思路2:如果文件来的是所有的图层,可以使用PdfStamper
PdfReader reader = new PdfReader(pdfPath); PdfStamper stamper1 = new PdfStamper(reader, new FileStream("D:\\new_stamper.pdf", FileMode.Create)); Dictionary<string, PdfLayer> layers = stamper1.GetPdfLayers(); ////这里需要选择性的删除某些图层 foreach (var key in layers.Keys) { Console.WriteLine(key); if (key.Contains("UV")) { OCGRemover oCGRemover = new OCGRemover(); oCGRemover.RemoveLayers(reader, key); } }
可以理解为,删除部分,剩下的就是合并的结果。
分离:
- 对于图层分离的情况
- 思路1:这个类似于刚刚的“合并思路2”
PdfReader reader = new PdfReader(pdfPath); PdfStamper stamper1 = new PdfStamper(reader, new FileStream("D:\\new_stamper.pdf", FileMode.Create)); Dictionary<string, PdfLayer> layers = stamper1.GetPdfLayers(); ////除导出的图层以外,删除其他所有图层 foreach (var key in layers.Keys) { Console.WriteLine(key); if (!key.Contains("UV")) { OCGRemover oCGRemover = new OCGRemover(); oCGRemover.RemoveLayers(reader, key); } }
最后
- 关于PdfStamper 和 PdfWriter的用法,建议伙伴们看看官网文档和demo,肯定会有更好的使用理解。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208177.html原文链接:https://javaforall.net
