PDF语法BT ET文本操作

PDF语法BT ET文本操作,pdf,pdf-generation,Pdf,Pdf Generation,查看PDF语法流BT ET,我有一些问题,我无法从PDF32000操作手册中理解: 一个好的在线资源链接也将是伟大的 BT/F1 24 Tf。。。(我的字符串在这里)Tj ET 看看这段代码 如何插入换行符?使用\n\r没有帮助 如何更改字体大小 大胆地在字符串的中间 我试过英语以外的语言,但没能学好,我怎么能学好其他语言,希伯来语、阿拉伯语、汉语等等。。。更改字体没有帮助,编码到UTF16也没有帮助,我应该编码到不同的地方并设置编码吗 如何将文本限制在一定的宽度 如何设置线条高度属性 在同一

查看PDF语法流BT ET,我有一些问题,我无法从PDF32000操作手册中理解:

一个好的在线资源链接也将是伟大的

BT/F1 24 Tf。。。(我的字符串在这里)Tj ET

看看这段代码

  • 如何插入换行符?使用
    \n\r
    没有帮助
  • 如何更改字体大小 大胆地在字符串的中间
  • 我试过英语以外的语言,但没能学好,我怎么能学好其他语言,希伯来语、阿拉伯语、汉语等等。。。更改字体没有帮助,编码到UTF16也没有帮助,我应该编码到不同的地方并设置编码吗
  • 如何将文本限制在一定的宽度
  • 如何设置线条高度属性
  • 在同一行中混合多种字体

我知道我可以使用PDFKit和PDFJS等。。。但是我真的很想知道PDF语法是如何工作的,在线PDF32000手册真的很长很复杂…

首先,米切尔说的当然是对的


不幸的是,如果您想了解PDF语法是如何工作的,您需要阅读规范。当然,您只能阅读适用于文本的部分,第9章,可能还有9.2。但本章当然假设您了解PDF在结构上的工作方式以及对象的类型。我建议你读一读

不过,为了给你一些印象,这里有一些问题的答案

换行符 如何插入换行符?使用\n\r没有帮助

通过将文本拆分为单独的字符串(每行一个字符串)并分别绘制,然后通过重新定位当前文本位置前进到中间的下一行,可以在不同的行上绘制文本。有不同的方法来重新定位。例如

(Line 1 text) Tj
0 -20 Td
(Line 2 Text) Tj
字重 <如何在字符串

中间更改字体权重为粗体? 通过选择粗体字体,例如

/MyNormalFont 12 Tf
(Normal text - ) Tj
/MyBoldFont 12 Tf
(bold text) Tj
/MyNormalFont 12 Tf
( - normal text again) Tj
您可以输出“普通文本-粗体文本--再次输出普通文本”

(还有穷人的粗体效果,比如用小胶印机双面打印字母…)

其他语言 我试过英语以外的语言,但没能学好,我怎么能学好其他语言,希伯来语、阿拉伯语、汉语等等。。。更改字体没有帮助,编码到UTF16也没有帮助,我应该编码到不同的地方并设置编码吗

您必须声明字体才能在内容流中使用它们。在此声明中,您特别定义了使用相关字体绘制的文本所使用的编码。对于上面的示例,编码必须是ASCII'ish,例如winansioncoding,但您通常会发现其他编码,特别是对于非英语文本

为此,您必须考虑类型<强>字体>的<强>资源>强。有关详细信息,请参阅规范第9章

另请参见下面“非拉丁字符”下的示例

限制文本宽度 如何将文本限制在一定的宽度

通过绘制足够少的字符

如上所述,在将字符串绘制指令放入内容流之前,必须将其拆分为多行。只需根据需要选择尽可能短的行

线高 如何设置线条高度属性

你是说从一条线的底部到下一条线的底部的距离吗?还是说字体的高度

前一个距离的选择方式取决于您到下一行的方式,请参见上文“换行符”下的内容。如果您像这里的示例中那样做,那么使用

0 -20 Td
您可以在字体选择说明中设置后一种高度,即字体高度,例如在上面的“字体重量”中

选择大小为12个单位的MyNormalFont

关于这些单位:一个单位通常以1/72英寸开始,但通过改变转换矩阵(参见本规范第8节),您可以改变它

多种字体 在同一行中混合多种字体

请参阅上面的“字体权重”,不同的字体权重是使用不同的字体实现的

非拉丁字符 在评论中:

你能举一个插入英语以外的外语字符的例子吗

一个选项是创建一个PDF字体,将给定字体程序中需要的字符按名称映射到单字节编码的0..255范围。这对于希伯来语或阿拉伯语写作来说是可以的,但对于CJK写作来说就不那么好了

因为你只要求一个字符,所以我在示例中只放了一个字符。。。此外,我使用Arial,希望有问题的PDF查看器可以在手头的系统中找到,也就是说,我不嵌入它

因此,对于put at code 32(ASCII派生编码中的空格)中名为Alefmaksuraaraabic的阿拉伯文字符alef maksura的字体,可以使用:

1 0 obj
<<
  /Type /Font
  /Subtype /TrueType
  /BaseFont /Arial
  /Encoding
  <<
    /BaseEncoding /WinAnsiEncoding
    /Differences [ 32 /alefmaksuraarabic ]
  >>
  /FirstChar 32
  /LastChar 32
  /FontDescriptor 2 0 R
  /Widths [ 600 ]
>> 
endobj
2 0 obj
<<
  /Type /FontDescriptor
  /FontName /Arial
  /StemV 44
  /Leading 33
  /Ascent 905
  /Flags 32
  /XHeight 250
  /FontWeight 400
  /AvgWidth 441
  /Descent -210
  /CapHeight 728
  /MaxWidth 2665
  /FontBBox [-665 -210 2000 728]
  /ItalicAngle 0
>>
endobj
进入您的内容流并获取


不幸的是,如果您想了解PDF语法的工作原理,您需要阅读规范。当然,您只能阅读适用于文本的部分,第9章,可能还有9.2。但本章当然假设您了解PDF在结构上的工作方式以及对象的类型。我建议你读一下。说明书中没有提到你的清单,因为坦率地说,这不是PDF使用的文本处理级别。一次只需要一种字体、一种样式、一种大小。语言与文本的呈现方式完全无关。也许,出于您的目的,您最好生成一个Microsoft Word.docx文档。@MichaëlDemey-这个想法是让阅读它的人给出一个简单的答案。无论如何谢谢你!谢谢你的回答,你能举一个插入英语以外的外语字符的例子吗无法让它工作…@levi,如果你真的要求包括非西方特克斯
1 0 obj
<<
  /Type /Font
  /Subtype /TrueType
  /BaseFont /Arial
  /Encoding
  <<
    /BaseEncoding /WinAnsiEncoding
    /Differences [ 32 /alefmaksuraarabic ]
  >>
  /FirstChar 32
  /LastChar 32
  /FontDescriptor 2 0 R
  /Widths [ 600 ]
>> 
endobj
2 0 obj
<<
  /Type /FontDescriptor
  /FontName /Arial
  /StemV 44
  /Leading 33
  /Ascent 905
  /Flags 32
  /XHeight 250
  /FontWeight 400
  /AvgWidth 441
  /Descent -210
  /CapHeight 728
  /MaxWidth 2665
  /FontBBox [-665 -210 2000 728]
  /ItalicAngle 0
>>
endobj
BT
/F 12 Tf
15 815 Td
(Test: ) Tj
/G 12 Tf
( ) Tj
ET