Ill ask the question here then. I directed a project that resulted in this 
code. But it doesnt rotate certain documents right. I need to modify it to fix 
a certain document its kind of mangling.


I think this is the relavant code  

                    //The current file path
                    string filePath = sourcefolder + filename;
                    // we create a reader for the document
                    PdfReader reader = new PdfReader(filePath);
                    //Gets the number of pages to process
                    n = reader.NumberOfPages;
                    int i = 0;
                    while (i < n)
                    {
                        i++;
                        document.SetPageSize(reader.GetPageSizeWithRotation(1));
                        document.NewPage();
                        //Insert to Destination on the first page
                        if (i == 1)
                        {
                            Chunk fileRef = new Chunk(" ");
                            fileRef.SetLocalDestination(filename);
                            document.Add(fileRef);
                        }
                        page = writer.GetImportedPage(reader, i);
                        rotation = reader.GetPageRotation(i);
                        //if (rotation == 90 || rotation == 270)
                        //{
                        //    cb.AddTemplate(page, 0, -1f, 1f, 0, 0, 
reader.GetPageSizeWithRotation(i).Height);
                        //}
                        //else
                        //{
                        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                        //}
                    }
                }
            }
        }
        catch (Exception e) { throw e; }
        finally { document.Close(); }



but I included the entire thing below...


Its rotating and cropping a specific document wrong. it is portrate in the 
original and it is rotated and cropped in the final

please help.




using System;
using System.Diagnostics;
using System.Collections;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Text;
using System.Configuration;
using PdfSharp.Pdf;
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
using MigraDoc.RtfRendering;
using System.Web;
using System.Net;
using System.Collections.Generic;
using System.Text.RegularExpressions;

