Произошла ошибка при открытии данного документа отсутствует или ошибочен корневой объект

I have been experiencing the same problem, opening a PDF file from a local HTML page. The PDF file can be opened directly in Adobe Reader, so it is not damaged. The problem appears when the PDF file is opened from a link in an HTML document. Following the error message is what appears to be a path: Local<some string>, where <some string> is an apparently random collection of characters. In other circumstances (a different version of our software), I get the message «The file is damaged and could not be repaired» followed by a similar path. The error occurs when opening any of our PDF files from a link in the HTML documents. The PDF files can be opened successfully when opened directly, or when opened via a link from some other PDF file. My OS is Windows XP SP3, 32-bit machine. I am using Adobe Acrobat Pro 10.1.1; I’ve tried Firefox 3.6.18 and Internet Explorer 8.0.6001.17602 My colleagues are using a variety of other machines (Vista, 7) with Adobe Reader.

It sounds to me like the failure occurs when trying to read the temporary downloaded version of the PDF file. The source file itself is not damaged, because I can open it in Reader/Acrobat but the copy that Reader or Acrobat is trying to open appears to be damaged. Given that the same error occurs with IE as with Firefox, I’m doubtful that the problem is the browser. Any information would be appreciated.

Ken Dyall.

Hi

I facing issue while opening pdf while it give me erroe as There was an error in opening document,root object is missing or invalid

I use following code for pdf ,
In temporay folder it created new decrypted file on click of preview button that decrypted file is open.this code is working fine for all pdf,just failed for one particualr pdf.only for one particular pdf it giving me error as

There was an error in opening document,root object is missing or invalid</b>

what to do in such case?

private void ListFieldNames()
{
int formID = 0;
string formName = «»;
bool isDeleted = false;
DataTable formIDTable = new DataTable();
try
{

PdfReader pdfReader = null;
isApplInfo = 1;

if (this.CalledFrom != «1»)
{
pdfForm = ucmbForm.SelectedRow.Cells[«FormFileName»].Value.ToString();

Client client = new Client();
pdfTemplate = client.GetApplicationFolderPath(ApplicationUser.LicenseType) + @»» + pdfForm + «»;
}
else
{
pdfForm = Path.GetFileName(utxtBrowse.Text.Trim());
pdfTemplate = utxtBrowse.Text.Trim();
}
decryptedPDFPath = localPath + @»» + ConfigurationSettings.AppSettings[«TempFilesPath»] + @»DecryptPDFFolder»;

if (!Directory.Exists(decryptedPDFPath))
{
Directory.CreateDirectory(decryptedPDFPath);
}

int i = 0;
decryptedPDFPath = decryptedPDFPath + @»» + pdfForm + «»;

Security security = new Security();

if (File.Exists(decryptedPDFPath))
{
File.Delete(decryptedPDFPath);
}
if (File.Exists(pdfTemplate))
{
isFilepresent = 0;
try
{
if (calledFrom == «»)
{
security.DecryptFile256(«DSSIPL», pdfTemplate, decryptedPDFPath); pdfReader = new PdfReader(decryptedPDFPath);
}
else
{
File.Copy(pdfTemplate, decryptedPDFPath, true);
pdfReader = new PdfReader(decryptedPDFPath);
}

}
catch
{
if (calledFrom == «1»)
{
File.Copy(pdfTemplate, decryptedPDFPath, true);
}
pdfReader = new PdfReader(decryptedPDFPath);
}

arrayPdffields = new string[pdfReader.AcroFields.Fields.Count];

foreach (DictionaryEntry dictionaryentry in pdfReader.AcroFields.Fields)
{

arrayPdffields[i] = dictionaryentry.Key.ToString();
i = i + 1;
}
pdfReader.Close();
}
else
{
isFilepresent = 1;
UltraMessageBox.Show(» The PDF file of the form that you have selected is missing.n Please download this form again»,
applicationName, MessageBoxButtons.OK, MessageBoxIcon.Information);

formID = Convert.ToInt32(ucmbForm.Value);
formName = Convert.ToString(ucmbForm.Text);
formIDTable.Columns.Add(«FormID», typeof(System.Int32));
formIDTable.Columns.Add(«FormName», typeof(System.String));
formIDTable.Rows.Add(new object[] { formID, formName });
isDeleted = iApplicationFormsBridge.DeleteDispatchFormsRows(formIDTable);
if (isDeleted)
{
FillForm();
}
isDeleted = false;
}
}
catch
{
throw;
}
}

