Пакет pdfx не работает с veraPDF, а предварительная проверка не поддерживает специальные символы (UTF-8 не используется) и

Пакет pdfx не работает с veraPDF, а предварительная проверка не поддерживает специальные символы (UTF-8 не используется) и

Я закончил (после большой работы) свою докторскую диссертацию в LaTeX. Однако у меня возникла большая проблема после того, как я прочитал, что мне нужно отправить PDF как файл PDF/A. Сначала я попытался преобразовать его с помощью Acrobat Professional Software (это сделал IT-отдел), но у нас ничего не получилось. Поэтому я сделал шаг назад и попытался создать файл PDF/A с помощью LaTeX и наткнулся на пакет pdfx. При использовании этого пакета я не могу использовать , поскольку usepackage[utf8]{inputenc}он является зависимостью пакета pdfx. Однако после изменения нескольких собственных команд и других математических операторов, таких как \bullet, которые уже используются или больше не существуют, у меня возникла проблема, что умлаут ä ü ö ßбольше не работает.

Обновлятьэта проблема была связана с необновленной версией pdfx package. После обновления \usepackage[utf8]{inputenc}можно использовать и все работает нормально.


Вторая проблема в том, что сгенерированный pdf не соответствует PDF/A. preflight and veraPDFвыдал кучу ошибок, с которыми я не могу справиться. Есть идеи.


Надеюсь, кто-нибудь сможет дать мне совет.

Спасибо заранее, Тоби.

решение1

Обновление: патч для pdfx добавлен внизу (23.02.2018)

Сегодня я провел небольшое исследование по теме создания файлов PDF/A с помощью LaTeX и pdfx packageнашел решение. На самом деле я представлю две версии и проверку валидности с помощью veraPDFприложения. Хорошо, начнем. Самый простой способ — использовать Acrobat Professional (если он доступен).


Использование Acrobat Professional

  • Скомпилируйте ваш файл LaTeX в формате PDF.
  • Откройте PDF-файл на компьютере с установленным программным обеспечением Adobe.
  • Распечатайте файл на принтере Adobe PDFи выберите опцию PDF/A.
  • Проверьте с veraPDFили preflight-> действительный
  • Готово и счастливо

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


Использование pdfxпакета в LaTeX

  • Убедитесь, что у вас есть последний pdfxпакет. Для этого вы можете просто использоватьkpsewhere pdfx.sty функцию в Linux, чтобы получить путь к файлу и проверить версию (открыть его в редакторе). В моем случае у меня был старый пакет, и мне пришлось обновить пакет (https://ctan.org/pkg/pdfx?lang=en)
  • Вся информация представлена ​​в документации, а также в дополнительных материалах, таких как how to add the meta keywords.

Например, я добавил новый файл на первую позицию с помощью функции input(внимание: перед определением класса документа).

\input{Pre/Pre_MetaData}
\documentclass[...]
\input{Pre/Pre_Packages}
\input{Pre/Pre_Settings}

в то время как в Pre_MetaDataфайле можно найти такой код (который может быть расширен в соответствии с документацией пакета pdfx):

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 

\begin{filecontents*}{\jobname.xmpdata}
 \Title{Your Title of the work}
 \Author{Tobias Holzmann\sep And Others}
 \Keywords{Your\sep Keywords\sep}
 \Publisher{...}
 \Copyright{...}
\end{filecontents*}

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 

Если вы используете pdfxпакет в конце работы (я имею в виду, что вы написали книгу или диссертацию и понимаете, что вам нужно создать файл PDF/A), может случиться так, что вам придется сделать обходной путь из собственных сгенерированных команд. Поэтому я рекомендую всем, кто точно знает, что это должен быть файл PDF/A, сразу начать включать pdfx package. Кроме того, как указано в документации, хорошей идеей будет загрузить этот пакет в первую позицию. После этого вы можете перекомпилировать документ, и будет сгенерирован файл PDF/A. Подводя итог:

  • Убедитесь, что у вас установлена ​​последняя версия pdfxпакета.
  • Включите метаданные в самом начале (до начала класса документа)
  • Включите pdfxпакет в первую очередь (также ознакомьтесь со списком зависимостей: например, hyperrefпакет больше не должен включаться пользователем, потому что pdfxон загружает его...)
  • Добавьте цветовую схему в свой проект LaTeX (ее вы найдете в исходных файлах или здесь)http://www.color.org/iccprofile.xalter)
  • Устранить проблемы с собственными определенными командами (если когда-либо возникали)
  • Скомпилируйте его с помощью pdflatex (я сделал это таким образом)
  • Проверьте его veraPDF, и вы, вероятно, увидите ряд ошибок, которые обобщены и устранены ниже.
  • Если все в порядке, то вы закончили, поздравляю :)

