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

Sun Oct 09, 2022 1:57 am

您好,

我测试帮助中的如下代码, 想通过缩放功能将页面四周的 1厘米 的白边切掉, 但是最终效果不精确, 总是偏左,

请问有办法做到精确控制吗? 下面有相关的源文件, 谢谢!

Code: Select all

//创建PDFDocument实例并加载文档
PdfDocument testDoc = new PdfDocument();
testDoc.LoadFromFile(@"C:\Users\Administrator\Desktop\裁切前.pdf");
//创建一个新文档实例
PdfDocument newDoc = new PdfDocument();

//定义新文档要增加的页边距, 单位cm
float top = -1;
float bottom = -1;
float left = -1;
float right = -1;

//将度量单位转换为磅
PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
top = unitCvtr.ConvertUnits(top, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
bottom = unitCvtr.ConvertUnits(bottom, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
left = unitCvtr.ConvertUnits(left, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
right = unitCvtr.ConvertUnits(right, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);

foreach (PdfPageBase page in testDoc.Pages)
{
    //给新文档添加新页面,设置页面大小与源文档相同
    PdfPageBase newPage = newDoc.Pages.Add(page.Size, new PdfMargins(0));
    //设置新文档内容的缩放比例
    newPage.Canvas.ScaleTransform((page.ActualSize.Width - left - right)/page.ActualSize.Width  ,
                                 (page.ActualSize.Height - top - bottom)/page.ActualSize.Height);
    //以模板的形式将源文档画到新文档
    newPage.Canvas.DrawTemplate(page.CreateTemplate(), new PointF(left, top));
}
//保存并打开结果文档
newDoc.SaveToFile(@"C:\Users\Administrator\Desktop\裁切后.pdf", FileFormat.PDF);


keLi1680
 
Posts: 30
Joined: Sun Oct 02, 2022 2:35 am

Sun Oct 09, 2022 9:01 am

您好,

我测试你的代码,确实注意到了你说的现象。我猜测这是由于计算导致的误差,我已将此现象移交给研发进行进一步调查,编号为SPIREDOC-8549,如果有任何更新我都会反馈到你。此外,你可以通过下面的方式达到你期望的效果。
Code: Select all
//创建PDFDocument实例并加载文档
PdfDocument testDoc = new PdfDocument();
testDoc.LoadFromFile("裁切前.pdf");
//创建一个新文档实例
PdfDocument newDoc = new PdfDocument();
//定义新文档要增加的页边距, 单位cm
float top = 1;
float bottom = 1;
float left = 1;
float right = 1;

//将度量单位转换为磅
PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
top = unitCvtr.ConvertUnits(top, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
bottom = unitCvtr.ConvertUnits(bottom, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
left = unitCvtr.ConvertUnits(left, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
right = unitCvtr.ConvertUnits(right, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);

foreach (PdfPageBase page in testDoc.Pages)
{
    //给新文档添加新页面,重置新页面的大小
    SizeF newsize = new SizeF(page.Size.Width - left - right, page.Size.Height - top - bottom);
    PdfPageBase newPage = newDoc.Pages.Add(newsize, new PdfMargins(0));
    //以模板的形式将源文档画到新文档
    newPage.Canvas.DrawTemplate(page.CreateTemplate(), new PointF(-left, -top));
}
//保存并打开结果文档
newDoc.SaveToFile("裁切后.pdf", FileFormat.PDF);

Sincerely,
Nina
E-iceblue support team
User avatar

Nina.Tang
 
Posts: 1187
Joined: Tue Sep 27, 2016 1:06 am

Mon Oct 10, 2022 3:17 am

感谢帮助!

keLi1680
 
Posts: 30
Joined: Sun Oct 02, 2022 2:35 am

Fri Nov 04, 2022 11:41 am

您好,

我们研发针对SPIREDOC-8549问题进行了调整,请下载最新版Spire.PDF(Spire.PDF Pack(Hot Fix)版本: 8.11.0) 并调整代码如下来裁切PDF文档。
官网下载地址:https://www.e-iceblue.cn/Downloads/Spire-PDF-NET.html
Nuget下载地址:https://www.nuget.org/packages/Spire.PDF/8.11.0

Code: Select all
 foreach (PdfPageBase page in testDoc.Pages)
 {
     //给新文档添加新页面,设置页面大小与源文档相同
     PdfPageBase newPage = newDoc.Pages.Add(page.Size, new PdfMargins(0));
     //设置新文档内容的缩放比例
     newPage.Canvas.ScaleTransform((page.ActualSize.Width - left - right) / page.ActualSize.Width,
                                  (page.ActualSize.Height - top - bottom) / page.ActualSize.Height);
     left /= (page.ActualSize.Width - left - right) / page.ActualSize.Width;
     top/= (page.ActualSize.Height - top - bottom) / page.ActualSize.Height;
     //以模板的形式将源文档画到新文档
     newPage.Canvas.DrawTemplate(page.CreateTemplate(), new PointF(left, top));
 }

Sincerely,
Nina
E-iceblue support team
User avatar

Nina.Tang
 
Posts: 1187
Joined: Tue Sep 27, 2016 1:06 am

Return to 中文技术支持