internal void DecryptFile256(string strKey, string fileNameInput, string fileNameOutput)
{
Stream fileIn = null;
Stream fileOut = null;
MemoryStream decStream = null;

try
{
fileIn = OpenFile(fileNameInput, FileMode.Open, FileAccess.Read);
fileOut = OpenFile(fileNameOutput, FileMode.OpenOrCreate, FileAccess.Write);
decStream = DecryptStream256(strKey, fileIn); decStream.WriteTo(fileOut);
}
catch
{
throw;
}
finally
{
fileIn.Close();
fileOut.Close();
decStream = null;
}
}

}
internal MemoryStream DecryptStream256(string strKey, Stream inputStream)
{
byte[] byteKey = null;
byte[] buff = null;
int lenRead = 0;
Cryptography.CryptoStream decStream = null;
MemoryStream outputStream = null;
Cryptography.SymmetricAlgorithm objSymmAlgorithm = null;

try
{
buff = new byte[1000];//decryption buffer.
byteKey = GetByteKeys256(strKey);

outputStream = new MemoryStream();

objSymmAlgorithm = new Cryptography.RijndaelManaged();

decStream = new Cryptography.CryptoStream(outputStream, objSymmAlgorithm.CreateDecryptor(byteKey, VECTOR_IV_256), Cryptography.CryptoStreamMode.Write);
//do the deryption …
inputStream.Position = 0;
while( (lenRead = inputStream.Read(buff, 0,buff.Length))>0)
{
decStream.Write(buff, 0, lenRead);
}
decStream.FlushFinalBlock();
outputStream.Flush();
return outputStream;
}
catch
{
throw;
}
finally
{
objSymmAlgorithm = null;
decStream = null;
byteKey = null;
buff = null;
}
}

Hi

I facing issue while opening pdf while it give me erroe as There was an error in opening document,root object is missing or invalid

I use following code for pdf ,
In temporay folder it created new decrypted file on click of preview button that decrypted file is open.this code is working fine for all pdf,just failed for one particualr pdf.only for one particular pdf it giving me error as

There was an error in opening document,root object is missing or invalid</b>

what to do in such case?

private void ListFieldNames()
{
int formID = 0;
string formName = «»;
bool isDeleted = false;
DataTable formIDTable = new DataTable();
try
{

PdfReader pdfReader = null;
isApplInfo = 1;

if (this.CalledFrom != «1»)
{
pdfForm = ucmbForm.SelectedRow.Cells[«FormFileName»].Value.ToString();

Client client = new Client();
pdfTemplate = client.GetApplicationFolderPath(ApplicationUser.LicenseType) + @»» + pdfForm + «»;
}
else
{
pdfForm = Path.GetFileName(utxtBrowse.Text.Trim());
pdfTemplate = utxtBrowse.Text.Trim();
}
decryptedPDFPath = localPath + @»» + ConfigurationSettings.AppSettings[«TempFilesPath»] + @»DecryptPDFFolder»;

if (!Directory.Exists(decryptedPDFPath))
{
Directory.CreateDirectory(decryptedPDFPath);
}

int i = 0;
decryptedPDFPath = decryptedPDFPath + @»» + pdfForm + «»;

Security security = new Security();

if (File.Exists(decryptedPDFPath))
{
File.Delete(decryptedPDFPath);
}
if (File.Exists(pdfTemplate))
{
isFilepresent = 0;
try
{
if (calledFrom == «»)
{
security.DecryptFile256(«DSSIPL», pdfTemplate, decryptedPDFPath); pdfReader = new PdfReader(decryptedPDFPath);
}
else
{
File.Copy(pdfTemplate, decryptedPDFPath, true);
pdfReader = new PdfReader(decryptedPDFPath);
}

}
catch
{
if (calledFrom == «1»)
{
File.Copy(pdfTemplate, decryptedPDFPath, true);
}
pdfReader = new PdfReader(decryptedPDFPath);
}

arrayPdffields = new string[pdfReader.AcroFields.Fields.Count];

foreach (DictionaryEntry dictionaryentry in pdfReader.AcroFields.Fields)
{

arrayPdffields[i] = dictionaryentry.Key.ToString();
i = i + 1;
}
pdfReader.Close();
}
else
{
isFilepresent = 1;
UltraMessageBox.Show(» The PDF file of the form that you have selected is missing.n Please download this form again»,
applicationName, MessageBoxButtons.OK, MessageBoxIcon.Information);

formID = Convert.ToInt32(ucmbForm.Value);
formName = Convert.ToString(ucmbForm.Text);
formIDTable.Columns.Add(«FormID», typeof(System.Int32));
formIDTable.Columns.Add(«FormName», typeof(System.String));
formIDTable.Rows.Add(new object[] { formID, formName });
isDeleted = iApplicationFormsBridge.DeleteDispatchFormsRows(formIDTable);
if (isDeleted)
{
FillForm();
}
isDeleted = false;
}
}
catch
{
throw;
}
}

