//// This code is part of Document Solutions for PDF .NET demos.// Copyright (c) MESCIUS inc. All rights reserved.// usingSystem;usingSystem.IO;usingSystem.Linq;usingSystem.Collections.Generic;usingGrapeCity.Documents.Pdf; namespaceDsPdfWeb.Demos{// This sample creates a multi-layer PDF document from a set of PDFs// each of which shows a certain part of an electrical plan of a house.// Each PDF is added as a separate layer. The resulting PDF provides// optional content that allows the user to selectively see parts of// the electrical wiring of a house (e.g. just the HVAC setup, or// just the outlets, etc.). // Note that this example is similar to HousePlanLayers, but unlike // that sample, here ALL content is added as layers (in HousePlanLayers,// the full electrical plan content does not belong to any layer).publicclassHousePlanAllLayers {publicintCreatePDF(Stream stream) {// The list of PDF names' parts identifying their semantics:string[] fnames = ["full_electrical_plan.pdf","all_outlets.pdf","data_plan_and_detectors.pdf","HVAC_with_wiring.pdf","lighting_plan.pdf","lighting_plan_with_wiring.pdf","security_system_plan.pdf", ];// The common base name:var fbase = "how_to_read_electrical_plans_";// The directory containing the PDFs:var dir = Path.Combine("Resources", "PDFs"); var doc = newGcPdfDocument();var page = doc.Pages.Add();var g = page.Graphics;var disposables = newList<IDisposable>();// Combine all PDFs into a single document as layers on the first page:for (int i = 0; i < fnames.Length; ++i) {var iname = fnames[i];var idoc = newGcPdfDocument();var ifs = File.OpenRead(Path.Combine(dir, fbase + iname)); idoc.Load(ifs); disposables.Add(ifs); doc.OptionalContent.AddLayer(iname); doc.OptionalContent.SetLayerDefaultState(iname, false); g.BeginLayer(iname); g.DrawPdfPage(idoc.Pages[0], page.Bounds); g.EndLayer(); }// Make the last layer visible by default: doc.OptionalContent.SetLayerDefaultState(fnames.Last(), true); // Save the PDF: doc.Save(stream); // Dispose file streams: disposables.ForEach(d_ => d_.Dispose());return doc.Pages.Count; } }}