【问题标题】:How to Import Bookmark from xml to existing pdf?如何将书签从 xml 导入现有的 pdf?
【发布时间】:2016-06-23 13:57:55
【问题描述】:

我目前正在处理 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

【问题讨论】:

    标签: c# pdf itext


    【解决方案1】:

    您目前正在使用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&lt;HashMap&lt;String,Object&gt;&gt; 对象。您可以使用此对象通过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

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

    stamper.Outlines = outlines;
    

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

    【讨论】:

    • 感谢您的回复,我对此几乎没有澄清。我们在哪里使用 ImportfromXML?我们是否将 importFromXML 传递给大纲? List> outlines = new List>(); Dictionary map = new Dictionary(); outlines.Add(map);
    • 就像我将书签 xml 传递给 Hashmap 一样,如下所示。 HashMap map = SimpleBookmark.ImportFromXMl(Stream);如果我错了,请指导我。
    • 所以我将通过将 XML 文件流传递给 hashmap 并在检查后返回第二个选项。
    猜你喜欢
    • 2022-06-20
    • 2016-05-13
    • 2018-06-27
    • 1970-01-01
    • 2017-04-14
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多