NoPassGetPageInfo.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
{
// このサンプルでは、パスワードで保護されたPDFを読み込み、そのページ数とページサイズを取得する方法を紹介しています。
// 参考までに、読み込むPDFはオーナーパスワード「owner」とユーザーパスワード「user」で保護されています。
public class NoPassGetPageInfo
{
public int CreatePDF(Stream stream)
{
using var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "Wetlands-password-user.pdf"));
// パスワードで保護されたPDFをパスワードを指定せずに読み込めるようDecryptionOptionsを設定します。
var dopt = new DecryptionOptions() { ThrowExceptionIfInvalidPassword = false };
var docSrc = new GcPdfDocument();
docSrc.Load(fs, dopt);
// 結果を出力するPDFです。
var doc = new GcPdfDocument();
var page = doc.NewPage();
// 結果のテキストのためのTextLayoutを設定します。
var tl = page.Graphics.CreateTextLayout();
tl.DefaultFormat.Font = Common.Util.getFont();
tl.DefaultFormat.FontSize = 14;
tl.MaxWidth = doc.PageSize.Width;
tl.MaxHeight = doc.PageSize.Height;
tl.MarginAll = tl.Resolution;
var captionFmt = new TextFormat(tl.DefaultFormat) { FontBold = true };
// 読み込んだPDFのページ情報を取得します。
tl.AppendLine($"読み込んだPDFには {docSrc.Pages.Count} ページあります。", captionFmt);
foreach (var pg in docSrc.Pages)
{
tl.AppendLine($" {pg.Index+1} ページ目:", captionFmt);
var sz = pg.GetRenderSize();
tl.AppendLine($" ページサイズは {sz.Width}x{sz.Height} です。");
tl.AppendLine($" ページの向きは {(pg.Landscape ? "横向き" : "縦向き")} です。");
tl.AppendLine($" 用紙サイズは {pg.PaperKind} です。");
}
// 結果のテキストを描画します。
tl.PerformLayout(true);
while (true)
{
var splitResult = tl.Split(null, out TextLayout rest);
page.Graphics.DrawTextLayout(tl, PointF.Empty);
if (splitResult != SplitResult.Split)
break;
tl = rest;
tl.MarginTop = tl.Resolution;
page = doc.Pages.Add();
}
// PDF ドキュメントを保存します。
doc.Save(stream);
return doc.Pages.Count;
}
}
}