iTextSharp 调整每个页面的大小以适应页面大小

iTextSharp Resize each page to fit the pagesize

我有一个 .pdf 文档,例如有 7 页。我把这个文件分成了7个.pdf文件,也就是说每个文件只有一页。但主要是我需要调整页面的内容。所以删除空格、边距、调整大小。你有一些简单的建议吗?我添加了图像链接以及拆分 pdf 文档的代码。感谢您的回复。

输入:

http://i.imgur.com/tgQK3hI.png

期望的输出:

http://i.imgur.com/v6cZDwg.png

代码:

        public void PdfSplitDocument(string filename)
    {
        String path = "C:/Doc/" + filename;
        String result = "d:/output/result";
        PdfCopy copy;
        PdfReader reader = new PdfReader(path);

        for (int i = 1; i <= reader.NumberOfPages; i++)
        {

            Document document = new Document(PageSize.A4, 0, 0, 0, 0);
            copy = new PdfCopy(document, new FileStream(result + i + ".pdf", FileMode.Create));
            document.Open();
            copy.AddPage(copy.GetImportedPage(reader, i));
            document.Close();

        }

    }

查看 ShowTextMargins example. It uses the TextMarginFinder class 以查找找到文本的边距。在这个例子中,摘自我的书 "iText in Action - Second Edition",我使用这个 class 来绘制一个矩形:

public void addMarginRectangle(String src, String dest)
    throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfReaderContentParser parser = new PdfReaderContentParser(reader);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
    TextMarginFinder finder;
    for (int i = 1; i <= reader.getNumberOfPages(); i++) {
        finder = parser.processContent(i, new TextMarginFinder());
        PdfContentByte cb = stamper.getOverContent(i);
        cb.rectangle(finder.getLlx(), finder.getLly(),
            finder.getWidth(), finder.getHeight());
        cb.stroke();
    }
    stamper.close();
    reader.close();
}

在您的情况下,您想根据矩形裁剪页面。您有一个 finder 对象,它允许您获取左下角的坐标(llx 和 lly)和右上角的坐标(urx 和 ury)。您可以使用这些坐标来裁剪页面,就像在 CropPages 示例中所做的那样:

public void manipulatePdf(String src, String dest)
    throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    int n = reader.getNumberOfPages();
    PdfDictionary pageDict;
    PdfRectangle rect = new PdfRectangle(llx, lly, urx, ury);
    for (int i = 1; i <= n; i++) {
        pageDict = reader.getPageN(i);
        pageDict.put(PdfName.CROPBOX, rect);
    }
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    stamper.close();
    reader.close();
}

另一种选择是更改媒体框而不是裁剪框:

pageDict.put(PdfName.MEDIABOX, rect);

可以在此处找到这些示例的 C# 版本: