//// This code is part of Document Solutions for Imaging demos.// Copyright (c) MESCIUS inc. All rights reserved.//usingSystem.IO;usingSystem.Drawing;usingGrapeCity.Documents.Text;usingGrapeCity.Documents.Imaging;usingGCTEXT = GrapeCity.Documents.Text; namespaceDsImagingWeb.Demos{// This sample demonstrates how to render short upright Latin text or numbers// in a block of vertical text. This is used in Chinese, Japanese and// Korean vertical text. In CSS this is referred to using the Japanese// name 縦中横 (tate chu yoko). To achieve this in GcGraphics,// the TextFormat.UprightInVerticalText property should be set.// A number of other properties on TextLayout and TextFormat // allow fine-tuning the behavior, as shown in this sample.publicclassTateChuYoko {publicGcBitmapGenerateImage(Size pixelSize, float dpi, bool opaque, string[] sampleParams = null) {var bmp = newGcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi);using (var g = bmp.CreateGraphics(Color.White)) { var fntJp = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "NotoSansJP-Regular.ttf"));var fntLat = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "NotoSans-Condensed.ttf"));var hiliteFore = Color.DarkSlateBlue;var hiliteBack = Color.FromArgb(unchecked((int)0xffffff99)); var tl = g.CreateTextLayout(); // Set text flow and other layout properties: tl.FlowDirection = FlowDirection.VerticalRightToLeft; tl.MaxWidth = g.Width; tl.MaxHeight = g.Height; tl.MarginAll = g.Resolution; 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); // Text format for upright text (short Latin words or numbers)// (GlyphWidths turns on corresponding font features, but makes a difference// only of those features are present in the font):var fUpright = newTextFormat() {Font = fntLat,FontSize = 14,UprightInVerticalText = true,GlyphWidths = GlyphWidths.QuarterWidths,TextRunAsCluster = true, };// Text format for vertical Japanese and sideways Latin text:var fVertical = newTextFormat(fUpright) {Font = fntJp,UprightInVerticalText = false,GlyphWidths = GlyphWidths.Default,TextRunAsCluster = false, }; // Make sure runs of sideways text do not affect vertical spacing: fVertical.UseVerticalLineGapForSideways = true;// This commented fragment effectively would do the same as the// UseVerticalLineGapForSideways property setting above:/* var scale = fVertical.FontSize * tl.FontScaleFactor / fntJp.UnitsPerEm; if (!fVertical.FontSizeInGraphicUnits) scale *= tl.Resolution / 72f; fVertical.LineGap = fntJp.VerticalLineGap * scale; */ // Two additional text formants for highlighted headers:var fUpHdr = newTextFormat(fUpright) {ForeColor = hiliteFore,BackColor = hiliteBack };var fVertHdr = newTextFormat(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); // Smaller font size for the rest of the text: fUpright.FontSize -= 2; fVertical.FontSize -= 2; // Item 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); // Item 2 tl.AppendParagraphBreak(); tl.Append("完全なテキスト描画", fVertHdr); tl.AppendSoftBreak(); tl.Append("PDF", fUpright); tl.Append("文書にテキストの描画情報が保持されます。テキストと段落の書式、特殊文字、複数の言語、縦書き、テキスト角度などが保持さるので、完全な形でテキスト描画を再現できます。", fVertical); // Item 3 tl.AppendParagraphBreak(); tl.Append(".NET Standard 2.0 準拠", fVertHdr); tl.AppendSoftBreak(); tl.Append(".NET Core、.NET Framework、Xamarinで動作するアプリケーションを開発できます。Windows、macOS、Linuxなどクロスプラットフォーム環境で動作可能です。", fVertical); // Item 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); // Item 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); }// Done:return bmp; } }}