惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
The Cloudflare Blog
D
DataBreaches.Net
J
Java Code Geeks
G
Google Developers Blog
L
LangChain Blog
N
Netflix TechBlog - Medium
Stack Overflow Blog
Stack Overflow Blog
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
小众软件
小众软件
量子位
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
博客园_首页
罗磊的独立博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog
腾讯CDC

VnYzm的博客

游戏玩后感:ReLief:献给亲爱的你 我的周边(谷子)分享 游戏玩后感:Kanon 简谱:致真实的你 《Rust中常见的有关生命周期的误解》学习笔记 简谱:StarMap 简谱:かく咲きたらばいと恋ひめやも 简谱:东风 简谱:无法诉说的思念 简谱:Girlish 游戏玩后感:时钟机关的Layline 简谱:风之琶音 简谱:星空的记忆 简谱:因为遇见了你 简谱:月童 番茄简谱脚本转调器 游戏玩后感:青空下的约定:Refine 游戏玩后感:在这苍穹展翅 书籍读后感:控制论与科学方法论 游戏玩后感:恋爱表达式 游戏玩后感:樱之诗 MLIR-tutorial学习笔记 游戏玩后感:潜伏之赤途 游戏玩后感:纯爱咖啡厅:帕露菲重制版 游戏玩后感:智以泪聚 游戏玩后感:初雪樱 游戏玩后感:告别回忆:从今以后 游戏玩后感:梦灯花 游戏玩后感:金辉恋曲四重奏 游戏玩后感:五彩斑斓的世界
PdfSharp库剪裁Pdf页面边缘空白部分
VnYzm · 2019-01-30 · via VnYzm的博客

背景

网上下载下来的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");
    }
}