LinearizedPdf.cs
// 
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
// 
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;

namespace DsPdfWeb.Demos.Basics
{
    // リニアライズされた PDF ファイルを作成する方法を示します。
    // 以下のコードは、サンプルブラウザに表示される PDF を生成するために使用されたものですが、
    // ブラウザにはこのファイルの静的コピーが送信されることにご注意ください。
    // これにより、Web サーバーはそれを小さなチャンクで送信できます
    // (他のすべてのサンプル PDF は動的に生成されます)。
    public class LinearizedPdf
    {
        public int CreatePDF(Stream stream)
        {
            // 生成するページ数を設定します。
            const int N = 5000;
            var doc = new GcPdfDocument();
            // テキストを保持/書式設定するための TextLayout を準備します。
            var page = doc.NewPage();
            var tl = page.Graphics.CreateTextLayout();
            tl.DefaultFormat.FontName = "Yu Gothic";
            tl.DefaultFormat.FontSize = 12;
            // TextLayout を使用して、余白を含むページ全体をレイアウトします。
            tl.MaxHeight = page.Size.Height;
            tl.MaxWidth = page.Size.Width;
            tl.MarginAll = 72;
            tl.FirstLineIndent = 72 / 2;
            // ドキュメントを生成します。
            for (int pageIdx = 0; pageIdx < N; ++pageIdx)
            {
                // メモ: サンプルテキストがページに収まらない場合がありますが問題ありません。
                tl.Append(Common.Util.getString_ja(1, 0, 20));
                tl.PerformLayout(true);
                doc.Pages.Last.Graphics.DrawTextLayout(tl, PointF.Empty);
                if (pageIdx < N - 1)
                {
                    doc.Pages.Add();
                    tl.Clear();
                }
            }
            // リニアライズされた PDF を作成するためには、PDF を保存する際に SaveMode.Linearized を指定する必要があります。
            doc.Save(stream, SaveMode.Linearized);
            return doc.Pages.Count;
        }
    }
}