pdflatex: размер файла pdf, созданного с помощью includepdfmerge(pdf-pages), намного меньше, чем includegraphics

pdflatex: размер файла pdf, созданного с помощью includepdfmerge(pdf-pages), намного меньше, чем includegraphics

У меня есть файл pdf test.pdf. Я восстанавливаю тот же pdf двумя разными методами includepdfmergeи includegraphics. Я обнаружил, что pdf, сгенерированный с помощью, includepdfmergeпочти такой же, как и исходный pdf, тогда как pdf, сгенерированный с помощью, includegraphicsв 3-4 раза больше исходного файла. Ниже приведен код latex, а также прикреплена ссылка на файлы.

МЕТОД1: использование includepdfmerge

ИМЯ ВЫХОДНОГО ФАЙЛА: test_includepdf.pdf

Скрипт добавляет 5 страниц из test.pdf

\documentclass[version=3.21]{scrartcl}
\usepackage{pdfpages}
\usepackage[showframe]{geometry}
\usepackage[automark,headsepline=false,footsepline=false]{scrlayer-scrpage}
\pagestyle{empty}
\begin{document}
\newgeometry{layoutwidth = 432pt,layoutheight = 33.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}
\includepdfmerge[fitpaper,templatesize={432pt}{33.87999pt}]{test.pdf, 1}
\newgeometry{layoutwidth = 432pt,layoutheight = 33.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}
\includepdfmerge[fitpaper,templatesize={432pt}{33.87999pt}]{test.pdf, 2}
\newgeometry{layoutwidth = 432pt,layoutheight = 33.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}
\includepdfmerge[fitpaper,templatesize={432pt}{33.87999pt}]{test.pdf, 3}
\newgeometry{layoutwidth = 432pt,layoutheight = 33.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}
\includepdfmerge[fitpaper,templatesize={432pt}{33.87999pt}]{test.pdf, 4}
\newgeometry{layoutwidth = 432pt,layoutheight = 33.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}
\includepdfmerge[fitpaper,templatesize={432pt}{33.87999pt}]{test.pdf, 5}
\end{document}

МЕТОД2: использование includegraphics

ИМЯ ВЫХОДНОГО ФАЙЛА: test_includegraphics.pdf

Скрипт добавляет 5 страниц из test.pdf

\documentclass[parskip=full,version=3.21]{scrartcl}
\usepackage{pdfpages}
\usepackage[showframe]{geometry}
\usepackage[automark,headsepline=false,footsepline=false]{scrlayer-scrpage}
\pagestyle{empty}
\setlength{\parindent}{0pt}
\setlength{\parskip}{0pt}
\setlength{\baselineskip}{0pt}
\begin{document}
\KOMAoptions{paper=432pt:33.87999pt,DIV=calc}%
\recalctypearea%
\newgeometry{layoutwidth = 432pt,layoutheight = 33.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}%
\includegraphics[width=\textwidth,keepaspectratio,page=1]{test.pdf}%
\KOMAoptions{paper=432pt:33.87999pt,DIV=calc}%
\recalctypearea%
\newgeometry{layoutwidth = 432pt,layoutheight = 33.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}%
\includegraphics[width=\textwidth,keepaspectratio,page=2]{test.pdf}%
\KOMAoptions{paper=432pt:33.87999pt,DIV=calc}%
\recalctypearea%
\newgeometry{layoutwidth = 432pt,layoutheight = 33.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}%
\includegraphics[width=\textwidth,keepaspectratio,page=3]{test.pdf}%
\KOMAoptions{paper=432pt:33.87999pt,DIV=calc}%
\recalctypearea%
\newgeometry{layoutwidth = 432pt,layoutheight = 33.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}%
\includegraphics[width=\textwidth,keepaspectratio,page=4]{test.pdf}%
\KOMAoptions{paper=432pt:33.87999pt,DIV=calc}%
\recalctypearea%
\newgeometry{layoutwidth = 432pt,layoutheight = 33.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}%
\includegraphics[width=\textwidth,keepaspectratio,page=5]{test.pdf}%
\end{document}

Все файлы доступны по ссылкеhttps://filebin.net/1498hwp3fxnngpcs Примечание: Ссылка выше перестанет действовать до 20 сентября 2020 г.

Размеры файлов, которые я получил, следующие:

 test.pdf   19 kB
 test_includepdf.pdf    20 kB
 test_includegraphics.pdf   76 kB

Как мы видим, это test_includegrahicps.pdfзначительно больше, чем test.pdfиtest_includepdf.pdf

Почему второй скрипт с includegraphics создает большие размеры pdf. Есть ли способ контролировать размер.

Потому что если я попробую на PDF со 1000страницами, то использование includepdffilesize 1MBи использование includegrahicpsis11MB

ВРЕМЕННОЕ РЕШЕНИЕ

В НАСТОЯЩЕЕ ВРЕМЯ, ОСНОВАННЫЙ НА НЕКОТОРЫХ СЛЕДАХ И ОШИБКАХ, Я МОГУ СДЕЛАТЬ РАЗМЕР ФАЙЛА МЕНЬШЕ, ИСПОЛЬЗУЯ комбинацию includepdfи includegraphics. Это не правильное решение, но в какой-то степени решает мою потребность

Я не мог понять причину своего вопроса.

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

Добавьте дополнительную первую страницу в PDF-файл, которая будет вызываться с помощью, \includepdfmergeа затем остальные страницы можно будет вызывать с помощьюincludegraphics

Итак, я попробовал.