internal void DecryptFile256(string strKey, string fileNameInput, string fileNameOutput)
{
Stream fileIn = null;
Stream fileOut = null;
MemoryStream decStream = null;

try
{
fileIn = OpenFile(fileNameInput, FileMode.Open, FileAccess.Read);
fileOut = OpenFile(fileNameOutput, FileMode.OpenOrCreate, FileAccess.Write);
decStream = DecryptStream256(strKey, fileIn); decStream.WriteTo(fileOut);
}
catch
{
throw;
}
finally
{
fileIn.Close();
fileOut.Close();
decStream = null;
}
}

}
internal MemoryStream DecryptStream256(string strKey, Stream inputStream)
{
byte[] byteKey = null;
byte[] buff = null;
int lenRead = 0;
Cryptography.CryptoStream decStream = null;
MemoryStream outputStream = null;
Cryptography.SymmetricAlgorithm objSymmAlgorithm = null;

try
{
buff = new byte[1000];//decryption buffer.
byteKey = GetByteKeys256(strKey);

outputStream = new MemoryStream();

objSymmAlgorithm = new Cryptography.RijndaelManaged();

decStream = new Cryptography.CryptoStream(outputStream, objSymmAlgorithm.CreateDecryptor(byteKey, VECTOR_IV_256), Cryptography.CryptoStreamMode.Write);
//do the deryption …
inputStream.Position = 0;
while( (lenRead = inputStream.Read(buff, 0,buff.Length))>0)
{
decStream.Write(buff, 0, lenRead);
}
decStream.FlushFinalBlock();
outputStream.Flush();
return outputStream;
}
catch
{
throw;
}
finally
{
objSymmAlgorithm = null;
decStream = null;
byteKey = null;
buff = null;
}
}

Иногда вы можете столкнуться с ошибкой при открытии сообщения об отказе в доступе к документу . Эта проблема может быть довольно раздражающей, поскольку вы не сможете просмотреть нужный документ, но есть способ исправить это.

Иногда вы можете столкнуться с проблемами при попытке просмотра файлов PDF на вашем компьютере. Говоря о проблемах, вот некоторые распространенные проблемы, о которых сообщили пользователи:

  • Доступ к Adobe Reader запрещен при открытии PDF. Эта проблема может возникнуть, если в Adobe Reader включен защищенный режим. Просто отключите эту функцию, и проблема должна исчезнуть.
  • При открытии этого документа произошла ошибка. При чтении этого документа возникла проблема. (57)
  • В Acrobat Reader DC произошла ошибка при открытии этого документа. доступ запрещен — эта проблема может иногда появляться в Acrobat Reader DC. Чтобы решить эту проблему, обновите свой читатель до последней версии и проверьте, помогает ли это.

Как исправить Ошибка при открытии этого документа, сообщение «Доступ запрещен»?


  1. Отключить защищенный режим в Adobe Reader
  2. Проверьте свой антивирус
  3. Переместить файл PDF в другой каталог
  4. Попробуйте открыть PDF напрямую
  5. Удалить все свойства и личную информацию из файла
  6. Отключить панель предварительного просмотра
  7. Установите последние обновления для Adobe Reader
  8. Переустановите Adobe Reader
  9. Попробуйте другой читатель PDF

1. Отключить защищенный режим в Adobe Reader

По словам пользователей, произошла ошибка при открытии этого документа, доступ к которому может быть запрещен в Adobe Reader при попытке просмотра определенных документов PDF . Эта проблема обычно вызывается режимом защищенного режима в Adobe Reader.

Это может быть полезной функцией, поскольку некоторые документы PDF могут быть вредоносными, поэтому полезно включить эту функцию. Однако иногда эта функция может вызвать появление этого сообщения об ошибке, поэтому рекомендуется временно отключить его. Для этого просто выполните следующие действия:

  1. Откройте Adobe Reader .
  2. Теперь перейдите в Edit> Preferences> Security (Enhanced) .
  3. Снимите флажок Включить защищенный режим при запуске .

Вы также можете отключить защищенный режим, изменив свой реестр. Это полезно, если вы являетесь сетевым администратором и не можете вручную изменять настройки на каждом ПК. Для этого просто выполните следующие действия:

  1. Нажмите Windows Key + R и введите regedit . Теперь нажмите Enter или нажмите ОК .
    Adobe Reader access denied when opening PDF regedit run window
  2. Когда откроется редактор реестра , перейдите в HKEY_CURRENT_USER Software Adobe Acrobat Reader 10.0 Привилегированный ключ и измените значение bProtectedMode на 0 или 00000000.

После этого функция защищенного режима будет отключена, и вы сможете просматривать документы PDF без проблем. Помните, что отключение этой функции может представлять потенциальную угрозу безопасности, поэтому используйте этот обходной путь только с файлами PDF из надежных источников.


Не удается установить Adobe Reader на ваш компьютер? Вот быстрое решение для этого!


2. Проверьте свой антивирус

There was an error opening this document there was a problem reading this document(57) bitdefender logo

Если вы продолжаете получать сообщение об ошибке при открытии этого сообщения об отказе в доступе к документу , возможно, проблема в том, что на самом деле ваша антивирусная программа. Иногда эта проблема может возникать из-за определенных настроек антивируса, или антивирус может просто пометить файл как потенциально опасный и помешать вам получить к нему доступ.

В этом случае обязательно отключите определенные антивирусные функции и повторите попытку. Кроме того, вы можете попробовать отключить антивирус и посмотреть, работает ли он. Иногда этого может быть недостаточно, поэтому вам придется полностью удалить антивирус.