Ошибки с veraPDFиpdfx

Я понял, что при использовании первого метода ( Acrobat Pro), preflightи veraPDFдал мне действительный результат PDF/A, в то время как с LaTeX и pdfxпакетом я провалил множество проверок. Однако это сказало мне, что есть некоторые проблемы с pdfxпакетом или в целом с PDF, написанным LaTeX.

Я получил ряд сообщений об ошибках во время проверки файла PDF/A, созданного LaTeX с использованием veraPDFи preflight. В начале у меня было более полумиллиона неудачных проверок ~ 543.000. Большинство ошибок были связаны с невключенной цветовой схемой (пункт № 4 в списке выше). Это можно легко устранить, добавив цветовую схему и сделав это.

Еще несколько ошибок было сложно вычислить, и они были связаны с прозрачными фигурами и другими функциями, которые (теперь я это знаю) не поддерживаются версией pdf 1.4. В моем проекте LaTeX есть более 50 файлов eps, которые конвертируются в pdf с помощью пакета epstopdf. Здесь проблема начинается с pdfxоснованной на проблеме, которая вводится этим пакетом. Я думаю, что это ошибка, и я уже отправил сообщение создателям.

  • В любом случае pdfxпакет установит версию PDF, которую мы создадим, на версию 1.4, которая соответствует стандарту PDF/A-1, опубликованному в 2005 году; см. ISO 190005-1 (https://en.wikipedia.org/wiki/PDF/A).
  • Однако любая настройка/опция, которую вы установите для pdfxпакета, приведет к версии pdf 1.4. Даже если спецификация PDF/A-2 выполнена. Это должно дать на самом деле версию pdf 1.7.
  • И вот тут начинается проблема, потому что epstopdfгенерирует pdf, которые являются pdf версии 1.5, в то время как документ LaTeX будет в версии 1.4. Это несовместимо, и графические pdf версии 1.5 имеют функции, которые не поддерживаются в версии 1.4
  • Это расхождение в версиях приводит к большому количеству ошибок veraPDFс непрозрачностью и прозрачностью фигур, особенно со caзначением и т. д. (https://github.com/veraPDF/veraPDF-validation-profiles/wiki/PDFA-Part-1-rules)

Кстати, узнать версию PDF-файла в Linux можно с помощью команды pdfinfo myPDF.pdf.

Чтобы избавиться от этой проблемы, нужно взломать пакет, pdfxчтобы установить правильную версию для pdf. Для этого нужно найти путь к файлу, pdfx.styиспользуя kpsewhere pdfx.styagain, и открыть его с помощью понравившегося редактора (sudo it):

sudo vim /usr/share/texlive/texmf-dist/tex/latex/pdfx/pdfx.sty

Найдите этот комментарий - строка 750 (в версии v1.5.84)

%% Hyperref options for PDF/A and PDF/E

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

\thepdfminorversion=6  % Corresponds to version 1.6

Чтобы лучше изложить позицию в моем случае, я добавил это в строку 815:

\ifpdfx@x
 \@ifpackageloaded{hyperref}{%
  \ifxetex
   \expandafter\hypersetup\expandafter{\pdfx@pdfX@opts@xetex}
  \else\ifluatex
   \expandafter\hypersetup\expandafter{\pdfx@pdfX@opts@luatex}
  \else
   \expandafter\hypersetup\expandafter{\pdfx@pdfX@opts@pdftex}
  \fi\fi
 }{%
  \ifxetex
   \expandafter\RequirePackage\expandafter[\pdfx@pdfX@opts@xetex]{hyperref}
  \else\ifluatex
   \expandafter\RequirePackage\expandafter[\pdfx@pdfX@opts@luatex]{hyperref}
  \else
   \expandafter\RequirePackage\expandafter[\pdfx@pdfX@opts@pdftex]{hyperref}
  \fi\fi
 }%
\else
 \ifpdfx@e
  \@ifpackageloaded{hyperref}{%
   \ifxetex
    \expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@xetex}
   \else\ifluatex
    \expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@luatex}
   \else
    \expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@pdftex}
   \fi\fi
  }{%
   \ifxetex
    \expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@xetex]{hyperref}
   \else\ifluatex
    \expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@luatex]{hyperref}
   \else
    \expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@pdftex]{hyperref}
   \fi\fi
  }%
 \else % generating PDF/A or ...
  \@ifpackageloaded{hyperref}{%
   \ifxetex
    \expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@xetex}%
   \else\ifluatex
    \expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@luatex}%
   \else
    \expandafter\hypersetup\expandafter{\pdfx@pdfAE@opts@pdftex}%
   \fi\fi
  }{%
   \ifxetex
    \expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@xetex]{hyperref}
   \else\ifluatex
    \expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@luatex]{hyperref}
   \else
    \expandafter\RequirePackage\expandafter[\pdfx@pdfAE@opts@pdftex]{hyperref}
   \fi\fi
 }%
