【发布时间】:2017-10-22 02:05:54
【问题描述】:
我正在学习 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)。有什么建议吗?
这是我为 copyTo 或 CopyPagesTo 方法尝试的内容(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();
【问题讨论】:
-
new List<int>(1)创建一个 容量为 1 的 空列表。你可能想做new List<int> { 1 }(带花括号),它创建一个包含一个条目的列表,1。 -
@mkl 哦,这是我的愚蠢举动。这似乎行得通。现在对
src.GetPage(1).CopyTo(dest);有什么建议吗? -
src.GetPage(1).CopyTo(dest)将页面 data 从源复制到目标,它只是尚未将其添加到目标页面树。这就是为什么CopyTo返回一个可以与dest.AddPage(...)一起使用的页面对象的原因;这允许您在所需的任何位置插入页面。 -
@mkl 很有趣。所以我想这将是正确的方法:
dest.AddPage(src.GetPage(1).CopyTo(dest));