如何使用iText 7重新排序pdf文档

时间:2017-10-22 02:05:54

标签: c# pdf itext itext7

我正在学习iText 7库,我希望它有两个主要功能:重新排序页面和旋转页面。后者在快速入门指南中很容易理解。前者我遇到了一些麻烦,因为我能找到的所有例子都是旧的或者是java(或两者)。

我目前只是想设置一个在第二页之后移动第一页的示例:

PdfReader reader = new PdfReader(FILE_READ_LOCATION);
PdfWriter writer = new PdfWriter(FILE_WRITE_LOCATION);
PdfDocument document = new PdfDocument(reader, writer);

PdfPage pageToMove = document.GetPage(1);

document.AddPage(3, pageToMove);
document.RemovePage(pageToMove);

document.Close();

出于某种原因,document.Close();会引发NullReferenceException(但我没有看到任何null)。有什么建议吗?

以下是我尝试copyToCopyPagesTo种方法的尝试(dest.Close();引发了Document has no pages的异常:

PdfReader reader = new PdfReader(FILE_READ_LOCATION);
PdfWriter writer = new PdfWriter(FILE_WRITE_LOCATION);

PdfDocument src = new PdfDocument(reader);
PdfDocument dest = new PdfDocument(writer);

src.GetPage(1).CopyTo(dest);
src.CopyPagesTo(new List<int>(1), dest);

src.Close();
dest.Close();

2 个答案:

答案 0 :(得分:2)

正如@Bruno指出的那样,可以使用PdfDocument方法CopyPagesTo的重载轻松地使用iText 7对pdf文档重新排序。

关于你的尝试

  • src.GetPage(1).CopyTo(dest);

    CopyTo(dest)将页面数据从源位置复制到目标位置,它只是,但将其添加到目标页面树。这就是为什么CopyTo返回一个可以与dest.AddPage(...)重载一起使用的页面对象的原因;这尤其允许您将页面插入所需的任何位置。

  • src.CopyPagesTo(new List<int>(1), dest);

    new List<int>(1)创建空列表容量为1 。您可能希望new List<int> { 1 }(使用花括号)创建一个包含一个条目的列表,1

答案 1 :(得分:1)

您应该阅读常见问题条目How to reorder pages in an existing PDF file?

首先,您需要创建一个List整数。例如:

List<int> pages = new List<int>();
pages.Add(2);
pages.Add(1);
for (int i = 3; i <= total; i++) {
    pages.Add(i);
}

然后,您可以使用此页面序列将一个PDF的页面复制到另一个PDF:

srcDoc.CopyPagesTo(pages, resultDoc);

其中srcDoc是使用PdfDocument对象创建的PdfReader,而resultDoc是使用PdfDocument对象创建的PdfWriter。< / p>