\documentclass[parskip=full,version=3.21]{scrartcl}
\usepackage{pdfpages}
\usepackage[showframe]{geometry}
\usepackage[automark,headsepline=false,footsepline=false]{scrlayer-scrpage}
\usepackage{xcolor}
\color[RGB]{84,84,84}
\pagestyle{empty}
\setlength{\parindent}{0pt}
\setlength{\parskip}{0pt}
\setlength{\baselineskip}{0pt}
\begin{document}
%%%%%%%% ADDITIONAL PAGE IN THE START CALLED USING includepdfmerge
\newgeometry{layoutwidth = 432pt,layoutheight = 33.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}
\includepdfmerge[fitpaper,templatesize={432pt}{33.87999pt}]{test.pdf, 1}
%%%%%%  LATER PAGES CALLED USING INCLUDEGRAPHICS
\KOMAoptions{paper=432pt:38.87999pt,DIV=calc}%
\recalctypearea%
\newgeometry{layoutwidth = 432pt,layoutheight = 38.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}%
\includegraphics[width=\textwidth,keepaspectratio,page=1]{test.pdf}%
\KOMAoptions{paper=432pt:38.87999pt,DIV=calc}%
\recalctypearea%
\newgeometry{layoutwidth = 432pt,layoutheight = 38.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}%
\includegraphics[width=\textwidth,keepaspectratio,page=2]{test.pdf}%
\KOMAoptions{paper=432pt:38.87999pt,DIV=calc}%
\recalctypearea%
\newgeometry{layoutwidth = 432pt,layoutheight = 38.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}%
\includegraphics[width=\textwidth,keepaspectratio,page=3]{test.pdf}%
\KOMAoptions{paper=432pt:38.87999pt,DIV=calc}%
\recalctypearea%
\newgeometry{layoutwidth = 432pt,layoutheight = 38.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}%
\includegraphics[width=\textwidth,keepaspectratio,page=4]{test.pdf}%
\KOMAoptions{paper=432pt:38.87999pt,DIV=calc}%
\recalctypearea%
\newgeometry{layoutwidth = 432pt,layoutheight = 38.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}%
\includegraphics[width=\textwidth,keepaspectratio,page=5]{test.pdf}%
\end{document}

Вот изменения:

\newgeometry{layoutwidth = 432pt,layoutheight = 33.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}
\includepdfmerge[fitpaper,templatesize={432pt}{33.87999pt}]{test.pdf, 1}

Добавлен \includepdfmerge на начальной странице и последующих страницах с использованиемincludegraphics

\KOMAoptions{paper=432pt:38.87999pt,DIV=calc}%
\recalctypearea%
\newgeometry{layoutwidth = 432pt,layoutheight = 38.87999pt,left=0mm,right=0mm,top=0mm, bottom=0mm}%
\includegraphics[width=\textwidth,keepaspectratio,page=1]{test.pdf}%

Окончательный PDF-файл имеет одну дополнительную страницу в начале.

Теперь размер файла 20kb. Следующая ссылка — это конечный выходной pdf

https://filebin.net/5p2a32kdx80qmvni

решение1

Кажется, достаточно сохранить pdf один раз во временном ящике, чтобы запустить оптимизацию шрифтов. Это нужно только с pdflatex, lualatex делает это по умолчанию.

\documentclass{article}
\usepackage{graphicx}
\pagestyle{empty}
\makeatletter
\setbox\@tempboxa=\hbox{\includegraphics{example-image-a4-numbered}}% font is included only once
\makeatother
\begin{document}

\includegraphics[width=\textwidth,keepaspectratio,page=1]{example-image-a4-numbered}%
\newpage
\includegraphics[width=\textwidth,keepaspectratio,page=2]{example-image-a4-numbered}%
\newpage
\includegraphics[width=\textwidth,keepaspectratio,page=3]{example-image-a4-numbered}%
\newpage
\includegraphics[width=\textwidth,keepaspectratio,page=4]{example-image-a4-numbered}%
\newpage
\includegraphics[width=\textwidth,keepaspectratio,page=5]{example-image-a4-numbered}%
\end{document}

решение2

ОТВЕТ ЧАСТЬ 1: ПОЧЕМУ РАЗМЕР ФАЙЛА БОЛЬШОЙ при использовании только includegraphics

Это связано с тем, что шрифты встроены многократно.

Файл создан только с использованиемincludegraphics

$ pdffonts test_includegraphics.pdf 
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
ABCDEE+ScaGoudy                      TrueType          WinAnsi          yes yes no       9  0
ABCDEE+ScaGoudy                      TrueType          WinAnsi          yes yes no      19  0
ABCDEE+ScaGoudy                      TrueType          WinAnsi          yes yes no      31  0
ABCDEE+ScaGoudy                      TrueType          WinAnsi          yes yes no      41  0
ABCDEE+ScaGoudy                      TrueType          WinAnsi          yes yes no      51  0

Файл создан только с использованиемincludepdfmerge

$ pdffonts test_includepdf.pdf 
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
ABCDEE+ScaGoudy                      TrueType          WinAnsi          yes yes no      12  0

ФАЙЛ создан с использованием первой страницы includepdfmergeи остальных с использованиемincludegraphics

$ pdffonts test_mix.pdf       
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
ABCDEE+ScaGoudy                      TrueType          WinAnsi          yes yes no      15  0

Как можно заметить, шрифт встроен 5 timesтолько тогда, когда я его использовал, includegraphicsа в двух других случаях — толькоonce

НЕТ ОТВЕТА НА ЧАСТЬ 2: КАК ЭТОГО ИЗБЕЖАТЬ

But now the question is how can we avoid font getting embedded mutliple times when made using only includegraphics

Я нашел похожий вопрос:

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

Один из ответов говорит, что с помощью латекса это невозможно. Единственный способ сделать это позже с помощьюpdfsizeopt https://tex.stackexchange.com/a/83709/221200

Также пробовал предложенное решение \pdfinclusioncopyfonts=0, но оно не работает, или шрифты внедряются несколько раз в pdflatex

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