我在 windows 系统上使用 miktex。我尝试将 .tex 文件转换为 html,然后将其复制到 word。挑战来自 .pdf 图
转换过程可以通过上一篇文章实现将 .pdf 图形转换为 html 可以识别的 .png 图形,这里的导入点是将unix系统的gs改为mgs。
然而转换后的数字有一些格式问题,
1 转换后的图形尺寸是原来的两倍,右边的空白部分是转换代码造成的多余部分。2 html 中的图形尺寸太大,占据了页面宽度的数倍。
为了控制图形大小,我尝试了下面的一些代码,width="\expandafter\the\csname Gin@req@width\endcsname" align=center border=0 onerror="this.src='missing.png'" 使用代码后,图形变得太小了。
\Preamble{xhtml}
\Configure{graphics*}
{pdf}
{\Needs{"convert '\csname Gin@base\endcsname.pdf'
'\csname Gin@base\endcsname.png'"}%
\Picture[pict]{\csname Gin@base\endcsname.png width="\expandafter\the\csname Gin@req@width\endcsname" align=center border=0 onerror="this.src='missing.png'"}%
\special{t4ht+@File: \csname Gin@base\endcsname.png}
}
\DeclareGraphicsExtensions{.pdf,.png,.jpg,.eps}
\begin{document}
\EndPreamble
是否需要进行更多设置来定义 pdfconvert 以及对图形样式进行更多设置?
1 通过在 pdf 转换命令中添加开关,空白边距已被删除,如下所示
\Preamble{xhtml}
\makeatletter
\Configure{PdfConvert}{png}{"mgs -q -dNOPAUSE -dBATCH -sDEVICE=pngalpha -dUseCropBox -r300 \ifx\Gin@page\@empty\else -dFirstPage="\Gin@page" -dLastPage="\Gin@page"\fi\space -sOutputFile="\Gin@base-\[email protected]" "\[email protected]" "}
\makeatother
\begin{document}
\EndPreamble
使用开关 -dusecropbox,分辨率可以设置为 300 或更高。但是,您需要一个额外的 styl 格式文件来定义格式。
样式文件代码如下。基本上,两个 .cfg 图形文件不能轻易合并,无法获得与来自两个单独文件的相同图形格式。
\Preamble{xhtml}
\Configure{@HEAD}{\HCode{<link href="basic.css" rel="stylesheet" type="text/css" />\Hnewline}}
\DeclareGraphicsRule{.png}{bmp}{.xbb}{}
\ConfigureEnv{table}
{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="table"\Hnewline>}%
\bgroup \Configure{float}{\ShowPar}{}{}%
}
{\egroup
\ifvmode\IgnorePar\fi\EndP\HCode{</div>}\ShowPar
\par}
{}{}
\ConfigureEnv{figure}
{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="figure"\Hnewline>}%
\bgroup \Configure{float}{\ShowPar}{}{}%
}
{\egroup
\ifvmode\IgnorePar\fi\EndP\HCode{</div>}\ShowPar
\par}
{}{}
\ConfigureEnv{subfigure}
{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="subfigure">}}
{\ifvmode\IgnorePar\fi\EndP\HCode{</div>}}{}{}
\Css{.subfigure{display: inline-block;}}
\Css{.subfigure img{display:block;}}
\Css{div.caption {text-align:left;font-size:83\%;text-indent:0em; margin-left:2em; margin-right:2em; }}
%%%font-variant has 4 values, 1 normal 2 small-caps 3 initial 4 inherit
\Css{div.caption span.id{font-variant: initial; white-space: nowrap; }}
%\Css{div.caption span.id{font-variant: small-caps; white-space: nowrap; }} %%originial
%%%font-variant has 4 values, 1 normal 2 small-caps 3 initial 4 inherit
\Css{.figure div.caption{text-align: center;}}
\Css{.subfigure div.caption{text-align: center;}}
\Css{div.figure{text-align:center;clear:both;overflow:auto;width:100\%;margin-bottom:1em;}}
%%%%% for table
%\Css{div.caption{text-align:center;}}
%\Configure{float}{\csname par\endcsname\ShowPar}
%{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="float">}}
%{\ifvmode\IgnorePar\fi\EndP\HCode{</div>}\ShowPar}
%%%%%for table
\begin{document}
\makeatletter
% Various helper functions
% default font size
\newcommand\emwidth{16}
\let\emwidth\f@size
% convert pt to rem
\newcommand\CalcRem[1]{\strip@pt\dimexpr(#1)/\emwidth}
%%%%%%convert pdf to png and set the figure size %%%%%%%%%%
\Configure{graphics*}
{pdf}
{\Needs{"convert '\csname Gin@base\endcsname.pdf'
'\csname Gin@base\endcsname.png'"}%
\Picture[pict]{\csname Gin@base\endcsname.png width="\expandafter\the\csname Gin@req@width\endcsname" align=center border=0 onerror="this.src='missing.png'"}%
\special{t4ht+@File: \csname Gin@base\endcsname.png}
}
%%%%%convert pdf to png and another method to set figure size%%%%%%%%
%% you must add the file extension with
% \Configure{graphics*}
% {pdf}
% {\Needs{"convert '\csname Gin@base\endcsname.pdf'
% '\csname Gin@base\endcsname.png'"}%
% \Picture[pict]{\csname Gin@base\endcsname.png
% \space style="width:\CalcRem{\Gin@req@width}em;"}%
% \special{t4ht+@File: \csname Gin@base\endcsname.png}
%
% }
\Configure{graphics*}
{png}
{% we must add the image to the list of output files
\special{t4ht+@File: \csname Gin@base\endcsname.png}
\Picture[pict]{\csname Gin@base\endcsname\PictExt
\space style="width:\CalcRem{\Gin@req@width}em;"
}%
}
\makeatother
\EndPreamble
答案1
当前tex4ht
代码包含特殊配置,其中包含用于 PDF 转换的 shell 命令:
\Configure{PdfConvert}{output file format}{command}
可以为不同的输出格式提供不同的命令,例如svg
或png
。仅当转换后的文件不存在时才执行该命令,从而节省一些编译时间。
以下配置可用于将 PDF 转换为 PNG:
\Preamble{xhtml}
\makeatletter
\Configure{PdfConvert}{png}{"mgs -q -dNOPAUSE -dBATCH -sDEVICE=pngalpha -r120 \ifx\Gin@page\@empty\else -dFirstPage="\Gin@page" -dLastPage="\Gin@page"\fi\space -sOutputFile="\Gin@base-\[email protected]" "\[email protected]" "}
\makeatother
\begin{document}
\EndPreamble
图像尺寸的重要参数是 -r120
,即图像分辨率。默认分辨率为-r300
,可能太大了。
编辑:
以下是基于 OP 配置文件的更新配置。它直接在 PDF 包含的配置中指定 PDF 转换的参数:
\Preamble{xhtml}
\Configure{@HEAD}{\HCode{<link href="basic.css" rel="stylesheet" type="text/css" />\Hnewline}}
\DeclareGraphicsRule{.png}{bmp}{.xbb}{}
\ConfigureEnv{table}
{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="table"\Hnewline>}%
\bgroup \Configure{float}{\ShowPar}{}{}%
}
{\egroup
\ifvmode\IgnorePar\fi\EndP\HCode{</div>}\ShowPar
\par}
{}{}
\ConfigureEnv{figure}
{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="figure"\Hnewline>}%
\bgroup \Configure{float}{\ShowPar}{}{}%
}
{\egroup
\ifvmode\IgnorePar\fi\EndP\HCode{</div>}\ShowPar
\par}
{}{}
\ConfigureEnv{subfigure}
{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="subfigure">}}
{\ifvmode\IgnorePar\fi\EndP\HCode{</div>}}{}{}
\Css{.subfigure{display: inline-block;}}
\Css{.subfigure img{display:block;}}
\Css{div.caption {text-align:left;font-size:83\%;text-indent:0em; margin-left:2em; margin-right:2em; }}
%%%font-variant has 4 values, 1 normal 2 small-caps 3 initial 4 inherit
\Css{div.caption span.id{font-variant: initial; white-space: nowrap; }}
%\Css{div.caption span.id{font-variant: small-caps; white-space: nowrap; }} %%originial
%%%font-variant has 4 values, 1 normal 2 small-caps 3 initial 4 inherit
\Css{.figure div.caption{text-align: center;}}
\Css{.subfigure div.caption{text-align: center;}}
\Css{div.figure{text-align:center;clear:both;overflow:auto;width:100\%;margin-bottom:1em;}}
%%%%% for table
%\Css{div.caption{text-align:center;}}
%\Configure{float}{\csname par\endcsname\ShowPar}
%{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="float">}}
%{\ifvmode\IgnorePar\fi\EndP\HCode{</div>}\ShowPar}
%%%%%for table
\begin{document}
\makeatletter
% Various helper functions
% default font size
\newcommand\emwidth{16}
\let\emwidth\f@size
% convert pt to rem
\newcommand\CalcRem[1]{\strip@pt\dimexpr(#1)/\emwidth}
%%%%%%convert pdf to png and set the figure size %%%%%%%%%%
\makeatletter
\Configure{graphics*}
{pdf}
{%
\ifdefined\Gin@page\else\def\Gin@page{1}\fi%
\edef\svg@filename{\Gin@base-\Gin@page\PictExt}%
% test for existence of the converted file
\openin15=\svg@filename\relax
\ifeof15
\Needs{"gs -q -dNOPAUSE -dBATCH -dusecropbox -sDEVICE=pngalpha -r120 \ifx\Gin@page\@empty\else -dFirstPage="\Gin@page" -dLastPage="\Gin@page"\fi\space -sOutputFile="\Gin@base-\[email protected]" "\[email protected]" "}%
\fi
\closein15
\Picture[pict]{\svg@filename\space width="\expandafter\the\csname Gin@req@width\endcsname" align=center border=0 onerror="this.src='missing.png'"}%
\special{t4ht+@File: \svg@filename}
}
\makeatother
%%%%%convert pdf to png and another method to set figure size%%%%%%%%
%% you must add the file extension with
% \Configure{graphics*}
% {pdf}
% {\Needs{"convert '\csname Gin@base\endcsname.pdf'
% '\csname Gin@base\endcsname.png'"}%
% \Picture[pict]{\csname Gin@base\endcsname.png
% \space style="width:\CalcRem{\Gin@req@width}em;"}%
% \special{t4ht+@File: \csname Gin@base\endcsname.png}
%
% }
\Configure{graphics*}
{png}
{% we must add the image to the list of output files
\special{t4ht+@File: \csname Gin@base\endcsname.png}
\Picture[pict]{\csname Gin@base\endcsname\PictExt
\space style="width:\CalcRem{\Gin@req@width}em;"
}%
}
\makeatother
\EndPreamble