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;
}
}
}