如何将书签从xml导入到现有的pdf?

时间:2016-06-23 13:57:55

标签: c# pdf itext

我目前正在研究pdf项目(dotnet / c#[ Itextsharp pdf ]),我想从一个pdf导出和导入书签到另一个pdf(两个pdf都有相同的内容,只有差异有书签/没有书签,一个是普通的pdf和另一个链接的pdf)。将书签导出到xml工作正常,但我没有想法将导出的书签(xml)导入到另一个pdf。任何机构都可以建议解决方案。

这里我附上了我的代码。

        string inputpdf = "D:\\chapter1.pdf"; string outputbookmark="D:\\chapter1Bookmark.xml";
        PdfReader reader = new PdfReader(inputpdf);
        IList<Dictionary<string, object>> bookmarks = SimpleBookmark.GetBookmark(reader);
        using (StreamWriter Sw = new StreamWriter(outputbookmark))
        {
            SimpleBookmark.ExportToXML(bookmarks, Sw,"ISO8859-1", true);

        }
        reader.Close();

我的xml输出文件是

<?xml version="1.0" encoding="ISO8859-1"?>
<Bookmark>
  <Title Color="0 0 0" Page="1 XYZ 36 806" Action="GoTo" >Introduction</Title>
  <Title Color="0 0 0" Page="1 XYZ 36 410" Action="GoTo" >Getting Started
    <Title Color="0 0 0" Page="1 XYZ 36 364" Action="GoTo" >Printing a test page</Title>
    <Title Color="0 0 0" Page="4 XYZ 36 740" Action="GoTo" >Accessing the novaPDF Printing Preferences &#8211; test the multiline bookmark detection option</Title>
    <Title Color="0 0 0" Page="5 XYZ 36 806" Action="GoTo" >Creating PDF Files</Title>
  </Title>
</Bookmark>

我的Pdf文件可在

中找到
http://www.novapdf.com/uploads/novapdf_en/media_items/pdf-example-bookmarks.original.pdf

1 个答案:

答案 0 :(得分:2)

您目前正在使用exportToXml()方法(另请参阅exportToXml();我们目前在两个不同的位置拥有API文档。)

出于某种原因,您没有找到importFromXML()方法(另请参阅importFromXML())。如果您有包含书签的XML文件,例如:

<?xml version="1.0" encoding="ISO8859-1"?>
<Bookmark>
  <Title Color="0 0 0" Page="1 XYZ 36 806" Action="GoTo" >Introduction</Title>
  <Title Color="0 0 0" Page="1 XYZ 36 410" Action="GoTo" >Getting Started
    <Title Color="0 0 0" Page="1 XYZ 36 364" Action="GoTo" >Printing a test page</Title>
    <Title Color="0 0 0" Page="4 XYZ 36 740" Action="GoTo" >Accessing the novaPDF Printing Preferences &#8211; test the multiline bookmark detection option</Title>
    <Title Color="0 0 0" Page="5 XYZ 36 806" Action="GoTo" >Creating PDF Files</Title>
  </Title>
</Bookmark>

您可以阅读此XML文件(作为输入流或使用阅读器),importFromXML()方法将返回List<HashMap<String,Object>>对象。您可以使用此对象使用setOutlines()方法将书签添加到PDF文档。例如,参见BookmarkedTimeTable示例。或者看一下这个问题的答案:Merge pdfs and add bookmark with iText in java

这些示例(当然)是Java中的,但如果您需要Java版本,请向下滚动包含chapter 7 of "iText in Action - Second Edition"示例的页面,您将找到这些示例的C#版本。例如BookmarkedTimeTable.cs

您会注意到iTextSharp中不存在方法setOutlines(),但您需要使用属性表示法:

stamper.Outlines = outlines;

在这种情况下,outlinesList<Dictionary<string,object>>(C#)类型的对象,而不是ArrayList<HashMap<String, Object>>。对于C#开发人员来说,将Java示例移植到C#应该相当简单,但如果有疑问,请检查官方网站上提供的cs文件。