Introduction
I created a tool that converts a simple PDF page into an HTML slide show page. This tool uses Acrobat reader Professional DLL and it will slice the PDF into JPG images, and the results will be displayed in a simple HTML slide show.
Using the Code
The form contains 2 the source PDF file and the destination folder where the HTML slide show will be generated. We first select the PDF, then start parsing the PDF to check the number of pages, and prepare the destination folder.
string path = textBox1.Text;
string folder = openFileDialog1.SafeFileName.Replace(".pdf", "");
string destination = textBox2.Text + @"\" + folder;
System.IO.Directory.CreateDirectory(destination);
System.IO.Directory.CreateDirectory(destination + @"\Pages");
Acrobat.AcroPDDoc pdf = new Acrobat.AcroPDDoc();
Acrobat.AcroPDPage pdfPage;
Acrobat.AcroPoint pdfRectTemp;
Acrobat.AcroRect pdfRect;
pdf.Open(path);
int pageNum = pdf.GetNumPages();
After we get the number of pages, we start looping on each page, get the height and width of the internal page, copy the page into the clipboard, paste the clipboard into a bitmap image.
for (int i = 0; i < pageNum; i++)
{
pdfPage = (Acrobat.AcroPDPage)pdf.AcquirePage(i);
pdfRectTemp = (Acrobat.AcroPoint)pdfPage.GetSize();
pdfRect = new Acrobat.AcroRect();
pdfRect.Left = 0;
pdfRect.right = pdfRectTemp.x;
pdfRect.Top = 0;
pdfRect.bottom = pdfRectTemp.y;
pdfPage.CopyToClipboard(pdfRect, 0, 0, 100);
IDataObject clipboardData = Clipboard.GetDataObject();
if (clipboardData.GetDataPresent(DataFormats.Bitmap))
{
Bitmap pdfBitmap = clipboardData.GetData
(System.Windows.Forms.DataFormats.Bitmap) as Bitmap;
ImageUtility.GenerateImage(pdfBitmap, destination + @"\Pages\Page" +
(i + 1).ToString("00") + ".jpg");
}
}
We then resize the image using the class ImageUtility
to resize the image and convert it into a JPG image with good resolution and fixed size. Then we save the generated images into the destination folder.
After we finish the image generation, we read the HTML body and add the script for the slide show.
System.IO.StreamReader reader = new System.IO.StreamReader
(Application.StartupPath + "/HtmlBook/HtmlBook.html",
System.Text.Encoding.GetEncoding("Windows-1256"));
string strFileContents = reader.ReadToEnd();
reader.Close();
System.IO.DirectoryInfo pagesFolder =
new System.IO.DirectoryInfo(destination + @"\Pages");
FileInfo[] pages = pagesFolder.GetFiles();
string script = @"var list = new Array();";
int k = 0;
foreach (FileInfo file in pages)
{
script += @"
list[" + k + @"] = ""Pages/" + file.Name + @"""
";
k++;
}
strFileContents = strFileContents.Replace("@@Javascript", script);
StreamWriter sw = new StreamWriter(destination + "/HtmlBook.html");
sw.Write(strFileContents);
sw.Flush();
sw.Close();
The generated images will be added to a JavaScript array replaced on top of the HTML template and then saved back to the destination folder.
At the end, you will find a folder contains a simple HTML page with images generated aside. The HTML page will display the content of the PDF file:
History
- 14th December, 2009: Initial post