PdfSharp库剪裁Pdf页面边缘空白部分
背景
网上下载下来的Pdf格式电子书放到Kindle后由于页面太大,缩放后字常常小得看不清,因此可以通过剪裁页面边缘的空白以缩小页面,使Kindle上显示的字放大。在GitHub上星最多的C# Pdf处理库就是PdfSharp了,然而这个库没有Api手册,需要从零散的示例中找到需要的函数,因此将代码记录如下方便以后参考。
多页Pdf重叠至一页
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using PdfSharp.Drawing;
class main {
static void Main(string[] args) {
XPdfForm f = XPdfForm.FromFile(@"E:\Java&C#\input.pdf");
// 原来的Pdf文档
PdfDocument output = new PdfDocument();
// 创建空白Pdf文档
PdfPage p = output.AddPage(); p.Width = f.PixelWidth; p.Height = f.PixelHeight;
// 给空白的Pdf文档添加页面并设置大小为原Pdf页面大小
XGraphics g = XGraphics.FromPdfPage(p);
// 在该页面上创建画布
for (int i = 0; i < f.PageCount; i++) {
f.PageIndex = i; g.DrawImage(f, 0, 0);
// 让f指向第i页并把f画在空白文档上
if (i == 1) p.MediaBox = new PdfRectangle(new XRect(50, 60, p.Width - 100, p.Height - 110));
// 根据需要调节XRect的参数以剪切页面边缘
}
output.Save(@"E:\Java&C#\output.pdf");
}
}
多页Pdf剪裁页面边缘
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using PdfSharp.Drawing;
class main {
static void Main(string[] args) {
XPdfForm f = XPdfForm.FromFile(@"E:\Java&C#\input.pdf");
PdfDocument output = new PdfDocument();
for (int i = 0; i < f.PageCount; i++) {
f.PageIndex = i;
PdfPage p = output.AddPage(); p.Width = f.PixelWidth; p.Height = f.PixelHeight;
XGraphics g = XGraphics.FromPdfPage(p); g.DrawImage(f, 0, 0);
if (i != 0) p.MediaBox = new PdfRectangle(new XRect(50, 60, p.Width - 100, p.Height - 110));
// 如果不是封面则剪裁
}
output.Save(@"E:\Java&C#\output.pdf");
}
}