【问题标题】:Save pdf file with user input filename (iTextSharp)使用用户输入文件名保存 pdf 文件 (iTextSharp)
【发布时间】:2015-07-27 20:42:55
【问题描述】:

我想让用户输入自己的文件名,就像保存文件对话框和流一样(例如:Stream s = File.Open(sfdPdf.FileName, FileMode.CreateNew)

这是我的代码:

    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));

任何人都可以为我的问题提供帮助或有更好的解决方案吗? 我想截取我的 windows 窗体并将图像导出到用户输入名称下的 pdf 文件

编辑: 使用 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();
    }               
}

【问题讨论】:

  • 您知道存在名为 SaveFileDialog 和 OpenFileDialog 的类吗?对那里的术语进行一些研究将推动您走上正确的道路。
  • 是的,我知道保存文件对话框,正如我在帖子(开头)中所写的那样。当我使用保存文件对话框并过滤扩展名时,当我尝试打开我的 pdf 文件时出现错误.. 说文件损坏
  • SaveFileDialog 尝试在编辑中添加,当我尝试打开保存的 pdf 文件时该代码不起作用
  • 但是如果你不使用 SaveFileDialog 你能打开 ImageTest.Pdf 文件吗?
  • 是的,我添加的第一个代码可以正常打开保存的文件。这是因为 iTextSharp.dll 库。

标签: c# winforms itextsharp export-to-pdf


【解决方案1】:

我不是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();
}

换句话说,只需将 SaveFileDialog 中选择的 FileName 字符串传递给 PdfWriter.GetInstance 方法

【讨论】:

  • 是的。做到了。抱歉“有点慢”。现在我明白了。非常感谢您指出这一点!
  • 没问题,SO再见
猜你喜欢
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 2020-07-19
  • 2018-03-07
  • 1970-01-01
  • 2016-07-08
相关资源
最近更新 更多