我们使用cairo来编写pdf文件。结果很棒,文件是可编辑的,因此我们可以通过复制和粘贴来提取文本,甚至可以在Adobe Illustrator和Inkscape中打开和编辑文件以更改字体属性。
但是一旦我们将PDF转换为EPS,所有字体都会转换为轮廓。
我最喜欢的工具是pdftops和gs,这是我尝试的方式:
gs -sDEVICE=eps2write -dLanguageLevel=3 -dEmbedAllFonts=true -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.eps input.pdf
和
pdftops -eps -level3 input.pdf output.eps
此外,我通过命令行尝试了ps2eps,ps2epsi,epspdf和Inkscape,但结果总是相同的,所有字体都转换为轮廓。
我们正在使用Dejavu字体,字体嵌入似乎还可以:
$ pdffonts input.pdf
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
JTFVDF+DejaVuSans-Bold TrueType WinAnsi yes yes yes 5 0
BTWYHK+DejaVuSansCondensed-Bold TrueType WinAnsi yes yes yes 6 0
VIBPBS+DejaVuSans-Oblique TrueType WinAnsi yes yes yes 7 0
TKGUZX+DejaVuSansCondensed TrueType WinAnsi yes yes yes 8 0
知道如何使用可编辑字体生成EPS文件吗?
这是我的文件:https://www.dropbox.com/s/11afckra7i8trdq/input.pdf?dl=0
Ghostscript的eps2write设备不会将字体转换为轮廓。顺便说一句,你怎么知道字体正在转换为轮廓?
我会抓住你提供的示例文件(点赞!很多人不这样做)并很快报告,我可以马上想到 2 种可能性:
- 该文件包含透明度。Cairo 习惯于创建包含透明度操作的 PDF 文件,这些操作实际上不会执行任何操作(例如将 alpha 设置为 100%)。您无法在 PostScript 中表示 PDF 透明度,因此整个页面都会呈现为图像。
- 该文件是一个图像(或类似图像),在文本呈现模式 3(既不描边也不填充)中,顶部有文本。尽管实际文本是不可见的,但 Acrobat 和其他应用程序通常允许您剪切/粘贴它。但是,PostScript没有执行此操作的模式,并且由于文本不会做任何标记,因此通常只会被删除。
[后来]
嗯,复杂的文件。解压缩后,这是> 11 MB。
无论如何,该页面位于透明度组中:
9 0 obj
<<
/Type /Page
/Parent 1 0 R
/MediaBox [ 0 0 720 720 ]
/Contents 3 0 R
/Group <<
/Type /Group
/S /Transparency
/I true
/CS /DeviceRGB
>>
/Resources 2 0 R
>>
endobj
但是,看起来Ghostscript决定可以删除透明度,因为该页面不是完整的位图。
我得到的eps文件没有将字体转换为轮廓,它嵌入了完整的字体,并使用它们,例如:
8 0 obj
<</BaseFont/ENTCOM+DejaVuSansCondensed-Bold/FontDescriptor 9 0 R/Type/Font
/FirstChar 32/LastChar 220/Widths[
313 0 0 0 0 0 0 0 0 0 0 0 0 374 0 0
0 0 0 0 0 626 626 626 0 0 0 0 0 0 0 0
0 696 686 660 747 615 615 738 753 334 0 697 573 896 753 765
659 765 693 648 614 730 696 993 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 730]
/Encoding 20 0 R/Subtype/TrueType>>
endobj
%%EndResource
9 0 obj
<</Type/FontDescriptor/FontName/ENTCOM+DejaVuSansCondensed-Bold/FontBBox[-362 -176 964 927]/Flags 4
/Ascent 745
/CapHeight 745
/Descent -176
/ItalicAngle 0
/StemV 144
/MissingWidth 540
/FontFile2 17 0 R>>
endobj
%%EndResource
%%BeginResource: file (PDF FontFile obj_17)
17 0 obj
<</Filter/ASCII85Decode
/Length1 6088/Length 7019>>stream
!!*'"!"ApY!!<3t:K&o%z!!!e-!!!""@r5Xnz!!!J!!!)-@s2r:5.NBR!!!#S!!!("AoMC">68U0
!!!*T!!!##B5Dj*z!!!DJ!!!86BOtU_%6ag,!!!gs!!!!WBP:sc%JC""!!!,V!!!!EBPhj9z!!!f0
.....
Lots of data omitted
.....
!!)s8!!<3$zzzzzzz!!*'"!!6K:Z*:FC?Oo9l!$;IHze&!X4ze&!X4peC[h%QOi,!!*'*zz~>
endstream
endobj
所以这是一个 TrueType 字体,稍后使用:
10 0 0 10 0 0 cm BT
/R8 12.96 Tf
1 0 0 1 262.795 318.916 Tm
[(N)1(E)1(US)0.998415(T)79.0063(ADT)1.00218]TJ
126.609 339.675 Td
[(F)1(IN)1.00218(DO)0.998415(R)1.00218(F)0.998415(F)1.00218]TJ
-338.998 -203.387 Td
[(W)1(O)1(L)166.005(T)1(M)1(E)1(R)1(S)1(H)1(A)29.9863(US)1(E)1(N)1]TJ
373.499 -12.6809 Td
[(M)0.998415(IT)-21.9915(T)0.998415(E)1.00218]TJ
ET
可能是您使用的是旧版本,我使用的是当前版本9.21。如果做不到这一点,那么显而易见的问题是"你为什么认为字体是轮廓?