Даже если вы решите удалить сторонний антивирус, вы все равно будете защищены Защитником Windows , поэтому вам не нужно беспокоиться о вашей безопасности. После того, как вы удалите антивирус, проверьте, сохраняется ли проблема.

Если удаление антивируса решает проблему, возможно, вам следует подумать о переходе на другой антивирус. Bitdefender предлагает отличную защиту и никак не повлияет на вашу систему, поэтому, если вы ищете новый и надежный антивирус, вам стоит попробовать Bitdefender.

  • Загрузите Bitdefender Antivirus 2019 по специальной цене со скидкой 35%.

3. Переместите файл PDF в другой каталог.

move the pdf file There was an error opening this document access denied

По словам пользователей, иногда возникала ошибка при открытии этого документа, доступ к которому может быть запрещен, если путь к файлу PDF, который вы пытаетесь просмотреть, слишком длинный. Чтобы устранить эту проблему, пользователи предлагают переместить PDF-файл, сообщающий об этой ошибке, в другую папку.

Просто переместите файл PDF на рабочий стол или, что еще лучше, в корневой каталог, например, C: или D :. Если файл открывается из нового местоположения, это означает, что путь к файлу был слишком длинным, и это привело к появлению проблемы.

К сожалению, единственный способ решить эту проблему — переместить проблемные файлы PDF в другой каталог, и они должны работать без каких-либо проблем.


4. Попробуйте открыть PDF-файл напрямую

Произошла ошибка при открытии этого документа. Отказ в доступе к документу может появиться, если вы пытаетесь открыть файл PDF непосредственно из вашего почтового клиента. Иногда могут возникнуть проблемы совместимости между вашим почтовым клиентом и программой чтения PDF, и это может привести к появлению сообщения об ошибке.

Однако вы можете решить эту проблему, просто открыв файл PDF напрямую. Для этого просто сохраните файл PDF из почтового клиента или найдите его место хранения и запустите его оттуда. Это не постоянное решение, но это надежный обходной путь, поэтому вы можете попробовать его.


Не можете распечатать файлы PDF из Adobe Reader? Вот быстрое решение для этого!


5. Удалите все свойства и личную информацию из файла

Иногда возникала ошибка при открытии этого документа. Отказано в доступе к сообщению из-за свойств и личной информации, которая хранится в файле PDF. Однако это можно исправить, удалив личную информацию из файла PDF.

Это довольно просто сделать, и вы можете сделать это, выполнив следующие действия:

  1. Щелкните правой кнопкой мыши проблемный файл PDF и выберите « Свойства» в меню.
    properties context menu Acrobat Reader DC there was an error opening this document. access denied
  2. Перейдите на вкладку Details и нажмите Remove Properties и Personal Information .
    details tab Adobe Reader access denied when opening PDF
  3. Выберите Создать копию со всеми возможными свойствами, удаленными и нажмите кнопку ОК .
    create a copy with all possible properties removed There was an error opening this document there was a problem reading this document(57)

После этого будет создана копия файла без свойств и личной информации, и вы сможете открыть его без каких-либо проблем. Если вы хотите, вы также можете удалить всю личную информацию из исходного файла, но обычно более безопасный вариант — создать копию.


6. Отключите панель предварительного просмотра

Иногда вы можете столкнуться с ошибкой при открытии этого сообщения об отказе в доступе к документу, если ваша панель предварительного просмотра включена в проводнике . Это может быть раздражающим сбоем, и один из способов избежать сообщения об ошибке — отключить панель предварительного просмотра. Для этого просто выполните следующие действия:

  1. Откройте папку, содержащую проблемный файл PDF.
  2. Теперь перейдите на вкладку « Вид » и убедитесь, что опция «Панель предварительного просмотра» не включена. preview pane enable Acrobat Reader DC there was an error opening this document. access denied

Вы также можете быстро отключить панель предварительного просмотра, используя сочетание клавиш Alt + P. После отключения панели предварительного просмотра сообщение об ошибке должно исчезнуть.


Получение ошибки Adobe 16 на вашем компьютере? Исправьте это с этим руководством!


7. Установите последние обновления для Adobe Reader

Если при открытии этого документа возникла ошибка, доступ к документу будет запрещен , возможно, проблема связана с Adobe Reader. Такие глюки могут возникать, и если вы столкнетесь с ними, рекомендуется обновить Adobe Reader до последней версии.

Просто проверьте наличие обновлений в Adobe Reader и установите все доступные обновления. После установки обновлений проверьте, не устранена ли проблема. Многие пользователи сообщили, что они исправили проблему, обновив Adobe Reader до последней версии, поэтому обязательно попробуйте это.


8. Переустановите Adobe Reader

iobit uninstaller There was an error opening this document access denied

Иногда возникала ошибка при открытии этого документа, доступ к которому может быть запрещен, если ваша установка Adobe Reader повреждена. Это может быть большой проблемой, особенно если Adobe Reader — ваш любимый PDF-ридер.

