2013-11-21 200 views
0

我生成了几个A5 pdfs,我现在想要创建一个批处理pdf,但是批处理pdf将是A4页面,所以我想合并每页的两个pdf。如何将2张A5 pdf合并成一张A4纸。我正在使用iTextSharp创建pdf。使用iTextSharp将几个A5页面合并到A4页面

+0

问题不完整。定义*合并*。你需要的内容*重熔*或你正在寻找* N-up *你的文件?前者在PDF中是不可能的(通常,不是因为您使用iTextSharp),后者在“iText in Action”中解释。 –

回答

0

我假设你想合并2张A5 pdfs成一张A4纸排列在那里(又名2-up),而不是叠加它们,更不用说将它们重新排列成单页。

使用iTextSharp,您可以根据Webified iTextSharp ExamplesNUpTool.cs进行编码。

但是,您必须稍微更改该示例,因为它假定目标格式与源格式相同,并缩小源页面以缩小页面大小以适应多页。

此外,该示例默认将其结果文档存储在某个ZIP文件中,因此您只需要取出所需的部分。

该示例是NUpTool.java的C#ified版本,chapter 6iText in Action, Second Edition的一个示例,其中Bruno是他的作者,他在他对您的问题的评论中提到。

引擎盖下的这个例子基本上做了@plinth在他的答案中所描述的扭曲包装原始页面内容的单独表单xobjects,它允许它将资源保留原样。

但请注意,该示例仅采用页面内容,而不是原始文件中的注释。如果你有例如需要出现的AcroForm表单字段,样本必须扩展。

0

这是可行的,但它会发臭,因为有很多事情可能会出现可怕的错误。

我不太了解iTextSharp,但我知道PDF很好,所以让我告诉你如何做到这一点。

首先,您需要能够以所需的方向制作空白的A4页面。这很容易。 接下来,您需要能够从给定的A5页面获取内容流和资源,并以正确的方向将其放在A4页面的一半上。要做到这一点,你需要注入流:

  • gsave(在q运营商)
  • 旋转/平移(在cm)运算符

,那么你将需要在复制现有内容流然后用grestore(Q运营商)跟随它。

如果你可以做到这一点,那么你应该可以修改代码来做同样的事情,但在A4页面上半部分翻译A5内容。

这是所有容易的东西。这是困难的地方。您需要能够将这两个页面执行到同一个目标页面,您需要将这些资源合并到一起。这是困难的部分。这很难,因为当PDF生成软件制作页面并决定使用字体时,该页面的字体资源可能会被命名为有用的名称,如/F1。如果两个页面的F1都没有引用相同的字体,则需要重命名其中一个并更改内容流以反映重新映射。您还需要为XObjects(图像和窗体),ColorSpace对象,图形状态对象,模式对象等执行此操作。

+0

*您需要将资源合并在一起* - 如果您将每个表单中的前一页内容封装在一个表单中,则不需要合并资源。 – mkl

相关问题