如何使用 pdflatex 在编译时嵌入字体

如何使用 pdflatex 在编译时嵌入字体

我刚刚在尝试使用 lulu.com 发布时遇到了嵌入字体的问题。虽然每个人似乎都“应该”处理这 35 种标准字体,但出于某种奇怪的原因,他们不会接受没有包含这些字体的 pdf。因此,根据Daniel Lemire 的博客应该可以工作(我还没有尝试,但希望它确实可以工作)是将 pdf 转换为 ps 然后再转换回 pdf 并包含当时的字体:

pdftops file.pdf
ps2pdf14 -dPDFSETTINGS=/prepress file.ps

但至少在我看来,这是错误的做法。有没有办法将参数直接传递给 pdflatex 以告诉它嵌入这些字体?

如果没有的话——我们该如何获得这样的功能?(因为不可能只有我一个人遇到这种问题)

答案1

确保文件pdftexDownloadBase14中的设置设置updmap.cfg为,true以使 pdflatex 嵌入基本 14 种 pdf 字体。如果您使用普通 latex,则应设置dvipdfmDownloadBase14true。最好同时设置两者。在我的 TeXLive 2010 安装中,它已经设置为true,并且我从未遇到过 IEEE 论文提交问题。

您可以通过运行来编辑此配置文件updmap --edit(在 Linux 下最有可能sudo事先以 root 身份使用;不确定 M$ Windows 是否如此)。

以下是文件中的解释updmap.cfg

# pdftexDownloadBase14
#
# Should pdftex download the base 14 pdf fonts? Since some configurations
# (ps / pdf tools / printers) use bad default fonts, it is safer to download
# the fonts. The pdf files will get bigger, though.
# Valid settings are true (download the fonts) or false (don't download
# the fonts). Adobe recommends embedding all fonts.
pdftexDownloadBase14 true

还要确保作为图像包含的 PDF 或 EPS 文件包含所有内容他们的字体本身。如果您从 M$ Office(例如 Visio)生成这些 PDF 或 EPS 图像,这可能是一个问题,因为它们使用最明确的不同字体。据我所知,LaTeX 无法包含这些缺失的字体,因为它们不是主文档的一部分,而是嵌入对象(图像)的一部分。这里唯一的解决方案是先将字体嵌入到它们中,方法是使用您用于此目的的软件(例如 PDF 打印机)中的正确设置重新生成它们,或者通过运行ps2pdf14图片事先而非最终文件。

答案2

我知道这是一个老话题,但我在寻找解决方案时偶然发现了它。我找到了一个,所以我与你分享。我通常嵌入由 R 生成的 pdf。不幸的是,R 也不嵌入字体。使用 ghostscript 处理 LaTeX 的输出将保留文档中的所有链接:

gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dEmbedAllFonts=true -sOutputFile=$YOUR_OUTPUT_FILE.pdf -f $YOUR_INPUT_FILE.pdf

-dNOPLATFONTS如果系统上安装的字体没有特定文档所需的所有字符,还可以添加到命令行以使用标准 pdf 字体(如 Palatino、Times 和 Helvetica)的 ghostscript 版本。

答案3

不幸的是,当我尝试在图像中嵌入字体以用于 pdfTeX 时,Tobias 的方法对我不起作用。根据 StackOverflow 的答案,遵循以下命令行对我有用:

 gs -dCompatibilityLevel=1.4 \
    -dPDFSETTINGS=/screen \
    -dCompressFonts=true \
    -dSubsetFonts=true \
    -dNOPAUSE \
    -dBATCH \
    -sDEVICE=pdfwrite \
    -sOutputFile=image_with_fonts.pdf \
    -c ".setpdfwrite <</NeverEmbed [ ]>> setdistillerparams" \
    -f image_without_fonts.pdf

相关内容