我在使用图像PDF文件时遇到问题(PDF文件仅包含图像,没有文字)有两个PDF文件img1,img2,我想将其中两个合并为一个A4页面的PDF文件。
我试过下面的代码。
string Img1 = "C:/temp/image1.pdf";
string Img2 = "C:/temp/image2.pdf";
string MergedFile = "C:/temp/Combo.pdf";
//Create our PDF readers
PdfReader r1 = new PdfReader(Img1);
PdfReader r2 = new PdfReader(Img2);
//Our new page size, an A3 in landscape mode
iTextSharp.text.Rectangle NewPageSize = PageSize.A3.Rotate();
using (FileStream fs = new FileStream(MergedFile, FileMode.Create,
FileAccess.Write, FileShare.None))
{
//Create our document without margins
using (Document doc = new Document(NewPageSize, 0, 0, 0, 0))
{
using (PdfWriter w = PdfWriter.GetInstance(doc, fs))
{
doc.Open();
//Get our imported pages
PdfImportedPage imp1 = w.GetImportedPage(r1, 1);
PdfImportedPage imp2 = w.GetImportedPage(r2, 1);
//Add them to our merged document at specific X/Y coords
**w.DirectContent.AddTemplate(imp1, 0, 0);
w.DirectContent.AddTemplate(imp2, 0, -350);**
doc.Close();
}
}
}
r1.Close();
r2.Close();
所以当我执行上面的代码时,因为我已经提到了y coord,它将结合pdf和两个图像仅在一个页面上。
BUt我不想那样做
这里我只举两个图像的例子,但实际上有20多个图像(转换成PDF)。
因此,根据图像大小,它应该组合文件。我无法为每个文件中的每个文件提供修复和协调
任何人都可以帮我把多个PDF组合成单个而没有空格..?
答案 0 :(得分:0)
在结构上,这是你想要做的:
第一步很简单,其余的,第二步很容易,第三步不是那么多(并且会产生使第2步复杂化的副作用)。我会提前告诉你我对你的订单撒了谎。
合并内容流将是直截了当的。你想要做的是一个四步过程(我会在这里注入,我知道PDF非常好,但iTextSharp不太好):
1 0 0 1 X Y cm
要合并资源,您必须查看新创建的页面的资源,并且对于当前页面,为PDF页面中的每个资源类别中的每个资源执行以下三项操作之一(XObject,Font,ColorSpace,ExtGState,Pattern ,Shading,ProcSet - 虽然对于procset,你可以将每个procset设置为整个套件并且不会造成伤害):
现在回到我的谎言。在资源合并中,您可能需要为当前页面构建的映射,将旧资源名称映射到新资源名称。在将内容流从一个复制到下一个的过程中,您需要将内容流中引用的所有资源名称映射到资源合并步骤中构建的新名称。
要调整注释,您必须通过调整每个注释中的Rect属性将它们移动到新位置。您还需要重置/ Parent属性。对于任何文本标记注释,您需要调整四元组。
现在,这里的所有作品都会被搞砸。如果页面被旋转,这将不起作用。如果页面有裁剪框,则必须查看它并调整裁剪区域以模拟裁剪。如果页面被旋转并具有文本注释,则需要注意注释标记以确保宽高比正确。如果文档在带有GoTo操作/目标的任何页面上都有链接注释,则需要调整这些注释。