SaveAsImage.cs
// 完毕:
using System;
using System.IO;
using System.Linq;
using System.Drawing;
using System.Collections.Generic;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Svg;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Drawing;

namespace DsPdfWeb.Demos.Basics
{
    // 此示例演示如何将现有 PDF 页面另存为图像。
    // 加载由SlidePages示例生成的PDF,然后保存
    // 整个 PDF 作为多页 TIFF。它还保存每个页面
    // 作为单独的 JPEG 图像。
    // 所有生成的图像都附加到生成的 PDF 中。
    // 
    // 还支持其他图像格式:PNG、BMP、GIF。
    public class SaveAsImage
    {
        public int CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            var page = doc.NewPage();

            Common.Util.AddNote(
                "我们加载“幻灯片页面”示例生成的 PDF," +
                "",
                page);

            // 跟踪临时文件,退出时删除它们:
            var tfiles = new List<string>();

            using var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "SlidePages.pdf"));
            var docSrc = new GcPdfDocument();
            docSrc.Load(fs);
            // 将加载的 PDF 的所有页面保存为多页 TIFF:
            var tf = Path.GetTempFileName();
            docSrc.SaveAsTiff(tf);
            var fspec = FileSpecification.FromEmbeddedFile(EmbeddedFileStream.FromFile(doc, tf));
            fspec.File.FileName = "SlidePages.tiff";
            doc.EmbeddedFiles.Add(fspec.File.FileName, fspec);
            tfiles.Add(tf);

            // 将加载的 PDF 的每一页保存为 JPEG:
            foreach (var p in docSrc.Pages)
            {
                tf = Path.GetTempFileName();
                p.SaveAsJpeg(tf);
                fspec = FileSpecification.FromEmbeddedFile(EmbeddedFileStream.FromFile(doc, tf));
                fspec.File.FileName = $"Page_{p.Index}.jpeg";
                doc.EmbeddedFiles.Add(fspec.File.FileName, fspec);
                tfiles.Add(tf);
            }

            // 最后,将 PDF 的最后一页保存为 SVGZ(压缩的 SVG):
            var bytes = docSrc.Pages.Last.ToSvgz(new SaveAsImageOptions() { BackColor = Color.Transparent });
            fspec = FileSpecification.FromEmbeddedFile(EmbeddedFileStream.FromBytes(doc, bytes));
            fspec.File.FileName = $"Page_{docSrc.Pages.Last.Index}.svgz";
            doc.EmbeddedFiles.Add(fspec.File.FileName, fspec);

            doc.Save(stream);
            // 清理:
            tfiles.ForEach(tf_ => File.Delete(tf_));
            // 完毕:
            return doc.Pages.Count;
        }
    }
}