public class MergeEx
{
    #region Fields
    private string sourcefolder;
    private string destinationfile;
    private IList fileList = new ArrayList();
    #endregion
    public static string BatchPath = 
ConfigurationSettings.AppSettings["BatchPath"];
    public static string PDFPath = ConfigurationSettings.AppSettings["PDFPath"];
    public static string DownLoadPath = 
ConfigurationSettings.AppSettings["TempPath"];
    public static string LogPath = ConfigurationSettings.AppSettings["LogPath"];
    public static string OutputPath = 
ConfigurationSettings.AppSettings["OutputPath"];
    public static string RemoveTempFiles = 
ConfigurationSettings.AppSettings["RemoveTempFiles"];
    public static string RemoveBatchFiles = 
ConfigurationSettings.AppSettings["RemoveBatchFiles"];
    public static string strFileName;
    public static string[] fileParts;
    static void Main()
    {

        try
        {
            string startTime = System.DateTime.Now.ToString();
            //string logFile = LogPath + strDate + "-ProcessLog.txt";
            //Console.WriteLine(logFile);
            string logFile = 
string.Format("LOG-{0:yyyy-MM-dd_hh-mm-ss-tt}.txt", DateTime.Now);
            using (FileStream file = new FileStream(LogPath + logFile, 
FileMode.OpenOrCreate, FileAccess.Write))
            {
                StreamWriter streamWriter = new StreamWriter(file);
                streamWriter.WriteLine("BEGIN BAT FILE CLEAN: " + 
System.DateTime.Now);
                CleanUpBatchFiles();
                streamWriter.WriteLine("Cleaning batch files and moving to 
corresponding directories");
                streamWriter.WriteLine("END BAT FILE CLEAN: " + 
System.DateTime.Now);
                if (RemoveTempFiles == "true")
                {
                    streamWriter.WriteLine("BEGIN REMOVE FILES FROM TEMP: " + 
System.DateTime.Now);
                    RemoveFiles(DownLoadPath);
                    streamWriter.WriteLine("Removing all BAT files from TEMP 
directory");
                    streamWriter.WriteLine("END REMOVE FILES FROM TEMP: " + 
System.DateTime.Now);
                }
                streamWriter.WriteLine("BEGIN FILE PULL WITH WGET: " + 
System.DateTime.Now);
                GetAllFiles(BatchPath);
                streamWriter.WriteLine("Pulling files down from server via WGET 
commands in BAT files");
                streamWriter.WriteLine("END FILE PULL WITH WGET: " + 
System.DateTime.Now);
                streamWriter.WriteLine("BEGIN BAD FILE CLEAN UP: " + 
System.DateTime.Now);
                CleanUpBadFiles(BatchPath);
                streamWriter.WriteLine("Cleaning up 0 KB files in order to 
avoid processing errors");
                streamWriter.WriteLine("END BAD FILE CLEAN UP: " + 
System.DateTime.Now);
                streamWriter.WriteLine("BEGIN IMAGE TO PDF CONVERSION: " + 
System.DateTime.Now);
                ConvertAllImagesToPDF(BatchPath);
                streamWriter.WriteLine("Converting all JPG's to PDF's. This 
includes resizing them to fit on PDF page");
                streamWriter.WriteLine("END IMAGE TO PDF CONVERSION: " + 
System.DateTime.Now);
                streamWriter.WriteLine("BEGIN PDF FILE MERGE: " + 
System.DateTime.Now);
                //MergeAFewFiles(DownLoadPath);
                MergeAllFiles(BatchPath);
                streamWriter.WriteLine("Merging all PDF's in each property 
specific directory into one Master PDF and placing it in the PDF folder");
                streamWriter.WriteLine("END PDF FILE MERGE: " + 
System.DateTime.Now);

                if (RemoveBatchFiles == "true")
                {
                    streamWriter.WriteLine("BEGIN CLEARING BATCH DIRECTORY: " + 
System.DateTime.Now);
                    ClearFolder(BatchPath);
                    streamWriter.WriteLine("Clearing all subdirectories in the 
batch folder along with files");
                    streamWriter.WriteLine("END CLEARING BATCH DIRECTORY: " + 
System.DateTime.Now);
                }
                streamWriter.Close();
            }
        }
        catch (Exception ex)
        {
            WriteLogFile("Error.txt", "Main", ex.Message.ToString());

        }

    }
    public static void CleanUpBadFiles(string masterPath)
    {
        //clean up 0kb files to avoid memory leaks
        string[] fileEntries = Directory.GetFiles(@masterPath, "*.*", 
SearchOption.AllDirectories);
        foreach (string file in fileEntries)
        {
            if (file.Contains("CR") || file.Contains("cr"))
            {
                break;
            }
            else
            {
                FileInfo fi = new FileInfo(file);
                long len = fi.Length;
                if (len == 0)
                {
                    File.Delete(file);
                }
            }
        }
    }
    public static void RemoveFiles(string path)
    {
        //clean up 0kb files to avoid memory leaks
        string[] files = Directory.GetFiles(@path);
        foreach (string file in files)
        {
            if (file.Contains("output.bat"))
            {
                break;
            }
            else
            {
                File.Delete(file);
            }
        }
    }
    #region Public Methods
    ///
    /// Add a new file, together with a given docname to the fileList and 
namelist collection
    ///
    public void AddFile(string pathnname)
    {
        fileList.Add(pathnname);
    }
    ///
    /// Generate the merged PDF
    ///
    public void Execute()
    {
        MergeDocs();
    }
    public static void ConvertAllImagesToPDF(string masterPath)
    {
        //ResizeImage(
        string[] fileEntries = Directory.GetFiles(@masterPath, "*.*", 
SearchOption.AllDirectories);
        int i = 0;
        foreach (string fileName in fileEntries)
        {
            string[] addressPathParts = fileEntries[i].Split('\\');
            string addressPath = addressPathParts[0] + "\\" + 
addressPathParts[1] + "\\" + addressPathParts[2] + "\\" + addressPathParts[3] + 
"\\";
            if (fileName.Contains(".jpg") || fileName.Contains(".JPG") && 
fileName != DownLoadPath + "ouput.bat")
            {
                CreatePDF(fileName, fileName.Replace("JPG", "pdf"));
                File.Delete(fileName);
            }
            if (fileName.Contains(".bat"))
            {
                //CreatePDF(fileName, fileName.Replace("bat", "pdf"));
                CreatePDFFromText(addressPath + "\\000.pdf", 
ReadFileIntoString(fileName));
                Console.WriteLine(addressPath);
            }
            i++;
        }
    }
    public static string GetMasterFileName()
    {
        string[] fileEntries = Directory.GetFiles(DownLoadPath);
        foreach (string fileName in fileEntries)
        {
            if (fileName.Contains("CR") || fileName.Contains("cr"))
            {
                fileParts = fileName.Split('\\');
                strFileName = fileParts[3];
            }
        }

        return strFileName;
    }
    public static void ResizeImage(string OriginalFile, string NewFile, int 
NewWidth, int MaxHeight, bool OnlyResizeIfWider)
    {
        System.Drawing.Image FullsizeImage = 
System.Drawing.Image.FromFile(OriginalFile);
        // Prevent using images internal thumbnail
        
FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
        if (OnlyResizeIfWider)
        {
            if (FullsizeImage.Width <= NewWidth)
            {
                NewWidth = FullsizeImage.Width;
            }
        }
        int NewHeight = FullsizeImage.Height * NewWidth / FullsizeImage.Width;
        if (NewHeight > MaxHeight)
        {
            // Resize with height instead
            NewWidth = FullsizeImage.Width * MaxHeight / FullsizeImage.Height;
            NewHeight = MaxHeight;
        }
        System.Drawing.Image NewImage = 
FullsizeImage.GetThumbnailImage(NewWidth, NewHeight, null, IntPtr.Zero);
        // Clear handle to original file so that we can overwrite it if 
necessary
        FullsizeImage.Dispose();
        // Save resized picture
        NewImage.Save(OriginalFile);
    }
    public static void ExecuteScript(string scriptPath)
    {
        System.Diagnostics.ProcessStartInfo p = new 
System.Diagnostics.ProcessStartInfo(scriptPath);
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo = p;
        proc.Start();
        proc.WaitForExit();
    }
    public static void WriteLogFile(string fileName, string methodName, string 
message)
    {
        try
        {
            if (!string.IsNullOrEmpty(message))
            {
                using (FileStream file = new FileStream(LogPath + 
"\\Error.txt", FileMode.OpenOrCreate, FileAccess.Write))
                {
                    StreamWriter streamWriter = new StreamWriter(file);
                    streamWriter.WriteLine((((System.DateTime.Now + " - ") + 
fileName + " - ") + methodName + " - ") + message);
                    streamWriter.Close();
                }
            }
        }
        catch
        {
        }
    }
    public static void CleanUpBatchFiles()
    {
        string line;
        string[] fileEntries = Directory.GetFiles(DownLoadPath);
        foreach (string fileName in fileEntries)
        {
            if (fileName.Contains(".bat"))
            {
                //Console.WriteLine(fileName);
                //fileName = Path.ChangeExtension(".txt");
                if (File.Exists(fileName))
                {
                    StreamReader file = null;
                    try
                    {
                        //create directory from file name here  
                        CreateFolderFromFileName(fileName);
                        // create a writer and open the file
                        string newFolderPath = BatchPath + 
GetActualFileName(fileName).Replace(" ", "_") + "\\";
                        TextWriter tw = new StreamWriter(newFolderPath + 
GetFileNameFromPath(fileName));
                        file = new StreamReader(fileName);
                        while ((line = file.ReadLine()) != null)
                        {
                            //Console.WriteLine(line.Replace("%", "%%"));
                            //Regex.Replace(line, OutputPath, newFolderPath, 
RegexOptions.IgnoreCase)
                            string replaceOutput = Replace(line, OutputPath, 
newFolderPath, StringComparison.CurrentCultureIgnoreCase);
                            //string replaceOutput = line.Replace(OutputPath, 
"test");//Regex.Replace(line, OutputPath, newFolderPath, 
RegexOptions.IgnoreCase);//
                            // write a line of text to the file
                            //Console.WriteLine(replaceOutput);
                            tw.WriteLine(replaceOutput.Replace("%", "%%"));

                        }
                        // close the stream
                        tw.Close();
                        //File.Delete(fileName);
                    }
                    finally
                    {
                        if (file != null)
                            file.Close();
                    }
                }

            }
        }

    }
    public static void ExecBatchFile(string file)
    {
        Process proc = new Process();
        proc.StartInfo.FileName = file;
        proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        proc.Start();
        proc.WaitForExit();
        int exitCode = proc.ExitCode;
        proc.Close();
    }
    public static void CreateFolderFromFileName(string fileName)
    {
        string[] getActualFileName = fileName.Split('\\');
        int fileNameCount = getActualFileName.Length - 1;
        string[] actualFileName = getActualFileName[fileNameCount].Split('.');
        string directoryName = BatchPath + actualFileName[0].Replace(" ", "_");
        // check folder exists
        if (Directory.Exists(directoryName))
        {
            // ok, the directory exists
        }
        // if not then create
        else
        {
            Directory.CreateDirectory(directoryName);
        }
    }
    public static string GetFileNameFromPath(string fileName)
    {
        string[] getActualFileName = fileName.Split('\\');
        int fileNameCount = getActualFileName.Length - 1;
        string actualFileName = getActualFileName[fileNameCount];
        return actualFileName;
    }
    public static string GetActualFileName(string fileName)
    {
        string[] getActualFileName = fileName.Split('\\');
        int fileNameCount = getActualFileName.Length - 1;
        string[] actualFileName = getActualFileName[fileNameCount].Split('.');
        return actualFileName[0];

    }
    public static void GetAllFiles(string masterPath)
    {
        string[] batchFiles = Directory.GetFiles(@masterPath, "*.bat", 
SearchOption.AllDirectories);
        foreach (string batchFileNames in batchFiles)
        {
            ExecBatchFile(batchFileNames);
            //CleanUpBadFiles();
            //ConvertAllImagesToPDF();
        }

    }

    public static void MergeAllFiles(string masterPath)
    {
        string directoryString = masterPath;
        int i = directoryString.LastIndexOf('\\');
        directoryString = directoryString.Remove(i, directoryString.Length - i);
        string[] directories = Directory.GetDirectories(directoryString);
        foreach (string directory in directories)
        {
            int l = directory.LastIndexOf('\\');
            string[] masterFileName = directory.Split('\\');
            //Console.WriteLine(masterFileName[3].Replace('_',' '));
            MergeEx mrg = new MergeEx();
            mrg.DestinationFile = PDFPath + masterFileName[3].Replace('_', ' ') 
+ ".pdf";
            string[] pdfFiles = Directory.GetFiles(@directory, "*.pdf");
            foreach (string pdfFileNames in pdfFiles)
            {
                //Console.WriteLine(pdfFileNames);
                mrg.AddFile(pdfFileNames);
            }
            mrg.Execute();
        }

        //string[] batchFiles = Directory.GetFiles(@masterPath, "*.pdf", 
SearchOption.AllDirectories);
        //foreach (string pdfFileNames in batchFiles)
        //{
        //    Console.WriteLine(pdfFileNames);
        //}

    }
    #endregion
    #region Private Methods
    ///
    /// Merges the Docs and renders the destinationFile
    ///
    private void MergeDocs()
    {
        //Step 1: Create a Docuement-Object
        iTextSharp.text.Document document = new iTextSharp.text.Document();
        try
        {
            //Step 2: we create a writer that listens to the document
            PdfWriter writer = PdfWriter.GetInstance(document, new 
FileStream(destinationfile, FileMode.Create));
            //Step 3: Open the document
            document.Open();
            PdfContentByte cb = writer.DirectContent;
            PdfImportedPage page;
            int n = 0;
            int rotation = 0;
            //Loops for each file that has been listed
            foreach (string filename in fileList)
            {
                if (filename.Contains(".pdf") || filename.Contains(".PDF") && 
filename != DownLoadPath + "ouput.bat" && filename != "")
                {
                    //The current file path
                    string filePath = sourcefolder + filename;
                    // we create a reader for the document
                    PdfReader reader = new PdfReader(filePath);
                    //Gets the number of pages to process
                    n = reader.NumberOfPages;
                    int i = 0;
                    while (i < n)
                    {
                        i++;
                        document.SetPageSize(reader.GetPageSizeWithRotation(1));
                        document.NewPage();
                        //Insert to Destination on the first page
                        if (i == 1)
                        {
                            Chunk fileRef = new Chunk(" ");
                            fileRef.SetLocalDestination(filename);
                            document.Add(fileRef);
                        }
                        page = writer.GetImportedPage(reader, i);
                        rotation = reader.GetPageRotation(i);
                        //if (rotation == 90 || rotation == 270)
                        //{
                        //    cb.AddTemplate(page, 0, -1f, 1f, 0, 0, 
reader.GetPageSizeWithRotation(i).Height);
                        //}
                        //else
                        //{
                        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                        //}
                    }
                }
            }
        }
        catch (Exception e) { throw e; }
        finally { document.Close(); }
    }
    #endregion
    #region Properties
    ///
    /// Gets or Sets the SourceFolder
    ///
    public string SourceFolder
    {
        get { return sourcefolder; }
        set { sourcefolder = value; }
    }
    ///
    /// Gets or Sets the DestinationFile
    ///
    public string DestinationFile
    {
        get { return destinationfile; }
        set { destinationfile = value; }
    }
    #endregion

    static void CreatePDF(string fileNameAndPath, string masterFileNameAndPath)
    {
        // Create a Migr;aDoc document
        MigraDoc.DocumentObjectModel.Document document = 
CreateDocument(fileNameAndPath);
        string ddl = 
MigraDoc.DocumentObjectModel.IO.DdlWriter.WriteToString(document);
        //#if true
        //RtfDocumentRenderer renderer = new RtfDocumentRenderer();
        bool unicode = true;
        PdfFontEmbedding embedding = PdfFontEmbedding.Always;  // Set to 
PdfFontEmbedding.None or PdfFontEmbedding.Always only
        // 
----------------------------------------------------------------------------------------

        // Create a renderer for the MigraDoc document.
        PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(unicode, 
embedding);
        // Associate the MigraDoc document with a renderer
        pdfRenderer.Document = document;
        // Layout and render document to PDF
        pdfRenderer.RenderDocument();
        // Save the document...
        //string masterFileName = PDFPath + GetMasterFileName() + ".pdf";
        pdfRenderer.PdfDocument.Save(masterFileNameAndPath);
        // ...and start a viewer.
        //Process.Start(filename);
    }
    //<summary>
    //Creates an absolutely minimalistic document.
    //</summary>
    static MigraDoc.DocumentObjectModel.Document CreateDocument(string fileName)
    {
        // Create a new MigraDoc document
        MigraDoc.DocumentObjectModel.Document document = new 
MigraDoc.DocumentObjectModel.Document();
        // Add a section to the document
        MigraDoc.DocumentObjectModel.Section section = document.AddSection();
        // Add a paragraph to the section
        MigraDoc.DocumentObjectModel.Paragraph paragraph = 
section.AddParagraph();
        //string[] fileEntries = Directory.GetFiles(DownLoadPath);
        //foreach (string fileName in fileEntries)
        //{

        //if (fileName.Contains(".jpg") || fileName.Contains(".JPG") && 
fileName != DownLoadPath + "ouput.bat")
        //{
        //Console.WriteLine("LINE:" + @fileName);
        MigraDoc.DocumentObjectModel.Shapes.Image img = 
section.AddImage(fileName);
        img.LockAspectRatio = true;
        img.Width = Unit.FromPoint(500);

        // Add some text to the paragraph
        //paragraph.AddFormattedText("Hello, World!", TextFormat.Italic);
        //paragraph.AddImage("../../SomeImage.png");
        //paragraph.AddImage("../../Logo.pdf");

        return document;
    }

    public static void MergeAFewFiles(string masterPath)
    {
        string directoryString = masterPath;
        MergeEx mrg = new MergeEx();
        mrg.DestinationFile = PDFPath + "Sample.pdf";
        string[] pdfFiles = Directory.GetFiles(@masterPath, "*.pdf");
        foreach (string pdfFileNames in pdfFiles)
        {
            //Console.WriteLine(pdfFileNames);
            mrg.AddFile(pdfFileNames);
        }
        mrg.Execute();

    }
    static public string Replace(string original, string pattern, string 
replacement, StringComparison comparisonType)
    {
        if (original == null)
        {
            return null;
        }
        if (String.IsNullOrEmpty(pattern))
        {
            return original;
        }
        int lenPattern = pattern.Length;
        int idxPattern = -1;
        int idxLast = 0;
        StringBuilder result = new StringBuilder();
        while (true)
        {
            idxPattern = original.IndexOf(pattern, idxPattern + 1, 
comparisonType);
            if (idxPattern < 0)
            {
                result.Append(original, idxLast, original.Length - idxLast);
                break;
            }
            result.Append(original, idxLast, idxPattern - idxLast);
            result.Append(replacement);
            idxLast = idxPattern + lenPattern;
        }
        return result.ToString();
    }

    public static MigraDoc.DocumentObjectModel.Document 
CreatePDFDocumentFromText(string docText)
    {
        // Create a new MigraDoc document
        MigraDoc.DocumentObjectModel.Document document = new 
MigraDoc.DocumentObjectModel.Document();
        // Add a section to the document
        MigraDoc.DocumentObjectModel.Section section = document.AddSection();
        // Add a paragraph to the section
        MigraDoc.DocumentObjectModel.Paragraph paragraph = 
section.AddParagraph();
        paragraph.Format.Font.Color = Color.FromCmyk(100, 30, 20, 50);
        paragraph.Format.Font.Size = 6;
        // Add some text to the paragraph
        //paragraph.AddFormattedText("Hello, World!  ???????~?????", 
TextFormat.Italic);
        paragraph.AddFormattedText(docText, TextFormat.Bold);
        return document;
    }
    public static void CreatePDFFromText(string path, string docText)
    {
        // Create a MigraDoc document
        MigraDoc.DocumentObjectModel.Document document = 
CreatePDFDocumentFromText(docText);
        document.UseCmykColor = true;
        // string ddl = 
MigraDoc.DocumentObjectModel.IO.DdlWriter.WriteToString(document);
#if true_
      RtfDocumentRenderer renderer = new RtfDocumentRenderer();
      renderer.Render(document, "HelloWorld.rtf", null);
#endif
        const bool unicode = false;
        const PdfFontEmbedding embedding = PdfFontEmbedding.Always;
        // 
----------------------------------------------------------------------------------------
        // Create a renderer for the MigraDoc document.
        PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(unicode, 
embedding);
        // Associate the MigraDoc document with a renderer
        pdfRenderer.Document = document;
        // Layout and render document to PDF
        pdfRenderer.RenderDocument();
        // Save the document...
        pdfRenderer.PdfDocument.Save(path);
        // ...and start a viewer.
        //Process.Start(filename);
    }
    public static string ReadFileIntoString(string fileToBeRead)
    {
        string line = "";
        string lines = "";
        if (File.Exists(fileToBeRead))
        {
            StreamReader file = null;
            file = new StreamReader(fileToBeRead);
            while ((line = file.ReadLine()) != null)
            {
                lines += line + "\r\n";
            }
        }
        return lines;
    }
    public static void ClearFolder(string FolderName)
    {
        DirectoryInfo dir = new DirectoryInfo(FolderName);
        foreach (FileInfo fi in dir.GetFiles())
        {
            fi.Delete();
        }
        foreach (DirectoryInfo di in dir.GetDirectories())
        {
            ClearFolder(di.FullName);
            di.Delete();
        }
    }

}
------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security
threats, fraudulent activity, and more. Splunk takes this data and makes
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2dcopy2
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions

iText(R) is a registered trademark of 1T3XT BVBA.
Many questions posted to this list can (and will) be answered with a reference 
to the iText book: http://www.itextpdf.com/book/
Please check the keywords list before you ask for examples: 
http://itextpdf.com/themes/keywords.php

Reply via email to