我有一个程序(Shipstation),它为我提供装箱单作为PDF文件(每个订单一页)。 Shipstation按订单号排序,不允许我以任何其他方式对页面进行排序。
我想知道是否有办法重新排列页面,以便按收件人的名字排序?
我包含example packing list here的链接。
谢谢! 约翰
答案 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);
}