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");
    }
}
posted @ 2019-01-30 18:10  YuanZiming  阅读(706)  评论(0编辑  收藏  举报