Чтобы решить эту проблему, некоторые пользователи предлагают полностью переустановить Adobe Reader. Есть несколько способов сделать это, и хотя вы можете удалить Adobe Reader как любое другое приложение, мы предлагаем другой метод.

Если вы хотите полностью удалить приложение и полностью удалить все его файлы и записи реестра, мы рекомендуем использовать программное обеспечение для удаления, такое как IOBit Uninstaller . Используя программное обеспечение для удаления, вы полностью удалите все файлы и записи реестра, связанные с Adobe Reader, так что это будет так, как если бы приложение никогда не устанавливалось.

Теперь вам просто нужно установить последнюю версию Adobe Reader и проверить, сохраняется ли проблема.


9. Попробуйте другой читатель PDF

Если вы продолжаете получать сообщение При открытии этого документа в Adobe Reader произошла ошибка , возможно, вы можете решить эту проблему, просто переключившись на другое средство чтения PDF.

Помимо Adobe Reader существует множество отличных программ для чтения PDF, и если вы ищете новый инструмент для чтения PDF-файлов, мы настоятельно рекомендуем вам попробовать Nitro Free PDF Reader.

  • Скачать сейчас Nitro PDF Reader с официального сайта

При открытии этого сообщения об отказе в доступе к документу возникла ошибка. Это может создать много проблем для обычного пользователя, который просто хочет просмотреть файл PDF. Тем не менее, вы должны быть в состоянии решить эту проблему с помощью одного из наших решений.

ЧИТАЙТЕ ТАКЖЕ:

  • ИСПРАВЛЕНИЕ: Хотите сохранить изменения в PDF перед закрытием?
  • Outlook не открывает PDF-вложения в Windows 10
  • Как печатать в PDF в Windows 10

Этот корневой объект PDF приведет к сбою Adobe Reader. Другие программы для чтения PDF, такие как Foxit, Nuance, Evince, SumatraPDF, без проблем откроют файл PDF. Проблема заключается в том, что /Dests требует косвенного объекта (ссылка в формате PDF). Удаление /Dests << >> приведет к тому, что Adobe Reader откроет файл, но не сможет распечатать его. Все остальные читатели работают нормально без /Dests. Есть идеи, как исправить синтаксис в следующем примере корневого объекта?

  17 0 obj
  <<
    /Type /Catalog
    /Pages 2 0 R
    /Outlines 15 0 R
    /PageMode /UseOutlines
    /Dests <<
             /__WKANCHOR_2 8 0 R
             /#8d#c2#ca#ebs#e4#60#00#9e#97l#b9#80#1b#cb#86sQR#83 9 0 R
           >>
  >>
  endobj

3 ответа

Хорошо, нашел несколько свободных минут…

Итак, первое, что я заметил, это то, что *все другие программы чтения действительно могут открыть файл (я протестировал лишь некоторые из них). Но они выдают много-много предупреждений и сообщений об ошибках… (Попробуйте Ghostscript: gs virkerikke.pdf или попробуйте evince…) В PDF также есть как минимум поврежденная таблица xref (или, по крайней мере, это одна из жалоб).

xpdf жалуется:

[....]
Error: Invalid XRef entry
Error: Invalid XRef entry
Error: Invalid XRef entry
Error (157): Unterminated string
Error (159): End of file inside dictionary

gv жалуется:

Warning: translation table syntax error: Unknown keysym name:  apLineDel
Warning: ... found while parsing '<Key>apLineDel:   GV_Page(page+5)     '
Warning: String to TranslationTable conversion encountered errors

evince жалуется:

[....]
Error: Invalid XRef entry
Error: Invalid XRef entry
Error: Invalid XRef entry
Error (157): Unterminated string
Error (159): End of file inside dictionary
Error (157): Unterminated string
Error (159): End of file inside dictionary
Error (157): Unterminated string
Error (159): End of file inside dictionary
[....]
Error (1918): Unterminated string
Error (1920): End of file inside dictionary

gs жалуется:

**** Warning: File has a corrupted %%EOF marker, or garbage after %%EOF.

mupdf жалуется:

+ pdf/pdf_xref.c:60: pdf_read_start_xref(): cannot find startxref
| pdf/pdf_xref.c:477: pdf_load_xref(): cannot read startxref
 pdf/pdf_xref.c:532: pdf_open_xref_with_stream(): trying to repair
warning: ignoring invalid character in hex string: '!'
warning: ignoring invalid character in hex string: 'O'
warning: ignoring invalid character in hex string: 'T'
warning: ignoring invalid character in hex string: 'Y'
[....]

qpdf --qdf жалуется:

virkerikke.pdf (object 17 0, file position 2234): null character not allowed in name token

