#pdf #adobe #acrobat
#PDF #adobe #acrobat
Вопрос:
У меня есть инструмент, который генерирует файлы pdf. По какой-то причине Adobe выдает мне сообщение «На этой странице существует ошибка», поэтому я упростил pdf, и кажется, что проблема возникает из путей (x, y) l в потоке. Но я не могу точно определить, в чем проблема.
Как вы можете видеть на следующих изображениях, просто удалив некоторые части пути, документы становятся действительными. Конечно, я вношу необходимые изменения смещений, когда вношу эти изменения в код. Обратите внимание, что 3 пути, которые я упомяну ниже, находятся между (x, y) m и (x, y) h в начале потока.
Взгляните на следующие примеры:
Исходный поток — не работает
stream
q
1991.040 1277.520 m
1991.040 583.681 l
1052.640 583.681 l
1052.640 578.521 l
1052.040 578.521 l
1052.040 532.321 l
1127.880 532.321 l
1127.880 533.159 l
1187.880 533.159 l
1187.880 532.321 l
1206.720 532.321 l
1206.720 532.922 l
1211.880 532.922 l
1211.880 572.040 l
1615.800 572.040 l
1615.800 532.922 l
1621.080 532.922 l
1621.080 532.321 l
1639.800 532.321 l
1639.800 533.159 l
1699.800 533.159 l
1699.800 532.321 l
1778.160 532.321 l
1778.160 532.922 l
1783.440 532.922 l
1783.440 572.040 l
1981.440 572.040 l
1981.440 522.960 l
1989.840 522.960 l
1989.840 522.361 l
2002.680 522.361 l
2002.680 597.959 l
2051.760 597.959 l
2051.760 605.882 l
2002.680 605.882 l
2002.680 752.159 l
2054.280 803.760 l
2054.399 804.000 l
2016.000 842.400 l
2010.120 842.400 l
2010.120 841.802 l
2004.360 841.802 l
2004.360 851.161 l
2002.680 851.161 l
2002.680 1009.679 l
2004.360 1009.679 l
2004.360 1017.600 l
2002.680 1017.600 l
2002.680 1164.000 l
2054.399 1215.720 l
2004.960 1265.160 l
2004.840 1265.160 l
2004.840 1272.240 l
2004.360 1272.240 l
2004.360 1277.520 l
1991.040 1277.520 l
h
2019.720 1218.600 m
2019.360 1218.480 l
2019.000 1218.360 l
2018.880 1218.240 l
2018.640 1218.120 l
2018.520 1218.000 l
2018.280 1217.880 l
2018.040 1217.400 l
2017.920 1217.280 l
2017.560 1216.560 l
2017.440 1215.720 l
2017.560 1215.600 l
2017.560 1214.880 l
2017.680 1214.880 l
2017.680 1214.640 l
2017.800 1214.640 l
2017.800 1214.400 l
2017.920 1214.400 l
2017.920 1214.160 l
2018.040 1214.160 l
2018.040 1213.920 l
2018.160 1213.920 l
2018.160 1213.680 l
2018.280 1213.680 l
2018.280 1213.440 l
2018.520 1213.440 l
2018.640 1213.320 l
2018.880 1213.200 l
2019.000 1213.080 l
2019.720 1212.840 l
2021.280 1212.720 l
2021.280 1212.840 l
2022.000 1213.080 l
2022.240 1213.200 l
2022.720 1213.680 l
2022.840 1213.920 l
2022.960 1214.040 l
2023.080 1214.280 l
2023.320 1215.000 l
2023.440 1216.440 l
2023.320 1216.440 l
2023.320 1216.800 l
2023.200 1216.800 l
2023.200 1217.160 l
2023.080 1217.160 l
2023.080 1217.400 l
2022.240 1218.240 l
2022.000 1218.360 l
2021.280 1218.600 l
2019.720 1218.600 l
h
2017.200 809.282 m
2016.840 809.158 l
2016.480 809.042 l
2016.120 808.681 l
2015.880 808.561 l
2015.760 808.321 l
2015.400 807.959 l
2015.280 807.600 l
2015.160 807.360 l
2015.040 806.401 l
2015.160 806.280 l
2015.160 805.560 l
2015.280 805.560 l
2015.280 805.202 l
2015.400 805.202 l
2015.400 804.841 l
2015.520 804.841 l
2015.880 804.480 l
2015.880 804.240 l
2016.120 804.240 l
2016.480 803.880 l
2017.200 803.522 l
2018.760 803.402 l
2018.760 803.522 l
2019.120 803.642 l
2019.600 803.880 l
2020.440 804.720 l
2020.920 805.682 l
2021.040 807.122 l
2020.920 807.122 l
2020.920 807.360 l
2020.800 807.360 l
2020.800 807.600 l
2020.680 807.600 l
2020.680 807.840 l
2020.560 807.840 l
2020.560 808.080 l
2019.720 808.921 l
2019.480 809.042 l
2018.760 809.282 l
2017.200 809.282 l
h
0.235 0.000 0.000 0.235 0.000 0.000 cm
1.000 g
4465.690 2217.310 m
8720.500 2217.310 l
8720.500 5422.810 l
4465.690 5422.810 l
4465.690 2217.310 l
h
W
n
f
Q
q
0.000 0.000 m
3456.000 0.000 l
3456.000 0.359 l
0.000 0.359 l
0.000 0.000 l
h
W
n
0.235 0.000 0.000 0.235 0.000 0.000 cm
1 J
1 j
10.000 M
1.528 w
0.000 G
14669.500 0.000 m
0.000 0.000 l
S
Q
q
0.351 0.000 0.000 0.359 3370.650 600.986 cm
29 0.00 0.00 -1 0.000 1.000 cm
/Im1 Do
Q
q
1.000 0.000 0.000 -1.000 3176.000 2155.000 cm
275 0.00 0.00 -51 0.000 51.000 cm
/Im2 Do
Q
endstream
Упрощены все 3 блока путей — Работает
stream
q
1991.040 1277.520 m
1991.040 583.681 l
1991.040 1277.520 l
h
2019.720 1218.600 m
2019.360 1218.480 l
2019.720 1218.600 l
h
2017.200 809.282 m
2016.840 809.158 l
2017.200 809.282 l
h
0.235 0.000 0.000 0.235 0.000 0.000 cm
1.000 g
4465.690 2217.310 m
8720.500 2217.310 l
8720.500 5422.810 l
4465.690 5422.810 l
4465.690 2217.310 l
h
f
Q
q
0.000 0.000 m
3456.000 0.000 l
3456.000 0.359 l
0.000 0.359 l
0.000 0.000 l
h
W
n
0.235 0.000 0.000 0.235 0.000 0.000 cm
1 J
1 j
10.000 M
1.528 w
0.000 G
14669.500 0.000 m
0.000 0.000 l
S
Q
q
0.351 0.000 0.000 0.359 3370.650 600.986 cm
29 0.00 0.00 -1 0.000 1.000 cm
/Im1 Do
Q
q
1.000 0.000 0.000 -1.000 3176.000 2155.000 cm
275 0.00 0.00 -51 0.000 51.000 cm
/Im2 Do
Q
endstream
Я не буду публиковать все образцы, но они работают следующим образом:
- Упростите все 3 пути (как показано выше) — работает
- Упростите только 1 путь таким же образом — не работает
- Упростите (первый и второй) / (второй и третий) / (первый и третий) одинаково — Работает
- Также это сработало, когда я просто удалил некоторые строки (x, y) l из всех 3 блоков случайным образом.
Примечание: последний случай заставляет меня думать, что, возможно, существует проблема с количеством строк (x, y). Как максимальное допустимое количество.
Вам нужны образцы файлов: образцы PDF
Комментарии:
1. Пожалуйста, действительно поделитесь файлами pdf. Но на самом деле есть ошибки как в полной, так и в упрощенной версии вашего потока.
2. Добавлена ссылка на файлы pdf. Я посмотрю в документации то, что вы сказали ниже, и я приду с ответом.
Ответ №1:
На самом деле есть ошибки как в полной, так и в упрощенной версии вашего потока:
- Вы меняете текущую матрицу преобразования и цвет заливки во время определения пути:
... h 0.235 0.000 0.000 0.235 0.000 0.000 cm 1.000 g 4465.690 2217.310 m ...
Это недопустимо. После начала определения пути разрешены только инструкции по определению пути до тех пор, пока не появится необязательная инструкция обрезки пути и инструкция рисования пути.
- (Только в полном потоке) Вы последовательно применяете две инструкции по рисованию путей:
n f
Это недопустимо. После инструкции рисования пути путь исчез. Перед следующей инструкцией по рисованию пути вам необходимо определить новый путь.
Я не знаю, заставит ли исправление этих проблем ваш pdf-файл работать. Чтобы разрешить проверку того, что вы должны предоставить общий доступ к рассматриваемым PDF-файлам.
В качестве отступления … после открытия обоих вариантов в Adobe Acrobat вы говорите
просто удалив некоторые части пути, документы становятся действительными.
Этого не следует. Acrobat очень терпим к ошибкам. Если Acrobat не жалуется на PDF-файл и отображает его так, как вы ожидали, это не означает, что PDF-файл действителен. Для обеспечения достоверности вы должны проверить свой pdf-файл на соответствие спецификации pdf.
После того, как вы предоставили общий доступ к PDF-файлам, я запустил полный PDF-файл через Adobe Preflight (профиль «Сообщить о проблемах с синтаксисом PDF»). Он сообщает о предупреждениях
- Недопустимое состояние потока содержимого для оператора (1 совпадение на 1 странице)
Это происходит в операторах cm и g, которые я уже указал как недопустимые выше.
- Несбалансированные операторы q и Q (1 совпадение на 1 странице)
- Неиспользуемые операнды в конце анализа потока контента (1 совпадение на 1 странице)
Это потребовало дополнительной проверки. В конце концов оказалось, что свойство длины вашего потока слишком мало. Вы используете 3329, но на самом деле речь идет о 3393
После удаления недопустимых операторов и исправления длины потока этот предполетный профиль (моего старого Acrobat 9.5) больше не обнаруживает проблемы. Тем не менее Adobe Reader по-прежнему недоволен PDF…
Еще несколько попыток…
- Если вы удалите n из последовательности nf, упомянутой выше, вы действительно сможете увидеть что-то нарисованное.
- Для всех ваших файлов Adobe Acrobat 9.5 отображает сообщение об ошибке. По-видимому, просто Acrobat DC легче запутать.
- Если вы удалите инструкции по рисованию изображений
/Im1 Do
и/Im2 Do
Adobe будет довольна. По-видимому, в них тоже есть проблемы.
Комментарии:
1. О свойстве длины. Мне это кажется большим. Я измерил его между тегами stream и endstream . Можете ли вы сказать мне, как правильно это сделать?
2. Кроме того, вы сказали, что исправили проблемы, которые делают pdf недействительным . Хотя Acrobat выдает ошибку при попытке ее открыть, верно? Но некоторые PDF-файлы, которыми я поделился с вами, уже доступны для открытия Acrobat, без удаления инструкций /Im1 Do и / Im2 Do . Как насчет них? Мне кажется, что если вы исправите их недействительность, они будут ДЕЙСТВИТЕЛЬНЫМИ и ОТКРЫВАЕМЫМИ Acrobat.
3. «О свойстве длины. Мне это кажется большим. Я измерил его между тегами stream и endstream. Можете ли вы сказать мне, какой правильный способ это сделать?» — Из ISO 32000-2: 2017: количество байтов от начала строки, следующей за ключевым словом stream, до последнего байта непосредственно перед ключевым словом endstream. (Может быть дополнительный маркер EOL, предшествующий конечному потоку, который не включен в счетчик и логически не является частью данных потока.) См. 7.3.8.2, «Экстент потока», для дальнейшего обсуждения.
4. «Но некоторые PDF-файлы, которыми я поделился с вами, уже доступны для открытия Acrobat, без удаления инструкций /Im1 Do и / Im2 Do . Что с ними?» — Только потому, что Acrobat не жалуется, не означает, что файл действителен. Кроме того, при тестировании с разными версиями Acrobat выяснилось, что некоторые версии Acrobat отклоняют все общие файлы.