TateChuYoko.cs
// 完毕:
using System;
using System.IO;
using System.Drawing;
using System.Text.RegularExpressions;
using GrapeCity.Documents.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;
using GCTEXT = GrapeCity.Documents.Text;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace DsPdfWeb.Demos.Basics
{
// 此示例演示如何呈现短直立拉丁文本或数字
// 在垂直文本块中。这用于中文、日文和
// 韩文竖排文字。在 CSS 中,这是使用日语来引用的
// 名縦中横(tate chu yoko)。为了在 GcGraphics 中实现这一点,
// 应设置 TextFormat.UprightInVerticalText 属性。
// TextLayout 和 TextFormat 上的许多其他属性
// 允许您微调行为,如本示例所示。
public class TateChuYoko
{
public int CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
var page = doc.NewPage();
var g = page.Graphics;
var rc = Common.Util.AddNote(
"竖排文本通常包括短的水平数字或拉丁文本。" +
"",
page);
var fntJp = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "YuGothM.ttc"));
var fntLat = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "MyriadPro-Cond.otf"));
var hiliteFore = Color.DarkSlateBlue;
var hiliteBack = Color.FromArgb(unchecked((int)0xffffff99));
var tl = g.CreateTextLayout();
// 设置文本流和其他布局属性:
tl.FlowDirection = FlowDirection.VerticalRightToLeft;
tl.MaxWidth = page.Size.Width;
tl.MaxHeight = page.Size.Height;
tl.MarginAll = 72;
tl.MarginTop = rc.Bottom + 36;
tl.ParagraphSpacing = 12;
tl.LineSpacingScaleFactor = 1.4f;
// g.FillRectangle(
// new RectangleF(tl.MarginLeft, tl.MarginTop, tl.MaxWidth.Value - tl.MarginLeft - tl.MarginRight, tl.MaxHeight.Value - tl.MarginTop - tl.MarginBottom),
// Color.AliceBlue);
// 直立文本的文本格式(短拉丁文字或数字)
// (GlyphWidths 打开相应的字体功能,但会产生差异
// 字体中仅存在这些功能):
var fUpright = new TextFormat()
{
Font = fntLat,
FontSize = 14,
UprightInVerticalText = true,
GlyphWidths = GlyphWidths.QuarterWidths,
TextRunAsCluster = true,
};
// 竖排日语和横排拉丁文本的文本格式:
var fVertical = new TextFormat(fUpright)
{
Font = fntJp,
UprightInVerticalText = false,
GlyphWidths = GlyphWidths.Default,
TextRunAsCluster = false,
};
// 确保横向文本的运行不会影响垂直间距:
fVertical.UseVerticalLineGapForSideways = true;
// 这个注释片段实际上会起到与
// 上面的 UseVerticalLineGapForSideways 属性设置:
/*
var scale = fVertical.FontSize * tl.FontScaleFactor / fntJp.UnitsPerEm;
if (!fVertical.FontSizeInGraphicUnits)
scale *= tl.Resolution / 72f;
fVertical.LineGap = fntJp.VerticalLineGap * scale;
*/
// 用于突出显示标题的两个附加文本共振峰:
var fUpHdr = new TextFormat(fUpright)
{
ForeColor = hiliteFore,
BackColor = hiliteBack
};
var fVertHdr = new TextFormat(fVertical)
{
ForeColor = hiliteFore,
BackColor = hiliteBack
};
tl.Append("PDF", fUpright);
tl.Append("ファイルをコードから", fVertical);
tl.Append("API", fUpright);
tl.Append("を利用することで操作できます。クロスプラットフォーム環境で動作するアプリケーションの開発を支援する", fVertical);
tl.Append("API", fUpright);
tl.Append("ライブラリです。", fVertical);
// 文本其余部分的字体较小:
fUpright.FontSize -= 2;
fVertical.FontSize -= 2;
// 1:
tl.AppendParagraphBreak();
tl.Append("PDF", fUpHdr);
tl.Append("用の包括的な", fVertHdr);
tl.Append("API", fUpHdr);
tl.AppendSoftBreak();
tl.Append("PDF", fUpright);
tl.Append("バージョン「", fVertical);
tl.Append("1.7", fUpright);
tl.Append("」に準拠した", fVertical);
tl.Append("API", fUpright);
tl.Append("を提供し、レイアウトや機能を損なうことなく、豊富な機能を備えた", fVertical);
tl.Append("PDF", fUpright);
tl.Append("文書を生成、編集、保存できます。", fVertical);
// 2:
tl.AppendParagraphBreak();
tl.Append("完全なテキスト描画", fVertHdr);
tl.AppendSoftBreak();
tl.Append("PDF", fUpright);
tl.Append("文書にテキストの描画情報が保持されます。テキストと段落の書式、特殊文字、複数の言語、縦書き、テキスト角度などが保持さるので、完全な形でテキスト描画を再現できます。", fVertical);
// 3:
tl.AppendParagraphBreak();
tl.Append(".NET Standard 2.0 準拠", fVertHdr);
tl.AppendSoftBreak();
tl.Append(".NET Core、.NET Framework、Xamarinで動作するアプリケーションを開発できます。Windows、macOS、Linuxなどクロスプラットフォーム環境で動作可能です。", fVertical);
// 4:
tl.AppendParagraphBreak();
tl.Append("100", fUpHdr);
tl.Append("を超える", fVertHdr);
tl.Append("PDF", fUpHdr);
tl.Append("操作機能", fVertHdr);
tl.AppendSoftBreak();
tl.Append("ページの追加や削除、ページサイズ、向きの変更だけでなく、ファイルの圧縮、", fVertical);
tl.Append("Web", fUpright);
tl.Append("に最適化した", fVertical);
tl.Append("PDF", fUpright);
tl.Append("の生成など高度な機能も", fVertical);
tl.Append("API", fUpright);
tl.Append("操作で実現します。また、署名からセキュリティ機能まで様々な機能を含んだ", fVertical);
tl.Append("PDF", fUpright);
tl.Append("フォームを生成可能です。", fVertical);
// 5:
tl.AppendParagraphBreak();
tl.Append("高速、軽量アーキテクチャ", fVertHdr);
tl.AppendSoftBreak();
tl.Append("軽量", fVertical);
tl.Append("API", fUpright);
tl.Append("アーキテクチャでメモリと時間を節約できます。", fVertical);
tl.AppendSoftBreak();
tl.Append("また、他の生成用ツールに依存せずドキュメントを生成可能です。", fVertical);
// 6:
tl.AppendParagraphBreak();
tl.Append("クラウドアプリケーション展開", fVertHdr);
tl.Append("", fUpHdr);
tl.AppendSoftBreak();
tl.Append("Azure、AWSなどのサービスに配置するクラウドアプリケーションの開発で利用可能です。仮想マシン、コンテナ、サーバーレスなどの方法で配置できます。", fVertical);
tl.PerformLayout(true);
g.DrawTextLayout(tl, PointF.Empty);
// 完毕:
doc.Save(stream);
return doc.Pages.Count;
}
}
}