Итак, у меня есть довольно простая реализация iTextSharp, которая создает PDF. В рамках этого необходимо прочитать любые «приложенные документы» и объединить их в сгенерированный документ. Это отлично работает, за исключением того, что я только что наткнулся на документ, который кто-то приложил, который все ломает. PDF-файл по-прежнему генерируется, но в полученном документе отображается только первая страница, а Adobe Reader выдает ошибки (18, если это что-то значит для кого-либо) всякий раз, когда он пытается просмотреть страницы 2–7.
На странице 8 находится ДРУГОЙ документ, который был объединен ДО проблемного документа и отображается нормально. Затем объединенный документ, вызывающий проблему, становится следующим (25 страниц), и IT отображается нормально.
Но что-то при слиянии этого документа ломает эти предыдущие страницы. Это действительно странно, потому что я ожидал, что он сломает документы, которые были объединены прямо перед ним, а также страницу 1 и т. Д.
Единственное, что я вижу в документе, который отличается, это то, что на странице 2 объединяемого проблемного документа есть заполненная форма. Я пытаюсь заставить одного из людей, которые знают PDF-файлы лучше меня, получить мне один без этой формы, чтобы убедиться, что проблема в этом, но, похоже, мой лучший кандидат прямо сейчас...
Я попробовал следующее (добавив часть «Удалить любые формы»), но у меня все еще есть проблемы. Любые идеи?
var reader = new PdfReader(filePath);
// Remove any forms
if (reader.AcroForm != null)
{
var memStream = new MemoryStream();
var stamper = new PdfStamper(reader, memStream) { FormFlattening = true };
stamper.Close();
reader = new PdfReader(memStream.ToArray());
}
var numberOfPages = reader.NumberOfPages;
var cb = writer.DirectContent;
var i = 0;
while (i < numberOfPages)
{
i++;
document.SetPageSize(reader.GetPageSizeWithRotation(i));
document.NewPage();
var page = writer.GetImportedPage(reader, i);
var 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);
}
}
reader.Close();