【发布时间】:2017-05-15 14:25:04
【问题描述】:
我有一个从 API 获得的字节数组。
byte[] sticker = db.call_API_print_sticker(Id);
我必须多次调用此方法,然后转换为 pdf。我想将它存储在一个数组数组中,然后在我拥有它们后转换它们
如何存储它,然后将字节数组 pdf 合并为一个。
【问题讨论】:
我有一个从 API 获得的字节数组。
byte[] sticker = db.call_API_print_sticker(Id);
我必须多次调用此方法,然后转换为 pdf。我想将它存储在一个数组数组中,然后在我拥有它们后转换它们
如何存储它,然后将字节数组 pdf 合并为一个。
【问题讨论】:
使用 PDFSharp 作为 Nuget,我编写了以下纯粹适用于字节数组的 C# 方法:
public byte[] CombinePDFs(List<byte[]> srcPDFs)
{
using (var ms = new MemoryStream())
{
using (var resultPDF = new PdfDocument(ms))
{
foreach (var pdf in srcPDFs)
{
using (var src = new MemoryStream(pdf))
{
using (var srcPDF = PdfReader.Open(src, PdfDocumentOpenMode.Import))
{
for (var i = 0; i < srcPDF.PageCount; i++)
{
resultPDF.AddPage(srcPDF.Pages[i]);
}
}
}
}
resultPDF.Save(ms);
return ms.ToArray();
}
}
}
因此,上述方法采用源 PDF 的数组列表并将它们组合并为结果 PDF 返回一个单字节数组。
【讨论】:
byte[] 可能只是一个 pdf。我认为你可以这样做
System.IO.File.WriteAllBytes(@"sticker.pdf", sticker);
如果不是这样,最简单的方法是使用 nuget 包 ex: PdfSharp 将多个 pdf 合并为一个。
要点(假设每个贴纸包含 1 页):
IEnumerable<byte[]> stickers;
using (var combinedPdf = new PdfDocument(@"stickers.pdf"))
foreach (var pdf in stickers)
using (MemoryStream ms = new MemoryStream(pdf))
{
var someSticker = PdfReader.Open(ms);
combinedPdf.AddPage(someSticker.Pages[0]);
}
【讨论】: