2014-09-20 98 views
1

即时通讯使用itextsharp导出图像为pdf。 ----我想使图像的边缘平滑(曲线边缘), ----以及通过itextsharp图像属性获取图像的宽度和高度(同时从磁盘获取图像) ----和还如何设置PDF页面如何平滑图像的边缘从磁盘/导出到pdf(c#)

的背景颜色以下是获取图像,并添加到PDF:

pdfDoc.Open(); 
     //pdfDoc.Add(new iTextSharp.text.Paragraph("Welcome to dotnetfox")); 
     iTextSharp.text.Image gif = iTextSharp.text.Image.GetInstance(@"C:\Users\Admin\Desktop\logoall.bmp"); 
     // gif.ScaleToFit(500, 100); 
     pdfDoc.Add(gif); 

以下是使网格图像并保存到磁盘:

Grid companysnapshot = values[0] as Grid; //companysnap shot 

     companysnapshot.Measure(new System.Windows.Size(double.PositiveInfinity, double.PositiveInfinity)); 
     int companywidth = (int)Math.Round(companysnapshot.ActualWidth); 
     int companyheight = (int)Math.Round(companysnapshot.ActualHeight); 
     companywidth = companywidth == 0 ? 1 : companywidth; 
     companyheight = companyheight == 0 ? 1 : companyheight; 

     RenderTargetBitmap rtbmp = new RenderTargetBitmap(companywidth, companyheight, 96d, 96d, PixelFormats.Default); 
     rtbmp.Render(companysnapshot); 
     BmpBitmapEncoder encoder = new BmpBitmapEncoder(); 
     encoder.Frames.Add(BitmapFrame.Create(rtbmp)); 
     FileStream fs1 = File.Create(@"C:\Users\Admin\Desktop\companyss.bmp"); 
     encoder.Save(fs1); 
     fs1.Close(); 

请鳕鱼我出来这个!

+0

位图图像总是一个矩形。在这种情况下,“平滑边缘”是什么意思? – usr2564301 2014-09-20 09:23:15

回答

1

您已将多个问题合并为一个帖子。这不是你应该提问的方式。

总之:

问题1:什么是图像的大小?您有Image实例gif。这个形象的智慧是gif.ScaledWidthjpg.ScaledHeight。还有其他方法可以获得宽度和高度,但这种方式总是会以用户单位为您提供将在PDF中使用的大小。

如果您不缩放图像,ScaledWidthScaledHeight会以像素为单位给出图像的原始大小。像素将被iText视为用户单位。在PDF中,用户单位默认对应一个点(72点对应1英寸)。

问题2:如何显示带圆角的图像?

某些图像格式(如PNG)允许透明。您可以创建一个图像,以便通过使角部透明来模仿圆角的效果。

如果这不是一个选项,你应该应用剪切路径。这在我书中第10章的ClippingPath示例中得到了证明。

移植到C#,示例将是这样的:

Image img = Image.GetInstance(some_path_to_an_image); 
float w = img.ScaledWidth; 
float h = img.ScaledHeight; 
PdfTemplate t = writer.DirectContent.CreateTemplate(w, h); 
t.Ellipse(0, 0, w, h); 
t.Clip(); 
t.NewPath(); 
t.AddImage(img, w, 0, 0, h, 0, -600); 
Image clipped = Image.GetInstance(t); 

当然:这个剪辑如resulting PDF所示的图像为椭圆形。您需要用RoundRectangle()方法替换示例中的Ellipse()方法。

问题3:如何为每个页面分配背景颜色?

这是一个重复的问题。请阅读回答以下问题:

添加一个背景颜色使用页面事件完成后,你会发现怎么办代码这在上面提到的问题中。

+0

进行更改后,pdf正在生成,但剪切后的图像没有显示在pdf中。 – 2014-09-20 12:29:18

+0

被剪辑的图像在其属性中获取gif和模板...仍然没有在pdf中显示剪切图像 – 2014-09-20 12:39:59

+1

I希望你不要从字面上复制这个例子。如果你这样做了,你在一个'y = -600'的位置添加图像。这是在页面的可见区域之外的方式。如果您在应用代码之前*确实想过,并且如果您确实调整了x和y坐标,请告诉我们您做了什么。 – 2014-09-20 16:05:49