表明

表明

我无法使用 LaTeX 字体(例如,奥吉)用于使用生成的 PDF 表单中的文本字段电子表格我在 Windows 10 上使用 MikTeX 2.9。Acrobat Reader 正在选择另一种字体来代替它显示(看起来像 MyriadPro-Regular,它似乎是 Adob​​e Reader 用来替代缺失字体的):

在此处输入图片描述

LaTeX 字体是完全嵌入根据 Adob​​e Reader 的属性显示为“Augie”:

在此处输入图片描述

此外,根据pdffonts

pdffonts embedViaPS.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
[none]                               Type 3            Custom           yes no  no      27  0
Augie                                Type 1C           WinAnsi          yes no  no      24  0
ZapfDingbats                         Type 1C           Custom           yes no  yes     13  0
Helvetica                            Type 1C           WinAnsi          yes no  no      17  0

我的理解是,要在一个字段中使用字体,它必须是完全嵌入(而不是嵌入子集-j0)。我使用dvips并自定义了GhostScript 来实现这一点ps2pdf。以下是 TeXstudio 的(已编辑)输出,显示了所有命令:

latex.exe -src -interaction=nonstopmode embedViaPS.tex

dvips.exe -j0 -o embedViaPS.ps embedViaPS.dvi

This is dvips(k) 5.998 Copyright 2018 Radical Eye Software (www.radicaleye.com)

' TeX output 2018.08.31:1642' -> embedViaPS.ps
<C:\MikTeXPortable\texmfs/data\fonts\pk\ljfour\jknappen\ec\dpi600\ecrm1000.pk>    
<C:/MikTeXPortable/texmfs/install/dvips/base/tex.pro>    
<C:/MikTeXPortable/texmfs/install/fonts/enc/dvips/base/8r.enc>
<C:/MikTeXPortable/texmfs/install/dvips/base/texps.pro> 
<C:/MikTeXPortable/texmfs/install/dvips/base/special.pro>. 
<C:/MikTeXPortable/texmfs/install/fonts/type1/emerald/faumw.pfb>

[1]
Process exited normally

"C:\Program Files\gs\gs9.10\bin\gswin64c.exe" -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dEmbedAllFonts=true -dSubsetFonts=false -sOutputFile="C:\hiddenpath\embedViaPS.pdf" -f "C:\hiddenpath\embedViaPS.ps"

Process exited normally    

Process started: "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" "C:\hiddenpath\embedViaPS.pdf"

Process exited normally

我使用下面的 MWE 做了一些调试:

\documentclass{article}
\usepackage[dvips]{eforms}
\usepackage{emerald}
\usepackage[T1]{fontenc}
\begin{document}
\everyTextField{
    \BC{1 0 0} % border color
    \BG{.941 1 .941} % background color
    \textColor{0 0 1} % is black
    \AA{\AAFormat{console.println("Font set to: '" + event.target.textFont + "', trying to set it to: '" + event.target.value + "'"); event.target.textFont = event.target.value;}}
    \textSize{10}
    \Ff{\FfDoNotScroll}
}


% Content containing form fields, such as...
{\ECFAugie
Your name: }
\textField[\textFont{Augie}]{name}{1.5in}{12bp}
\end{document}

在 Adob​​e Reader DC 中打开该文档生成的 PDF 后,我在 JavaScript 控制台(在“首选项”中启用)中看到以下输出:

Font set to: 'Augie', trying to set it to: ''

我使用Augie作为名称,因为这就是 Adob​​e Reader 中显示的内容pdffonts和属性。但是,即使我已经使用\textField该字体初始化了(来自输出),它也不会在 Adob​​e Reader DC 中显示该字体。此外,如果我尝试使用表单字段将其重置为 Augie(键入Augie并按 Enter),我会得到以下结果:

Font set to: 'Augie', trying to set it to: 'Augie'

InvalidSetError: Set not possible, invalid or unknown.
Field.textFont:2:Field name:Format

该脚本允许我在字段中输入字体名称,当我按下 Enter 键时,它会尝试使用 JavaScript 设置该字段的字体。我能够将字段设置为其他值,例如,,,,,HelvHelveticaAnotherBauhaus93后两个值在我的 Windows 计算机上安装为 TrueType 字体)。

