为有中文需求的客户提供多渠道中文技术支持.

Thu Apr 18, 2024 8:54 am

我们现在需要再pdf文件中插入章子,但是我们这个pdf文件每一页的内容尺寸不一致,需要在所有页面的右下角插入章子。
例如现在有一个pdf文件,一共10页,第1页是A4的尺寸,第2页是A3的尺寸,第3页是A4尺寸,第4页是B5尺寸。。。,使用 pdf.Pages[Index].Canvas.DrawImage(image, x, y)插入图片。现在这个方法定位的原点是左上角,所以导致传入这个尺寸后,页面上章子的位置就不能都在右下角(现在我们pdf页数比较多,如果去获取每页尺寸,然后在计算每页章子的位置怕影响效率),现在你们这个方法的原点能不能由用户设置,例如设置到右下角,或者有什么其他更好的解决方法没,谢谢!

yaozhu698
 
Posts: 7
Joined: Wed Apr 12, 2023 5:45 am

Thu Apr 18, 2024 9:38 am

您好,

感谢您的留言。
这里倒是有另外一种方法,沿页面中心旋转页面的画布180度,然后在绘制图片。我把代码附在下面。但其实这样也需要获取页面尺寸(在获取页面中心点时),并且因为画布旋转了180度,所以这样绘制的图片也是旋转了180度的。因此把图片绘制到右下角,更建议直接获取页面尺寸,通过页面尺寸与图片尺寸来定位图片绘制起点。这样也并不会消耗太多性能。

Code: Select all
// 创建一个PdfDocument对象
PdfDocument doc = new PdfDocument();
// 向文档中添加一页
PdfPageBase page = doc.Pages.Add();
// 从文件中加载一张图片
PdfImage image = PdfImage.FromFile(@"..\..\data\Doc-CPP.png");
// 设置图片的宽度和高度为原始大小的75%
 float width = image.Width * 0.75f;
float height = image.Height * 0.75f;
// 保存画布当前的图形状态
PdfGraphicsState pdfGraphicsState = page.Canvas.Save();
// 将画布旋转180度,以画布的中心点为旋转中心
 page.Canvas.RotateTransform(180f, new System.Drawing.PointF(page.Canvas.ClientSize.Width / 2, page.Canvas.ClientSize.Height / 2));
// 在画布上绘制图片
page.Canvas.DrawImage(image, 0, 0, width, height);
 // 恢复画布之前的图形状态
page.Canvas.Restore(pdfGraphicsState);
// 将文档保存到文件
doc.SaveToFile(@"../../output/DrawImage.pdf");
 // 关闭文档 doc.Close();


Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 1010
Joined: Tue Mar 08, 2022 2:02 am

Return to 中文技术支持