Така че имам доста проста реализация на iTextSharp, която създава PDF. Като част от това всички „прикачени документи“ трябва да бъдат прочетени и обединени в генерирания документ. Това работи добре, освен че току-що попаднах на прикачен от някого документ, който нарушава всичко. PDF файлът все още се генерира, но документът, който излиза, показва само първата страница и Adobe Reader изхвърля грешки (18, ако означава нещо за някого), когато се опита да прегледа страници 2 - 7.
На страница 8 има ДРУГ документ, който беше обединен ПРЕДИ проблемния документ и който се показва добре. След това обединеният документ, който причинява проблема, е следващият (25 страници) и ИТ се показва добре.
Но нещо със сливането на този документ нарушава тези предишни страници. Наистина е странно, защото бих очаквал да наруши документите, които бяха обединени точно преди него, както и страница 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();