The tool that really help me to do this is iTextSharp, a C#
implementation of the iText open source java library for controlling PDF
files, and the fact that you can use javascript within the PDF file .
Below is the code that explain you how to use an ASPX page which
manipulates and streams the PDF file into a zero-height, zero-width
IFrame to keep away the user from manipulating the PDF in any way. You
also need to embed the JavaScript into the PDF, which will run once the
document is loaded and pops up the Print dialog from Adobe Reader.
The JavaScript for printing a PDF is not so complex, I embedded it into a function:
The PDFReader and PdfMyStamper classes are associated with the iTextSharp library. You can use the classes together to get the stream for output and also access to PDFWriter object that allowed me to add the JavaScript.
The JavaScript for printing a PDF is not so complex, I embedded it into a function:
protected string GetMyAutoPrintJs()
{
var script = new StringBuilder(); script.Append("var kk = getPrintParams();");
script.Append("kk.interactive = kk.constants.interactionLevel.full;");
script.Append("print(kk);");
return script.ToString();
}
In the code-behind for the ASPX page that will stream the PDF and place the script inside the PDF file, I built this function:{
var script = new StringBuilder(); script.Append("var kk = getPrintParams();");
script.Append("kk.interactive = kk.constants.interactionLevel.full;");
script.Append("print(kk);");
return script.ToString();
}
protected void StreamMyPdf(Stream pdfSource)
{
var outputMyStream = new MemoryStream(); var pdfReader = new PdfReader(pdfSource);
var pdfMyStamper = new PdfMyStamper(pdfReader, outputMyStream);
//Add the auto-print javascript
var writer = pdfMyStamper.Writer;
writer.AddJavaScript(GetMyAutoPrintJs());
pdfMyStamper.Close();
var content = outputMyStream.ToArray();
outputMyStream.Close();
Response.ContentType = "application/pdf";
Response.BinaryWrite(content);
Response.End();
outputMyStream.Close();
outputMyStream.Dispose();
}
{
var outputMyStream = new MemoryStream(); var pdfReader = new PdfReader(pdfSource);
var pdfMyStamper = new PdfMyStamper(pdfReader, outputMyStream);
//Add the auto-print javascript
var writer = pdfMyStamper.Writer;
writer.AddJavaScript(GetMyAutoPrintJs());
pdfMyStamper.Close();
var content = outputMyStream.ToArray();
outputMyStream.Close();
Response.ContentType = "application/pdf";
Response.BinaryWrite(content);
Response.End();
outputMyStream.Close();
outputMyStream.Dispose();
}
The PDFReader and PdfMyStamper classes are associated with the iTextSharp library. You can use the classes together to get the stream for output and also access to PDFWriter object that allowed me to add the JavaScript.
No comments :
Post a Comment