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