Хорошо, теперь открываем этот паршивый файл в текстовом редакторе и пытаемся его восстановить. Я обнаружил, что этот файл (размером 32746 байт) имеет серьезные проблемы с синтаксисом:

  1. Мусор после %%EOF: полный HTML-файл с правильным синтаксисом приклеен к PDF-файлу после маркера %%EOF с заголовком «Wkhtmltopdf — Teknisk regelverk» . Его размер составляет 11878 байт. Удалите эту часть, и у вас будет «лучший» PDF-файл размером всего 20868 байт… хотя Acrobat/Adobe Reader по-прежнему не открывает его после сохранения отредактированного файла.
  2. Недопустимый символ в маркере имени: он находится внутри маркера имени /#8d#c2#ca#ebs#e4#60#00#9e#97l#b9#80#1b#cb#86sQR#83. В этом файле он появляется 2 раза. Уже в моих первых комментариях я сказал вам, что этот ключ не выглядит заслуживающим доверия, потому что он содержит очень мало символов ASCII, но много двоичных байтов (используя их шестнадцатеричное представление. (Что я упустил из виду, так это то, что он даже содержал #00, который является представлением PDF для символа nul… использование которого является незаконным для токенов имен в PDF.) Замените этот токен имени другим (фантазийным) точно такой же длины ( в обоих случаях). Я выбрал /aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa. Сохраните отредактированный файл.

Теперь даже программы Acrobat/Adobe Readers будут без проблем открывать этот восстановленный файл. Кроме того, ‘другие читатели’ теперь будут лучше работать с этим файлом, выдавая меньше предупреждений и теперь имея возможность идентифицировать некоторые метаданные (такие как дата создания и производитель == wkhtmltopdf), которые они не смогли определить. добраться до исходного файла.


3

Kurt Pfeifle
3 Июн 2011 в 04:49

/Dests должен быть словарем (пары /Key value), содержащим имена (ключи) и соответствующие адресаты (значения). Ключевое слово /Dests впервые появилось в PDF 1.1.

PDF 1.1 допускал, чтобы ключи были только объектом имени. В PDF 1.2 ключи также могут быть строками байтов.

Итак, за какую версию PDF претендует ваш файл?

Из спецификации PDF 1.7 («ISO 32000-1»), описывающей значение /Dests:

В PDF 1.1 соответствие между объектами имен и местами назначения должно определяться записью Dests в каталоге документов (см. 7.7.2, «Каталог документов»). Значение этой записи должно быть словарем, в котором каждый ключ является именем адресата, а соответствующее значение является либо массивом, определяющим адресата, с использованием синтаксиса, показанного в таблице 151, либо словарем с элементом D, значение которого является таким массивом. .


1

Kurt Pfeifle
2 Июн 2011 в 12:53

Кажется довольно простым. Переместите массив dedes в отдельный объект.

Скорее, чем

17 0 obj
<<
  /Type /Catalog
  /Pages 2 0 R
  /Outlines 15 0 R
  /PageMode /UseOutlines
  /Dests <<
    /__WKANCHOR_2 8 0 R
    /#8d#c2#ca#ebs#e4#60#00#9e#97l#b9#80#1b#cb#86sQR#83 9 0 R
  >>
>>
endobj

Вместо этого вы должны иметь:

17 0 obj
<<
  /Type /Catalog
  /Pages 2 0 R
  /Outlines 15 0 R
  /PageMode /UseOutlines
  /Dests 1234 0 R
>>
endobj
1234 0 obj
<</__WKANCHOR_2 8 0 R/#8d#c2#ca#ebs#e4#60#00#9e#97l#b9#80#1b#cb#86sQR#83 9 0 R>>
endobj

Номер объекта будет чем-то псевдослучайным.

И то, как переместить массив dest из корня в отдельный объект, будет полностью зависеть от того, какое программное обеспечение PDF вы используете. «Шестнадцатеричный редактор» — это вариант, но тогда вы перейдете на SuperUser, а не на StackOverflow… технически. Я подозреваю, что вы могли бы получить mulligan на этом. Я бы позволил этому соскользнуть сам.


0

Mark Storer
6 Июн 2011 в 21:40

Хорошо, нашел несколько свободных минут…

Итак, первое, что я заметил, это то, что * все остальные читатели действительно могут открыть файл (я тестировал только несколько). Но они выкладывают много предупреждений и сообщений об ошибках… (Попробуйте Ghostscript: gs virkerikke.pdf или попробуй доказать…) есть хоть поврежденный xref таблицы в формате PDF (или, по крайней мере, это одна из жалоб).

xpdf жалуется:

[....]
Error: Invalid XRef entry
Error: Invalid XRef entry
Error: Invalid XRef entry
Error (157): Unterminated string
Error (159): End of file inside dictionary

gv жалуется:

Warning: translation table syntax error: Unknown keysym name:  apLineDel
Warning: ... found while parsing '<Key>apLineDel:   GV_Page(page+5)     '
Warning: String to TranslationTable conversion encountered errors

evince жалуется:

[....]
Error: Invalid XRef entry
Error: Invalid XRef entry
Error: Invalid XRef entry
Error (157): Unterminated string
Error (159): End of file inside dictionary
Error (157): Unterminated string
Error (159): End of file inside dictionary
Error (157): Unterminated string
Error (159): End of file inside dictionary
[....]
Error (1918): Unterminated string
Error (1920): End of file inside dictionary

