2015-05-15 2 views
3

Я хочу, чтобы позволить пользователю ввести свое имя файла, так же, как диалог сохранения файла и потока (Пример: Stream s = File.Open(sfdPdf.FileName, FileMode.CreateNew)Сохранить PDF файл с пользовательского ввода имени файла (iTextSharp)

Вот мой код:

private void btnSave_Click(object sender, EventArgs e) 
    { 

     System.Drawing.Rectangle bounds = this.Bounds; 
     using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height)) 
     { 
      using (Graphics graphics = Graphics.FromImage(bitmap)) 
      { 
       graphics.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size); 
      } 
      bitmap.Save("Image.jpeg", ImageFormat.Jpeg); 
     } 

     Document doc = new Document(PageSize.LETTER, bounds.Left, bounds.Right, bounds.Top, bounds.Bottom); 
     PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream("ImageTest.pdf", FileMode.Create)); 
     doc.Open(); 
     iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance("Image.jpeg"); 
     doc.Add(image); 
     doc.Close(); 
} 

Я хочу часть «ImageTest.pdf», чтобы быть именем, как пользователь хочет с расширением PDF (и .pdf) типа файла.

PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream("ImageTest.pdf", FileMode.Create));

Может кто-нибудь помощь или у кого-то есть лучшее решение для моей проблемы? Я хочу взять скриншот моего окна формы и экспорта изображения в PDF-файл под именем входа пользователя

EDIT: С SaveFileDialog (после bitmap.save) - Получение ошибки «Ошибка формата: Не PDF или поврежден. "

SaveFileDialog sfd = new SaveFileDialog(); 
sfd.Filter = "Pdf File |*.pdf"; 
if (sfd.ShowDialog() == DialogResult.OK) 
{ 
    using (Stream s = File.Open(sfd.FileName, FileMode.CreateNew)) 
    { 
     Document doc = new Document(PageSize.LETTER, bounds.Left, bounds.Right, bounds.Top, bounds.Bottom); 
     PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream("ImageTest.pdf", FileMode.Create)); 
     doc.Open(); 
     iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance("Image.jpeg"); 
     doc.Add(image); 
     doc.Close(); 
     s.Close(); 
     s.Dispose(); 
    }    
} 
+0

Знаете ли вы о существовании классов с именем SaveFileDialog и OpenFileDialog? Небольшое исследование о том, что там условия, приведет вас к правильному пути. – Steve

+0

Да, я знаю, как сохранить файл в диалоговом окне, как я писал в сообщении (начало). Когда я использую диалог сохранения файла и фильтр для расширения, я получаю сообщение об ошибке при попытке открыть файл в формате pdf. Говорит, что файл поврежден – dodoria1992

+0

SaveFileDialog попробует добавить в редактирование и этот код не работает, когда я пытаюсь открыть сохраненный файл PDF – dodoria1992

ответ

2

Я не эксперт ITextSharp, но я думаю, что ваш код должен быть что-то вроде этого

SaveFileDialog sfd = new SaveFileDialog(); 
sfd.Filter = "Pdf File |*.pdf"; 
if (sfd.ShowDialog() == DialogResult.OK) 
{ 
    Document doc = new Document(PageSize.LETTER, bounds.Left, bounds.Right, bounds.Top, bounds.Bottom); 
    PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(sfd.FileName, FileMode.Create)); 
    doc.Open(); 
    iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance("Image.jpeg"); 
    doc.Add(image); 
    doc.Close(); 
} 

Другими словами, просто передать строку FileName Выбирается в SaveFileDialog к PdfWriter.GetInstance метод

+1

Да. Так оно и было. Извините за то, что «немного медленнее». Теперь я понимаю это ясно. Очень благодарю вас за указание на это! – dodoria1992

+0

Нет проблем, снова увидимся на SO – Steve