\fi\fi
\hypersetup{pdfencoding=auto}%  unicode
\expandafter\ifx\csname KV@Hyp@psdextra\endcsname\relax\else
 \hypersetup{psdextra}
\fi
\thepdfminorversion=6  % Corresponds to version 1.6

После этого сохраните файл и обновите среду TeX: sudo texhash. Готово. Теперь перекомпилируйте ваш pdf, и вы получите нужную вам версию pdf (используйте pdfinfoдля проверки). После повторной проверки pdf с помощью Acrobat Pro -> preflightфайла PDF/A он оказался допустимым, и я был счастлив. Для veraPDFинструмента я все еще получаю 1 ошибку, которая связана с программами шрифтов Rule 6.3.4-1(https://github.com/veraPDF/veraPDF-validation-profiles/wiki/PDFA-Part-1-rules#rule-634-1) но я понятия не имею, что мне это говорит. Любые комментарии приветствуются здесь.

введите описание изображения здесь


pdfxупаковка

В ходе моего исследования пакета pdfxя понял, что у авторов есть куча возможных опций, которые не перечислены в документации. Однако эти опции ни на что не влияют (насколько я понял); например, опция, pdf16которая должна изменить версию pdf на 1.6. Однако я понял, что hyperrefотрывок кода, который приведен выше, является частью, в которой переменная \thepdfminorversionв любом случае изменяется на 4. Я написал это создателям и надеюсь получить некоторую обратную связь - возможно, кто-то из вас тоже заинтересуется и сможет разобраться больше (я не слишком хорошо знаком с синтаксисом LaTeX).


вераPDF

Всего несколько замечаний к veraPDF application.

  • С одной стороны, в ходе анализа ошибок мне удалось выяснить источник проблемы.
  • С другой стороны, описание Правил не дает много информации (по крайней мере, мне). Особенно ошибки, которые я получил на основе разных версий pdf (финальный файл pdf v1.4 и преобразованные в eps pdf v1.5), не дали мне прямого намека на то, что у меня разные PDF с разными версиями. Кстати, это было Правило 6.4-1 (https://github.com/veraPDF/veraPDF-validation-profiles/wiki/PDFA-Part-1-rules#rule-64-1) и Правило 6.4-2 (https://github.com/veraPDF/veraPDF-validation-profiles/wiki/PDFA-Part-1-rules#rule-64-2).

Идея создания PDF-версии возникла у меня на основе вывода preflight-> неправильной версии PDF и LaTeX, в котором были указаны некоторые вещи версий 1.4 и 1.5 с моими изображениями.

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

Наконец: pdfxтеперь работает очень хорошо для моей докторской диссертации. Спасибо за комментарии и, конечно, если вы используете, lualatexя думаю, вы можете использовать способ, которым RobtAll объяснял. Отличный форум, отличные люди! Спасибо, Тоби


pdfxпластырь

Сейчас я общаюсь с Россом Муром, и он прислал мне патч, который более подходит, чем мой фикс. Он сейчас не обновлен в официальном репозитории, поэтому я делюсь им здесь.

https://Holzmann-cfd.com/forums/pdfx.sty

Связанный контент