gs жалуется:

**** Warning: File has a corrupted %%EOF marker, or garbage after %%EOF.

mupdf жалуется:

+ pdf/pdf_xref.c:60: pdf_read_start_xref(): cannot find startxref
| pdf/pdf_xref.c:477: pdf_load_xref(): cannot read startxref
 pdf/pdf_xref.c:532: pdf_open_xref_with_stream(): trying to repair
warning: ignoring invalid character in hex string: '!'
warning: ignoring invalid character in hex string: 'O'
warning: ignoring invalid character in hex string: 'T'
warning: ignoring invalid character in hex string: 'Y'
[....]

qpdf --qdf жалуется:

virkerikke.pdf (object 17 0, file position 2234): null character not allowed in name token

Хорошо, теперь открываем этот дерьмовый файл в текстовом редакторе, пытаясь восстановить его. Я обнаружил, что этот файл (размером 32746 байт) имеет некоторые серьезные синтаксические проблемы:

  1. Мусор после %%EOF : Есть полный и правильный синтаксис HTML-файл, приклеенный к PDF после его %%EOF маркер с заголовком «Wkhtmltopdf — Teknisk regelverk». Его размер составляет 11878 байт. Удалите эту часть, и у вас будет «лучший» PDF-файл размером всего 20868 байт… хотя Acrobat/Adobe Reader по-прежнему не открывает его после сохранения отредактированного файла.
  2. Недопустимый символ в имени токена: это находится внутри имени токена /#8d#c2#ca#ebs#e4#60#00#9e#97l#b9#80#1b#cb#86sQR#83, Похоже, 2 раза в этом файле. Уже в моих первых комментариях я говорил вам, что этот ключ не выглядит мне заслуживающим доверия, потому что он содержит очень мало символов ASCII, но содержит много двоичных байтов (используя их шестнадцатеричное представление. (Я упустил из виду, что он даже содержал #00 который является представлением PDF для nul символ… использование которого является недопустимым для токенов имен в PDF.) Замените этот токен имени на другой (фантазийный) один точно такой же длины (в обоих случаях). Я выбрал /aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, Сохраните отредактированный файл.

Теперь даже Acrobat/Adobe Reader s откроет этот восстановленный файл без жалоб. Кроме того, «другие читатели» теперь будут лучше работать с этим файлом, выдавая меньше предупреждений и теперь имея возможность идентифицировать некоторые метаданные (такие как дата создания и производитель == wkhtmltopdf), которые они не смогли получить для исходного файла.

Этот корневой объект PDF приведет к сбою Adobe Reader. Другие программы для чтения PDF, такие как Foxit, Nuance, Evince, SumatraPDF, без проблем откроют файл PDF. Проблема заключается в том, что /Dests требует косвенного объекта (ссылка в формате PDF). Удаление /Dests << >> приведет к тому, что Adobe Reader откроет файл, но не сможет распечатать его. Все остальные читатели работают нормально без /Dests. Есть идеи, как исправить синтаксис в следующем примере корневого объекта?

  17 0 obj
  <<
    /Type /Catalog
    /Pages 2 0 R
    /Outlines 15 0 R
    /PageMode /UseOutlines
    /Dests <<
             /__WKANCHOR_2 8 0 R
             /#8d#c2#ca#ebs#e4#60#00#9e#97l#b9#80#1b#cb#86sQR#83 9 0 R
           >>
  >>
  endobj

3 ответа

Хорошо, нашел несколько свободных минут…

Итак, первое, что я заметил, это то, что *все другие программы чтения действительно могут открыть файл (я протестировал лишь некоторые из них). Но они выдают много-много предупреждений и сообщений об ошибках… (Попробуйте Ghostscript: gs virkerikke.pdf или попробуйте evince…) В PDF также есть как минимум поврежденная таблица xref (или, по крайней мере, это одна из жалоб).

xpdf жалуется:

[....]
Error: Invalid XRef entry
Error: Invalid XRef entry
Error: Invalid XRef entry
Error (157): Unterminated string
Error (159): End of file inside dictionary

gv жалуется:

Warning: translation table syntax error: Unknown keysym name:  apLineDel
Warning: ... found while parsing '<Key>apLineDel:   GV_Page(page+5)     '
Warning: String to TranslationTable conversion encountered errors

evince жалуется:

[....]
Error: Invalid XRef entry
Error: Invalid XRef entry
Error: Invalid XRef entry
Error (157): Unterminated string
Error (159): End of file inside dictionary
Error (157): Unterminated string
Error (159): End of file inside dictionary
Error (157): Unterminated string
Error (159): End of file inside dictionary
[....]
Error (1918): Unterminated string
Error (1920): End of file inside dictionary

gs жалуется:

**** Warning: File has a corrupted %%EOF marker, or garbage after %%EOF.

mupdf жалуется:

+ pdf/pdf_xref.c:60: pdf_read_start_xref(): cannot find startxref
| pdf/pdf_xref.c:477: pdf_load_xref(): cannot read startxref
 pdf/pdf_xref.c:532: pdf_open_xref_with_stream(): trying to repair
