The following C# code example assembles a PDF document
that contains bookmarks. The name of the DDX document is bookmarkDDX.xml.
The name of the bookmark XML document that describes the bookmarks
to add to the PDF document is bookmarks.xml. The result PDF
document is saved as a PDF file named AssemblerResultBookmarks.pdf.
(See Assembling PDF Documents with Bookmarks.)
???/**
* Ensure that you create a .NET project that uses
* MS Visual Studio 2008 and version 3.5 of the .NET
* framework. This is required to invoke a
* LiveCycle service using MTOM.
*
* For information, see "Invoking LiveCycle using MTOM" in Programming with LiveCycle.
*
* This quick start uses the following DDX document:
* <?xml version="1.0" encoding="UTF-8"?>
* <DDX xmlns="http://ns.adobe.com/DDX/1.0/">
* <PDF result="FinalDoc.pdf">
* <PDF source="Loan.pdf">
* <Bookmarks source="doc2" />
* </PDF>
* </PDF>
* </DDX>
*
* This quick start also uses the following bookmarks XML
* to assemble a PDF document containing bookmarks:
* <?xml version="1.0" encoding="UTF-8"?>
* <Bookmarks xmlns="http://ns.adobe.com/pdf/bookmarks" version="1.0">
* <Bookmark>
* <Action>
* <Launch NewWindow="true">
* <File Name="C:\Adobe\LoanDetails.pdf" />
* </Launch>
* </Action>
* <Title>Open the Loan document</Title>
* </Bookmark>
* <Bookmark>
* <Action>
* <Launch>
* <Win Name="C:\WINDOWS\notepad.exe" />
* </Launch>
* </Action>
* <Title>Launch NotePad</Title>
* </Bookmark>
* </Bookmarks>
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.IO;
using AssembleBookmarks.ServiceReference1;
namespace AssembleBookmarks
{
class Program
{
static void Main(string[] args)
{
try
{
//Create a RightsManagementServiceClient object
AssemblerServiceClient assembleClient = new AssemblerServiceClient();
assembleClient.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://hiro-xp:8080/soap/services/AssemblerService?blob=mtom");
//Enable BASIC HTTP authentication
BasicHttpBinding b = (BasicHttpBinding)assembleClient.Endpoint.Binding;
b.MessageEncoding = WSMessageEncoding.Mtom;
assembleClient.ClientCredentials.UserName.UserName = "administrator";
assembleClient.ClientCredentials.UserName.Password = "password";
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
b.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
b.MaxReceivedMessageSize = 2000000;
b.MaxBufferSize = 2000000;
b.ReaderQuotas.MaxArrayLength = 2000000;
// Create BLOBs that represents the input DDX file and input documents
BLOB ddxDoc = new BLOB();
BLOB pdfDoc = new BLOB();
BLOB bookMarkDoc = new BLOB();
// Get the input DDX document, input PDF source file
//and the Bookmark XML document
string ddxFileName = "C:\\bookmarkDDX.xml";
FileStream ddxFs = new FileStream(ddxFileName, FileMode.Open);
string pdfFile = "C:\\Loan.pdf";
FileStream pdfFileFs = new FileStream(pdfFile, FileMode.Open);
string bookmarkInfo = "C:\\bookmarks.xml";
FileStream bookmarkInfoFs = new FileStream(bookmarkInfo, FileMode.Open);
// Get the lengths of the file streams and create byte arrays
int ddxLen = (int)ddxFs.Length;
byte[] ddxByteArray = new byte[ddxLen];
int pdfLen = (int)pdfFileFs.Length;
byte[] pdfByteArray = new byte[pdfLen];
int bookMarkLen = (int)bookmarkInfoFs.Length;
byte[] bookMarkByteArray = new byte[bookMarkLen];
// Populate the byte arrays with the contents of the file streams
ddxFs.Read(ddxByteArray, 0, ddxLen);
pdfFileFs.Read(pdfByteArray, 0, pdfLen);
bookmarkInfoFs.Read(bookMarkByteArray, 0, bookMarkLen);
// Populate the BLOB objects
ddxDoc.MTOM = ddxByteArray;
pdfDoc.MTOM = pdfByteArray;
bookMarkDoc.MTOM = bookMarkByteArray;
// Create the map containing the PDF source documents
MyMapOf_xsd_string_To_xsd_anyType inputMap = new MyMapOf_xsd_string_To_xsd_anyType();
MyMapOf_xsd_string_To_xsd_anyType_Item inLoan = new MyMapOf_xsd_string_To_xsd_anyType_Item();
inLoan.key = "Loan.pdf";
inLoan.value = pdfDoc;
MyMapOf_xsd_string_To_xsd_anyType_Item inBookmark = new MyMapOf_xsd_string_To_xsd_anyType_Item();
inBookmark.key = "doc2";
inBookmark.value = bookMarkDoc;
inputMap.Add(inLoan);
inputMap.Add(inBookmark);
// Create an AssemblerOptionsSpec object
AssemblerOptionSpec assemblerSpec = new AssemblerOptionSpec();
assemblerSpec.failOnError = false;
// Send the request to the Assembler Service
AssemblerResult result = assembleClient.invoke(ddxDoc, inputMap, assemblerSpec);
// Extract the newly created PDF document from the returned map
BLOB outDoc = null;
AssembleBookmarks.ServiceReference1.Map mapResult = result.documents;
for (int i = 0; i < mapResult.Count; i++)
{
String myKey = (String)(mapResult[i].key);
if (myKey == "FinalDoc.pdf")
{
outDoc = (BLOB)(mapResult[i].value);
}
}
//Populate a byte array with BLOB data - using the MTOM field
byte[] outByteArray = outDoc.MTOM;
//Create a new file containing the returned PDF document
string FILE_NAME = "C:\\AssemblerResultBookmarks.pdf";
FileStream fs2 = new FileStream(FILE_NAME, FileMode.OpenOrCreate);
BinaryWriter w = new BinaryWriter(fs2);
w.Write(outByteArray);
w.Close();
fs2.Close();
Console.WriteLine("The PDF file containing bookmarks was assembled.");
}
catch (Exception ee)
{
Console.WriteLine("An unexpected exception was encountered: " + ee.Message + "\n" + ee.StackTrace);
}
}
}
}
|
|
|