【问题标题】:How to set format of PDF by PDFsharp, set pagesize to A4 and fit on page (shrink)如何通过 PDFsharp 设置 PDF 格式,将页面大小设置为 A4 并适合页面(缩小)
【发布时间】:2020-05-18 16:12:14
【问题描述】:

我想在 ASP.NET MVC 项目中使用 PDFsharp 将图像转换为 PDF。 我已经成功地将它们转换为 PDF,但它们的格式很奇怪,例如:这张图片:

Original image

使用 PDFsharp 转换后:

Partially visible image on page

我希望PDF文件可以自适应页面,适合页面(缩小),页面大小为A4。

下面是我的代码:

PdfSharp.Pdf.PdfDocument doc = new PdfSharp.Pdf.PdfDocument();
doc.PageLayout = PdfPageLayout.OneColumn;

PdfPage pdfPage = new PdfPage();
XSize size = PageSizeConverter.ToSize(PdfSharp.PageSize.A4);

pdfPage.Orientation = PageOrientation.Portrait;

pdfPage.Width = size.Width;
pdfPage.Height = size.Height;
pdfPage.TrimMargins.Top = 0.5;
pdfPage.TrimMargins.Right = 0.5;
pdfPage.TrimMargins.Bottom = 0.5;
pdfPage.TrimMargins.Left = 0.5;
doc.Pages.Add(new PdfSharp.Pdf.PdfPage());
XGraphics xgr = XGraphics.FromPdfPage(doc.Pages[0]);
XImage img;
try
{
    img = XImage.FromFile(s);
    //pdfPage.Width = img.Size.Width;
    //pdfPage.Height = img.Size.Height;
    xgr.DrawImage(img, 0, 0);
    img.Dispose();
}
catch (Exception ex)
{
    flag = 3;
    errormassage = ex.Message;
    errorfiles.Add(s);
}


xgr.Dispose();
FileInfo fi = new FileInfo(s);
doc.Save(s.Replace(fi.Extension, ".pdf"));
doc.Close();

【问题讨论】:

    标签: c# asp.net asp.net-mvc pdfsharp


    【解决方案1】:

    使用具有宽度和高度参数的xgr.DrawImage(img, 0, 0); 的重载并指定您需要的值。

    您的调用使用为该图像指定的大小绘制图像 - 结果简直无法预测。

    调用xgr.DrawImage(img, 0, 0, 595, 842); 将始终以A4 大小绘制图像。具有不同纵横比的图像会失真。计算图像大小以保持纵横比留给读者作为练习。

    【讨论】:

    • 我不知道怎么编辑,你能告诉我怎么编辑吗?
    • 我的答案中添加了始终将图像缩放为 A4 大小的代码。
    【解决方案2】:

    如果您想在缩放时避免图像失真,您有 2 个选项。

    1. 您可以使用以下函数缩放图像大小:

          static bool SaveImageAsPdf(string source, string destinaton)
       {
           try
           {
      
               PdfDocument doc = new PdfDocument();
               doc.Pages.Add(new PdfPage());
               XGraphics xgr = XGraphics.FromPdfPage(doc.Pages[0]);
               XImage img = XImage.FromFile(source);
               if (img.Height <= 842)//A4 height
                   xgr.DrawImage(img, 0, 0); // don't scale
               else
               {
                   double Scale = img.Height / 842.0;
                   xgr.DrawImage(img, 0, 0, (int)(img.Width / Scale), (int)(img.Height / Scale));//scale to A4
               }
               doc.Save(destinaton);
               doc.Close();
               return true;
           }
           catch (Exception )
           {
      
               throw;
            }
       }
      
    2. 另一个选项是从默认的 A4 尺寸缩放 pdf 页面大小。你可以使用这个函数来做到这一点:

         static bool SaveImageAsPdf1(string source, string destinaton)
       {
           try
           {
      
               PdfDocument doc = new PdfDocument();
               XImage img = XImage.FromFile(source);
               PdfPage page = new PdfPage();
               if (img.Height > 842)
               {
                   page.Height = img.Height;
                   page.Width = img.Width;
               }
               doc.Pages.Add(page);
               XGraphics xgr = XGraphics.FromPdfPage(doc.Pages[0]);
               xgr.DrawImage(img, 0, 0);
               doc.Save(destinaton);
               doc.Close();
               return true;
           }
           catch (Exception)
           {
      
               throw;
           }
       }
      

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 2011-10-12
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      相关资源
      最近更新 更多