【问题标题】:iTextSharp Resize each page to fit the pagesizeiTextSharp 调整每个页面的大小以适合页面大小
【发布时间】:2015-09-20 19:48:07
【问题描述】:

我有一个 .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();

        }

    }

【问题讨论】:

    标签: c# pdf split resize itextsharp


    【解决方案1】:

    查看ShowTextMargins 示例。它使用TextMarginFinder 类来查找文本所在的边距。在这个例子中,取自我的书“iText in Action - Second Edition”,我使用这个类来绘制一个矩形:

    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# 版本:

    【讨论】:

    • 尊敬的先生,非常感谢您!我必须进行一些更改,但它可以根据您发布的内容完美运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2015-11-22
    • 1970-01-01
    • 2012-10-18
    相关资源
    最近更新 更多