我生成了几个A5 pdf,我现在想创建一个批处理pdf,但批处理pdf将是A4页面,所以我想合并每页的2个pdf。如何将2个A5 pdf合并为一张A4纸。我正在使用iTextSharp来创建pdfs。
答案 0 :(得分:0)
这是可行的,但它会发臭,因为有很多事情可能会出现可怕的错误。
我不太了解iTextSharp,但我知道PDF很好,所以让我告诉你这样做的步骤。
首先,您需要能够按照您想要的方向制作空白A4页面。这很简单。 接下来,您需要能够从给定的A5页面获取内容流和资源,并以正确的方向将其放置在A4页面的一半上。为此,您需要注入流:
q
运营商)cm
)运算符然后您需要复制现有的内容流,然后使用grestore(Q
运算符)进行跟踪。
如果你能做到这一点,那么你应该能够修改代码来做同样的事情,但是将A5内容翻译成A4页面的一半。
这是很简单的事情。这是艰难的地方。您需要能够将两个页面执行此操作到同一目标页面和,您需要将资源合并在一起。那是困难的部分。这很难,因为当PDF生成软件制作页面并且您决定使用字体时,该页面的字体资源可能会被命名为有用的东西,如/F1
。如果两个页面的F1
都没有引用相同的字体,则需要重命名其中一个并更改内容流以反映重新映射。您还需要为XObjects(图像和表单),ColorSpace对象,Graphics State对象,Pattern对象等执行此操作。
答案 1 :(得分:0)
我假设您希望将2张A5 pdfs合并为一张A4纸,并将它们并排排列在那里(也称为2张),而不是叠加它们,更不用说回流它们了到一页。
使用iTextSharp,您可以根据NUpTool.cs上Webified iTextSharp Examples的代码执行此操作。
但是,您必须稍微更改该示例,因为它假定目标格式与源的格式相同,并缩小源页面以使多个页面适合。
此外,该示例默认将其结果文档存储在某个ZIP文件中,因此您只需要获取所需的部分。
示例是NUpTool.java的C#ified版本,来自chapter 6的iText in Action, Second Edition的示例,Bruno是他的作者,并且在他对您的问题的评论中提及了该示例。
这个样本本质上完成了@plinth在他的回答中描述的扭曲,将原始页面内容包装在单独的形式xobjects中,这样就可以保留资源。
请注意,示例仅采用页面内容,而不是原始文件中的注释。如果您有例如AcroForm形式字段需要出现,样本必须扩展。