Ich bin neu mit iTextSharp und Arbeiten mit PDF-Dateien im Allgemeinen, aber ich denke, ich bin auf dem richtigen Weg.C# iTextSharp Merge mehrere pdf über Byte-Array
Ich iteriere durch eine Liste von PDF-Dateien, wandle sie in Bytes um und schiebe alle resultierenden Bytes in ein Byte-Array. Von dort übergebe ich das Byte-Array an concatAndAddContent(), um alle PDF-Dateien zu einer einzigen großen PDF-Datei zusammenzuführen. Zur Zeit bin ich nur die letzte pdf in der Liste bekommen (sie scheinen zu überschreiben werden)
public static byte[] concatAndAddContent(List<byte[]> pdfByteContent)
{
byte[] allBytes;
using (MemoryStream ms = new MemoryStream())
{
Document doc = new Document();
PdfWriter writer = PdfWriter.GetInstance(doc, ms);
doc.SetPageSize(PageSize.LETTER);
doc.Open();
PdfContentByte cb = writer.DirectContent;
PdfImportedPage page;
PdfReader reader;
foreach (byte[] p in pdfByteContent)
{
reader = new PdfReader(p);
int pages = reader.NumberOfPages;
// loop over document pages
for (int i = 1; i <= pages; i++)
{
doc.SetPageSize(PageSize.LETTER);
doc.NewPage();
page = writer.GetImportedPage(reader, i);
cb.AddTemplate(page, 0, 0);
}
}
doc.Close();
allBytes = ms.GetBuffer();
ms.Flush();
ms.Dispose();
}
return allBytes;
}
über den Arbeitscode ist, die in einem einzigen pdf-Ergebnisse zu schaffen, und der Rest der Dateien ignoriert werden. Irgendwelche Vorschläge
Mögliche Duplikat [Zusammenführen mehrerer PDF-Dateien iTextSharp in C# .NET] (http://stackoverflow.com/questions/6029142/merging-multiple-pdfs-using-itextsharp-in-c-net) –
Sind Sie sicher, dass die pdfByteContent-Liste mehr als ein Byte-Array enthält? Können wir den Code sehen, mit dem Sie die Funktion aufrufen? –
Ich weiß nicht, ob es Ihr Problem löst, aber es scheint nicht so, als müssten Sie Dispose und Flush verwenden. Ihr "using" -Block wird automatisch beim Verlassen entsorgt. Siehe http://stackoverflow.com/questions/21230314/c-sharp-flushing-streamwriter-and-a-memorystream. Die Flush-Methode wird außer Kraft gesetzt, um nichts für die MemoryStream-Klasse zu tun (sie wird von der Stream-Klasse geerbt, siehe https://msdn.microsoft.com/en-us/library/system.io.memorystream.flush(v=vs). 110) .aspx). –