【问题标题】:Remove PDF page breaks删除 PDF 分页符
【发布时间】:2013-09-03 10:16:18
【问题描述】:

如何从 pdf 中删除分页符,以便输出为单个“页面”PDF?因此,如果一个普通页面是 400x900 并且我有 4 个页面,那么生成的文件将是 1600x900。我以前为 Tif 文件 (Remove page breaks in multi-page tif to make one long page) 执行此操作,但想使用 PDF 执行此操作。我可以转换为 ps,删除任何意味着“分页符”的代码,然后转换回 pdf 吗?

【问题讨论】:

  • 您希望注释也出现在合并页面上吗?如果没有,@Colton 的回答会指明方向。不过,改进是可能的,例如连接不同维度的页面没有正确完成,也可以对所需资源进行一些优化。
  • 完全正确。我更新了我的示例以处理不同尺寸的页面(宽度和高度)。添加 using 语句以更好地使用内存。

标签: c# pdf itextsharp ghostscript


【解决方案1】:

这可以在 iTextSharp 库中通过使用单列 PdfTable 并根据页数动态更改文档的大小来完成。

您当然需要对 iTextSharp DLL 的一些引用 here

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

这是一个简单的例子:

public static void MergePages()
{
    using (PdfReader reader = new PdfReader(@"C:\Users\cmilne\Desktop\AA0081913.pdf"))//Original PDF containing page breaks. 
    {
        int pages = reader.NumberOfPages;
        float postProcessPageHeight = 0;
        float postProcessPageWidth = 0;
        for (int p = 1; p <= bill.PageCount; p++)
        {
            var size = bill.PdfReader.GetPageSize(p);
            postProcessPageHeight += (size.Height);
            if (size.Width > postProcessPageWidth)
                postProcessPageWidth = (size.Width);
        }

        var rect = new Rectangle(postProcessPageWidth, postProcessPageHeight);

        using (Document document = new Document(rect, 0, 0, 0, 0)) 
        { 
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(@"C:\Users\cmilne\Desktop\AA0081913_NEW.pdf", FileMode.Create)); //Declare location\name of new PDF not containing page breaks.

            document.Open();
            PdfImportedPage page;
            PdfPTable table = new PdfPTable(1);
            table.WidthPercentage = 100;

            for (int i = 1; i <= pages; i++)
            {
                page = writer.GetImportedPage(reader, i);
                table.AddCell(iTextSharp.text.Image.GetInstance(page));
            }
            document.Add(table);
            document.Close(); 
        }
    }
}

结束页面大小必须小于 14400 x 14400。(这是 iTextSharp 所允许的全部)一个 8 1/2 x 11 的 PDF 以一个共同的分辨率将最多大约 18 页。

【讨论】:

  • 感谢您添加此答案。直到今天我都错过了 OP 的评论!
  • 我更新了我的示例以处理不同尺寸的页面(宽度和高度)。添加 using 语句以更好地使用内存。
  • 该代码有效,但没有解决问题。它只是让第一页变大了,还有两页。啊。投反对票
【解决方案2】:

使用 iTextSharp C# 库。它为您提供了很多操作 PDF 的选项。当我不得不为闭源文档存储库编写导入应用程序时,我曾经使用过它。它就像一个魅力。唯一的缺点是他们的文档有点参差不齐,因为他们希望您购买他们的书。您可以免费浏览他们的 Java API,因为它与 C# 几乎相同,并且只需使用它来查找 C# 版本。

iText:http://itextpdf.com/

【讨论】:

  • iTextSharp 确实有很多用于处理 PDF 的选项,但我没有看到删除分页符的选项。你知道它有没有那个选项?
猜你喜欢
  • 2020-10-14
  • 2023-04-09
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
相关资源
最近更新 更多