warning: ignoring invalid character in hex string: '!'
warning: ignoring invalid character in hex string: 'O'
warning: ignoring invalid character in hex string: 'T'
warning: ignoring invalid character in hex string: 'Y'
[....]

qpdf --qdf жалуется:

virkerikke.pdf (object 17 0, file position 2234): null character not allowed in name token

Хорошо, теперь открываем этот паршивый файл в текстовом редакторе и пытаемся его восстановить. Я обнаружил, что этот файл (размером 32746 байт) имеет серьезные проблемы с синтаксисом:

  1. Мусор после %%EOF: полный HTML-файл с правильным синтаксисом приклеен к PDF-файлу после маркера %%EOF с заголовком «Wkhtmltopdf — Teknisk regelverk» . Его размер составляет 11878 байт. Удалите эту часть, и у вас будет «лучший» PDF-файл размером всего 20868 байт… хотя Acrobat/Adobe Reader по-прежнему не открывает его после сохранения отредактированного файла.
  2. Недопустимый символ в маркере имени: он находится внутри маркера имени /#8d#c2#ca#ebs#e4#60#00#9e#97l#b9#80#1b#cb#86sQR#83. В этом файле он появляется 2 раза. Уже в моих первых комментариях я сказал вам, что этот ключ не выглядит заслуживающим доверия, потому что он содержит очень мало символов ASCII, но много двоичных байтов (используя их шестнадцатеричное представление. (Что я упустил из виду, так это то, что он даже содержал #00, который является представлением PDF для символа nul… использование которого является незаконным для токенов имен в PDF.) Замените этот токен имени другим (фантазийным) точно такой же длины ( в обоих случаях). Я выбрал /aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa. Сохраните отредактированный файл.

Теперь даже программы Acrobat/Adobe Readers будут без проблем открывать этот восстановленный файл. Кроме того, ‘другие читатели’ теперь будут лучше работать с этим файлом, выдавая меньше предупреждений и теперь имея возможность идентифицировать некоторые метаданные (такие как дата создания и производитель == wkhtmltopdf), которые они не смогли определить. добраться до исходного файла.


3

Kurt Pfeifle
3 Июн 2011 в 04:49

/Dests должен быть словарем (пары /Key value), содержащим имена (ключи) и соответствующие адресаты (значения). Ключевое слово /Dests впервые появилось в PDF 1.1.

PDF 1.1 допускал, чтобы ключи были только объектом имени. В PDF 1.2 ключи также могут быть строками байтов.

Итак, за какую версию PDF претендует ваш файл?

Из спецификации PDF 1.7 («ISO 32000-1»), описывающей значение /Dests:

В PDF 1.1 соответствие между объектами имен и местами назначения должно определяться записью Dests в каталоге документов (см. 7.7.2, «Каталог документов»). Значение этой записи должно быть словарем, в котором каждый ключ является именем адресата, а соответствующее значение является либо массивом, определяющим адресата, с использованием синтаксиса, показанного в таблице 151, либо словарем с элементом D, значение которого является таким массивом. .


1

Kurt Pfeifle
2 Июн 2011 в 12:53

Кажется довольно простым. Переместите массив dedes в отдельный объект.

Скорее, чем

17 0 obj
<<
  /Type /Catalog
  /Pages 2 0 R
  /Outlines 15 0 R
  /PageMode /UseOutlines
  /Dests <<
    /__WKANCHOR_2 8 0 R
    /#8d#c2#ca#ebs#e4#60#00#9e#97l#b9#80#1b#cb#86sQR#83 9 0 R
  >>
>>
endobj

Вместо этого вы должны иметь:

17 0 obj
<<
  /Type /Catalog
  /Pages 2 0 R
  /Outlines 15 0 R
  /PageMode /UseOutlines
  /Dests 1234 0 R
>>
endobj
1234 0 obj
<</__WKANCHOR_2 8 0 R/#8d#c2#ca#ebs#e4#60#00#9e#97l#b9#80#1b#cb#86sQR#83 9 0 R>>
endobj

Номер объекта будет чем-то псевдослучайным.

И то, как переместить массив dest из корня в отдельный объект, будет полностью зависеть от того, какое программное обеспечение PDF вы используете. «Шестнадцатеричный редактор» — это вариант, но тогда вы перейдете на SuperUser, а не на StackOverflow… технически. Я подозреваю, что вы могли бы получить mulligan на этом. Я бы позволил этому соскользнуть сам.


0

Mark Storer
6 Июн 2011 в 21:40

  • Произошла ошибка при отправке приеме сообщения 10053
  • Произошла ошибка при открытии данного документа не удается найти файл pdf
  • Произошла ошибка при отправке заявления ошибка работы криптопровайдера
  • Произошла ошибка при открытии данного документа возникла ошибка при чтении документа 57
  • Произошла ошибка при отправке запроса на сервер статус 500 описание internal server error