От време на време продължавам да получавам тази грешка при комбиниране на PDF файлове. Не съм сигурен какво означава съобщението за грешка.
Неуспешно възстановяване: трейлърът не е намерен.;
System.Exception: Възникна грешка при опит за комбиниране на PDF файл [\xxxx\xxxx\9140\9140.3.46843.305403720000.10282014.pdf] с други PDF файлове. ---> iTextSharp.text.exceptions.InvalidPdfException: Повторното изграждане е неуспешно: трейлърът не е намерен.; Оригинално съобщение: PDF startxref не е намерен. в iTextSharp.text.pdf.PdfReader..ctor(IRandomAccessSource byteSource, Boolean partialRead, Byte[] ownerPassword, X509Certificate сертификат, ICipherParameters certificateKey, Boolean closeSourceOnConstructorError) в iTextSharp.text.pdf.PdfReader..ctor(String име на файл) в xxxx. SSUtilities.PDFUtility.ConcatenateFiles(String[] pathOfFilesToConcatenate, String pathOfFileToCombineInto)
Кодът:
string currentFile = string.Empty;
try
{
int pageOffset = 0;
int f = 0;
Document document = null;
PdfCopy writer = null;
while (f < pathOfFilesToConcatenate.Length)
{
currentFile = pathOfFilesToConcatenate[f];
// we create a reader for a certain document
PdfReader reader = new PdfReader(pathOfFilesToConcatenate[f]);
reader.ConsolidateNamedDestinations();
// we retrieve the total number of pages
int n = reader.NumberOfPages;
pageOffset += n;
if (f == 0)
{
// step 1: creation of a document-object
document = new Document(reader.GetPageSizeWithRotation(1));
// step 2: we create a writer that listens to the document
writer = new PdfCopy(document, new FileStream(pathOfFileToCombineInto, FileMode.Create));
// step 3: we open the document
document.Open();
}
// step 4: we add content
for (int i = 0; i < n; )
{
++i;
if (writer != null)
{
PdfImportedPage page = writer.GetImportedPage(reader, i);
writer.AddPage(page);
}
}
PRAcroForm form = reader.AcroForm;
if (form != null && writer != null)
{
//writer.CopyAcroForm(reader);
writer.Close();
}
f++;
}
// step 5: we close the document
if (document != null)
{
document.Close();
}
}
catch (Exception ex)
{
_logger.Error(new Exception("Encountered error while trying to combine PDF file [" + currentFile + "] to other PDF's.", ex));
throw ex;
}
%%EOF
, и (3) двата реда, предхождащи%% EOF
. Старите версии бяха по-малко толерантни от новите версии по отношение на безсмислици във файла. На втория ред преди%%EOF
не еxref
, вашите PDF файлове може да страдат от по-сериозен проблем. - person Bruno Lowagie   schedule 12.12.2014MemoryStream
и извикването наGetBuffer()
вместоToArray()
. Вторият е по-базиран на ASP.Net, но има не-ASP.Net еквиваленти и това е записване директно в потокаResponse.Output
и след това извикване наResponse.Write()
наPdfDocument
. - person Chris Haas   schedule 12.12.2014PdfCopy
на itextsharp е безнадеждно повреден. Това е генератор на изключения. Вместо това използвайте остарелия класPdfCopyFields
. Все още не е годен за пускане, но може да се използва, ако имате търпение. - person 15ee8f99-57ff-4f92-890c-b56153   schedule 23.07.2015