合并带书签的pdf和向pdf里加图片

using iTextSharp;
using iText = iTextSharp.text;
using iTextSharp.text.pdf;


private void addPicToPdf() { var pgSize = new iText.Rectangle(1664, 2400); var doc = new iText.Document(pgSize, 50, 50, 50, 50); string existingPdf = @"c:\temp\foo.pdf"; string newPdf = @"c:\temp\bar.pdf"; string imagePath = @"c:\temp\images"; PdfReader reader = null; if (File.Exists(existingPdf)) { reader = new PdfReader(existingPdf); } var files = (new DirectoryInfo(imagePath)).GetFiles().OrderBy(p => p.Name).ToList(); string bookmarkName = ""; PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(newPdf, FileMode.Create)); doc.Open(); float totalHeight = 0; //读入已有文件 if (reader != null) { for (int page = 0; page < reader.NumberOfPages; page++) { doc.SetPageSize(pgSize); doc.NewPage(); var pg = writer.GetImportedPage(reader, page + 1); writer.DirectContent.AddTemplate(pg, 1f, 0, 0, 1f, 0, 0);//这里不考虑旋转,否则需要稍微调整一下 } //导入书签,这里不考虑多级书签,只考虑单级,多级的话要检测Kid这个key,递归实现,稍微麻烦些 IList<Dictionary<string, object>> book_mark = SimpleBookmark.GetBookmark(reader); foreach (Dictionary<string, object> bk in book_mark) { string title = bk["Title"].ToString(); string[] words = Convert.ToString(bk["Page"]).Split(' '); int page = 0; if (!object.Equals(words, null)) { page = Convert.ToInt32(words[0]);//如果是合并多个pdf文件,需要调整page,下面的pos则不需要调整 } int pos = Convert.ToInt32(words[2]); PdfAction obja3lvl = PdfAction.GotoLocalPage(page, new iTextSharp.text.pdf.PdfDestination(iTextSharp.text.pdf.PdfDestination.FITH, pos), writer); PdfOutline objoutline3lvl = new PdfOutline(writer.RootOutline, obja3lvl, title, true); } } //原pdf导入完成,开始添加新图片 for (int i = 0; i < files.Count; i++) { iText.Image jpg = iText.Image.GetInstance(files[i].FullName); string newBookmarkName = Regex.Replace(Path.GetFileNameWithoutExtension(files[i].Name), "[0-9]+", "");//文件名如:foo1.png, foo2.png, bar1.png...... totalHeight += jpg.Height; if (totalHeight > 2290) { doc.NewPage(); totalHeight = jpg.Height; } if (newBookmarkName != bookmarkName) { bookmarkName = newBookmarkName; var bookmark = new PdfOutline(writer.RootOutline, new PdfDestination(PdfDestination.FITH, writer.GetVerticalPosition(true)), newBookmarkName); } doc.Add(jpg); } doc.Close(); MessageBox.Show("finish"); }

 

posted @ 2021-02-09 05:04  平静寄居者  阅读(200)  评论(0编辑  收藏  举报