如何将cairo-pdf转换为eps而不将字体转换为轮廓

时间:2017-05-25 11:33:57

标签: ghostscript cairo postscript eps poppler

我们使用cairo来编写pdf文件。结果很棒,文件是可编辑的,所以我们可以通过copy& amp;粘贴甚至打开并编辑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

1 个答案:

答案 0 :(得分:1)

Ghostscript的eps2write设备不会将字体转换为轮廓。顺便说一句,你怎么知道字体被转换为轮廓?

我会抓住你提供的示例文件(荣誉!一大群人不这样做)并尽快报告,我可以想到2种可能性:

  • 该文件包含透明度。开罗有一种创建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。如果没有明显的问题,“为什么你认为字体是轮廓?”