%2C%20%D0%BD%D0%B0%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%2C%20%D1%87%D0%B5%D0%BC%20includegraphics.png)
У меня есть файл 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
страницами, то использование includepdf
filesize 1MB
и использование includegrahicps
is11MB
ВРЕМЕННОЕ РЕШЕНИЕ
В НАСТОЯЩЕЕ ВРЕМЯ, ОСНОВАННЫЙ НА НЕКОТОРЫХ СЛЕДАХ И ОШИБКАХ, Я МОГУ СДЕЛАТЬ РАЗМЕР ФАЙЛА МЕНЬШЕ, ИСПОЛЬЗУЯ комбинацию 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
решение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