OutputIntents.cs
//
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using System.Text;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Drawing;
using GCTEXT = GrapeCity.Documents.Text;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace DsPdfWeb.Demos
{
// このサンプルでは、PDFに出力インテントを追加する方法を紹介します。
// レンダリングされた色を意図的に歪ませる ICC Probe プロファイルの
// 様々なバージョンを追加し、プロファイルが実際に使用されているかどうかを
// 簡単に確認できるようにしました。 この PDF のエフェクトを確認するには、
// Adobe Acrobat Reader DC にて PDF を開き、「編集」→「環境設定」→「ページ表示」→
// 「オーバープリントプレビューを使用」オプションを「常時」に設定してください。
// そうすれば、Probe プロファイルにより意図的に加えられた色の歪みを確認できます。
// 詳しくは、PDF仕様書の「Output Intents」の項をご覧ください。
public class OutputIntents
{
public int CreatePDF(Stream stream)
{
// ICC Probe プロファイルの様々なバージョンを使用します。
var profiles = new (string, string)[] {
("Probev2_ICCv4.icc", @"https://www.color.org/probeprofile.xalter"),
("Probev1_ICCv4.icc", @"https://www.color.org/probeprofile.xalter"),
("Probev1_ICCv2.icc", @"https://www.color.org/probeprofile.xalter"),
};
var doc = new GcPdfDocument();
var page = doc.NewPage();
var g = page.Graphics;
var sb = new StringBuilder();
const string bullet = "\x2022\x2003";
sb.AppendLine("このドキュメントには、以下の出力インテントが含まれています(最初のものがデフォルト):");
int i = 0;
foreach (var profile in profiles)
{
sb.AppendLine($"{bullet}{profile.Item1}, 入手元: {profile.Item2}");
using (FileStream fs = File.OpenRead(Path.Combine("Resources", "Misc", profile.Item1)))
{
var oi = OutputIntent.Create($"出力インテントテスト {i++}", "", "http://www.color.org", profile.Item1, fs);
doc.OutputIntents.Add(oi);
}
}
sb.AppendLine(
"ICC Probe プロファイルを介して処理された色は、意図的に歪められているため、" +
"プロファイルが使用されていることを視覚的に簡単に確認できます。" +
"この PDF のエフェクトを確認するには、Adobe Acrobat Reader DC にて PDF を開き、" +
"「編集」→「環境設定」→「ページ表示」→「オーバープリントプレビューを使用」オプションを" +
"「常時」に設定してください。そうすれば、意図的な色の歪みを確認できます。");
var rc = Common.Util.AddNote(sb.ToString(), page);
g.DrawImage(GCDRAW.Image.FromFile(Path.Combine("Resources", "Images", "roofs.jpg")),
new RectangleF(rc.Left, rc.Bottom + 24, rc.Width, rc.Width), null, ImageAlign.StretchImage);
// PDF ドキュメントを保存します。
doc.Save(stream);
return doc.Pages.Count;
}
}
}