在此处输入图片描述

我不想(或者说不能)XeTeX使用似乎没有办法将字体完全嵌入到 PDF 中

  • 该字体还有其他名称吗Augie
  • 字体是否还有其他细节不正确,例如它不是可编辑根据其fsType/FSType我甚至可以在 LaTeX 中控制它吗? 编辑作为测试,我faumw.pfb使用 FontForge 破解了 Augie 字体(),并将其设置为fsType 为 8 -可编辑嵌入,但什么都没改变。
  • 我还没有尝试在 MikTeX 中安装 TrueType(OpenType)字体,因为这是一个漫长的过程,但也许这样会产生更好的结果?

答案1

理论上,根据 PDF 规范,任何嵌入文档字体也可以用于交互式 PDF 表单,例如文本输入字段。要实现此功能,字体必须在/AcroForm文档的 PDF 目录词典中正确注册。

这是一个 LaTeX 示例,使用标准 CM 字体(PostScript Type 1)的样式、大小和颜色的各种组合:

表明

在此处输入图片描述 还,福昕阅读器正确显示字体。

唉,

爱看阅读器

无法显示嵌入的 T1 字体,这很可能是一个错误。看来 AR 只能正确解析 TrueType 字体。

在此处输入图片描述

为了生成所示的 PDF,无法使用创建 PDF 表单的标准包hyperrefeforms,因为它们无法注册用于表单的嵌入字体。相反,我们\textField根据文件重新实现命令pdfbase.sty。它提供\pbs_add_form_font:将当前文本字体对象映射为/AcroForm字典中的字体资源的功能。为了访问字体对象,\pbs_add_form_font:使用pdftex内置的\pdffontobjnum。因此,下面的示例只能使用pdflatex或来处理lualatex

\documentclass{article}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Text Input Field
% \textField{<name>}{<width>}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{pdfbase,xcolor}
\makeatletter
\ExplSyntaxOn
  \newcommand{\textField}[2]{
    % register current font in /AcroForm <<...>> PDF dictionary
    \pbs_add_form_font:
    % get current text colour
    \extractcolorspec{.}\@tempb
    \expandafter\convertcolorspec\@tempb{rgb}\@tempb
    \edef\@tempa{\expandafter\@rgbcomp\@tempb\@nil}
    % insert Text Field
    \raisebox{0.4\depth}{\makebox[#2][l]{
      \pbs_pdfannot:nnnn{#2}{\ht\strutbox}{\dp\strutbox}{
        /Subtype/Widget/FT/Tx/T (#1)
        % set font, size, current colour
        /DA (\pbs_last_form_font:\space\f@size\space Tf~\@tempa\space rg)
        /MK<</BC [0~0~0]/BG [0.9~0.9~0.9]>>
      }\strut
    }}
    % register Text Field in /AcroForm
    \pbs_appendtofields:n{\pbs_pdflastann:}
  }
\ExplSyntaxOff
\def\@rgbcomp#1,#2,#3\@nil{#1 #2 #3} %helper
\makeatother  

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% set of characters of the current font to be embedded
\usepackage{luatex85}
\newcommand{\embedChars}[1]{\pdfincludechars\font{#1}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\parindent=0pt

\begin{document}
%\normalfont%
\embedChars{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789- /}%
First Name: \textField{myFName1}{0.4\linewidth}\\
Last Name: \textField{myLName1}{0.4\linewidth}\\
Date of Birth: \textField{myBDate1}{0.2\linewidth}\\

\scshape\Large\color{red}%
\embedChars{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789- /}%
First Name: \textField{myFName2}{0.4\linewidth}\\
Last Name: \textField{myLName2}{0.4\linewidth}\\
Date of Birth: \textField{myBDate2}{0.3\linewidth}\\

\huge\itshape\color{blue}%
\embedChars{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789- /}%
First Name: \textField{myFName3}{0.4\linewidth}\\
Last Name: \textField{myLName3}{0.4\linewidth}\\
Date of Birth: \textField{myBDate3}{0.6\linewidth}\\

\end{document}

相关内容