尝试按排序顺序重新排列PDF页面

时间:2014-07-15 19:00:14

标签: sorting pdf

我有一个程序(Shipstation),它为我提供装箱单作为PDF文件(每个订单一页)。 Shipstation按订单号排序,不允许我以任何其他方式对页面进行排序。

我想知道是否有办法重新排列页面,以便按收件人的名字排序?

我包含example packing list here的链接。

谢谢! 约翰

1 个答案:

答案 0 :(得分:0)

步骤1:对抽象页面进行排序,使得您有一个数组/列表,使得第0个元素是一个整数,表示应该去那里的实际页面

步骤2:使用某种PDF工具包,重新排序文档

现在,让我们谈谈第1步 - 让我们假设您拥有所需的数据:

public class Invoice {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int OrderNumber { get; set; }
}

现在您将拥有List,您可以通过OrderNumber轻松对其进行排序。如果这样做,列表的顺序应与输出PDF中的页面相对应。

如果您使用FirstName进入另一个列表,您现在可以将页面转换生成为int的列表或数组。

第2步:这将取决于您使用的工具包。我确定你可以使用iText或docotoic.pdf,但我会使用DotPdf或JoltPdf作为示例库(主要是因为我写了它们,这是一个扣篮任务):

public static void ResortPdf(Stream inPdf, Stream outPdf, List<int> pageTransitions)
{
    PdfDocument doc = new PdfDocument(inPdf, null, null); // no passwords - but maybe you need that?
    PdfPage[] originalPages = doc.Pages.ToArray();
    for (int i=0; i < pageTransitions.Count; i++) {
        doc.Pages[i] = originalPages[pageTransitions[i]];
    }
    doc.Save(outPdf);
}