using it.stefanochizzolini.clown.documents;
using it.stefanochizzolini.clown.files;
using it.stefanochizzolini.clown.objects;
namespace it.stefanochizzolini.clown.samples{
/**
<summary>This sample demonstrates how to perform advanced editing over a PDF document structure
accessing primitive objects.</summary>
<remarks>In this case, it adds an 'open action' to the document so that it opens
on page 2 magnified just enough to fit the height of the page within the window.
By the way, note that since version 0.0.7 go-to actions are natively supported
by PDF Clown (you don't need to work at the low level shown here!).</remarks>
*/
public class PrimitiveSample
: ISample
{
public void Run(
SampleLoader loader
)
{
// (boilerplate user choice -- ignore it)
string filePath = loader.GetPdfFileChoice("Please select a PDF file");
// 1. Open the PDF file!
File file = new File(filePath);
// Get the PDF document!
Document document = file.Document;
// 2. Modifying the document...
{
// Create the action dictionary!
PdfDictionary action = new PdfDictionary();
// Define the action type (in this case: go-to)!
action[new PdfName("S")] = new PdfName("GoTo");
// Defining the action destination...
{
// Create the destination array!
PdfArray destination = new PdfArray();
// Define the 2nd page as the destination target!
destination.Add(document.Pages[1].BaseObject);
// Define the location of the document window on the page (fit vertically)!
destination.Add(new PdfName("FitV"));
// Define window left-edge horizontal coordinate!
destination.Add(new PdfInteger(-32768));
// Associate the destination to the action!
action[new PdfName("D")] = destination;
}
// Associate the action to the document!
document.BaseDataObject[new PdfName("OpenAction")] = file.Register(action); // Adds the action to the file, returning its reference.
document.Update(); // Update the existing document object (fundamental to override previous content).
}
// (boilerplate metadata insertion -- ignore it)
loader.BuildAccessories(document,this.GetType(),"Primitive objects","manipulating a document at primitive object level");
// 3. Serialize the PDF file (again, boilerplate code -- see the SampleLoader class source code)!
loader.Serialize(file,this.GetType().Name);
}
}
}
|