Может кто-нибудь сказать мне, где я не прав? Я пытаюсь объединить разные файлы .pdf в уникальный файл, а также записать индекс страницы для каждой страницы, но у меня всегда есть поврежденный файл. Я не практичен в использовании разных типов потоков
public static bool MergeFiles(string destinationFile, List<string> sourceFiles)
{
try
{
int f = 0;
// we create a reader for a certain document
PdfReader reader = new PdfReader(sourceFiles[f]);
// we retrieve the total number of pages
int n = reader.NumberOfPages;
//Console.WriteLine("There are " + n + " pages in the original file.");
// step 1: creation of a document-object
Document document = new Document(reader.GetPageSizeWithRotation(1));
// step 2: we create a writer that listens to the document
MemoryStream ms = new MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(document, ms);
// step 3: we open the document
document.Open();
PdfContentByte cb = writer.DirectContent;
PdfImportedPage page;
int rotation;
// step 4: we add content
while (f < sourceFiles.Count)
{
int i = 0;
while (i < n)
{
i++;
document.SetPageSize(reader.GetPageSizeWithRotation(i));
document.NewPage();
page = writer.GetImportedPage(reader, i);
rotation = reader.GetPageRotation(i);
if (rotation == 90 || rotation == 270)
{
cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
}
else
{
cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
}
f++;
if (f < sourceFiles.Count)
{
reader = new PdfReader(sourceFiles[f]);
// we retrieve the total number of pages
n = reader.NumberOfPages;
//Console.WriteLine("There are " + n + " pages in the original file.");
}
}
byte[] content = ms.ToArray();
using (FileStream fs = File.Create(destinationFile))
{
fs.Write(content, 0, (int)content.Length);
}
PdfReader reader2 = new PdfReader(destinationFile);
MemoryStream ms2 = new MemoryStream();
PdfStamper stamper = new PdfStamper(reader, ms2);
for (int i = 0; i < reader2.NumberOfPages; i++)
{
PdfContentByte canvas = stamper.GetOverContent(i);
ColumnText.ShowTextAligned(canvas, Element.ALIGN_LEFT, new Phrase("Page " + i + " of" + reader2.NumberOfPages), 10, 350, 90);
}
stamper.Close();
MessageBox.Show("I file PDF sono stati uniti correttamente");
return true;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return false;
}
}