lev*_*evi -1 pdf pdf-generation
看看PDF语法流BT ET我有一些问题,我从PDF32000操作手册中无法理解:
良好的在线资源链接也很棒......
BT /F1 24 Tf ... (My String is here)Tj ET
看看这段代码,
\n\r没有帮助我知道我可以使用PDFKit和PDFJS等...但我真的很想知道PDF语法是如何工作的,在线PDF32000手册真的很长很复杂......
首先,Michaël当然是对的
不幸的是,如果您想了解PDF语法的工作原理,您需要阅读规范.您当然只能阅读适用于文本的部分,第9章,可能还有9.2.但是,本章当然假设您了解PDF在结构上的工作原理以及对象的类型.我建议阅读它.
但是,为了给你一些印象,这里有一些问题的答案...
如何插入换行符?使用\n\r没有帮助
您可以通过将文本分成不同的行来绘制文本,每行一个,并分别绘制它们,通过重新定位当前文本位置前进到下一行.有不同的方法来重新定位.例如
(Line 1 text) Tj
0 -20 Td
(Line 2 Text) Tj
Run Code Online (Sandbox Code Playgroud)
如何在字符串中间将font-weight更改为粗体
通过选择粗体字体,例如
/MyNormalFont 12 Tf
(Normal text - ) Tj
/MyBoldFont 12 Tf
(bold text) Tj
/MyNormalFont 12 Tf
( - normal text again) Tj
Run Code Online (Sandbox Code Playgroud)
您可以输出"普通文本 - 粗体文本 - 再次正常文本".
(也有穷人的大胆效果,比如双重打印带有小偏移的字母......)
尝试过英语以外的其他语言并且无法正确使用,我怎么能做其他语言,希伯来语,阿拉伯语,中文等...改变字体没有帮助,编码到UTF16也没有帮助,我应该编码不同的东西,并在某处设置编码?
您必须声明字体才能在内容流中使用它们.在此声明中,您特别定义了用于使用相关字体绘制的文本的编码.对于上面的示例,编码必须是ASCII'ish,例如WinAnsiEncoding,但您经常会找到其他编码,特别是对于非英文文本.
为此,您必须考虑Font类型的资源.详情请参阅 规范第9章.
另请参阅下面的"非拉丁字符"下的示例.
如何将文本限制为一定的宽度
通过绘制足够少的字符.
如上所述,在将字符串绘制指令放入内容流之前,必须将其拆分为行.只需根据需要选择这些线.
如何设置行高属性
你的意思是从一条线的底部到下一条线的底部的距离?或者你的意思是字体高度?
如何选择前一个距离,取决于你如何进入下一行,见上文"换行符".如果您在那里的示例中这样做,则使用20个单位下一行到下一行
0 -20 Td
Run Code Online (Sandbox Code Playgroud)
您可以在字体选择指令中设置后一个高度,字体高度,例如上面的"字体粗细"
/MyNormalFont 12 Tf
Run Code Online (Sandbox Code Playgroud)
选择大小为12个单位的MyNormalFont.
关于这些单位:单位通常以1/72英寸开始,但通过更改变换矩阵(参见规范第8节),您可以更改它.
在同一行中混合多种字体
请参阅上面的"字体粗细",使用不同的字体实现不同的字体粗细.
来自评论:
你能举一个插入英语以外的外语字符的例子吗?
您可以选择创建一种PDF字体,该字体将您需要的字符按名称从给定的字体程序映射到0..255范围,以进行单字节编码.这对希伯来语或阿拉伯语写作是好的,但对于CJK写作则不那么好.
由于你只要求一个字符,我只在示例中添加一个字符...此外,我使用Arial并期望有问题的PDF查看器在手边的系统中找到,即我没有嵌入它.
因此,对于具有阿拉伯字符的字体alef maksura在Adobe Glyph List中的名为alefmaksuraarabic的代码为32(ASCII派生编码中的空格),您可以使用:
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
Run Code Online (Sandbox Code Playgroud)
对于标准Times-Roman/WinAnsiEncoding字体作为字体资源F和上面定义为字体资源G的字体,您可以编写
BT
/F 12 Tf
15 815 Td
(Test: ) Tj
/G 12 Tf
( ) Tj
ET
Run Code Online (Sandbox Code Playgroud)
进入你的内容流并得到
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |