我将简单地提出这个问题。
我有这个pdf:
_____
|abcd |
| |
| |
|_____|
这一个:
_____
|1234 |
|4567 |
| |
|_____|
我想将它们合并到:
_____
|abcd |
|1234 |
|4567 |
|_____|
可以使用iTextSharp或任何其他免费工具吗?
提前致谢
答案 0 :(得分:3)
这是一个老问题......但如果有人再次进入这里,我的解决方案是...... 我做了这个硬编码两页到一页,所以这是基础 首先我旋转了两个PDF,然后将它们合并在一起
旋转两页使用:
public static void RotatePDF(string inputFile, string outputFile)
{
using (FileStream outStream = new FileStream(outputFile, FileMode.Create))
{
iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(inputFile);
iTextSharp.text.pdf.PdfStamper stamper = new iTextSharp.text.pdf.PdfStamper(reader, outStream);
iTextSharp.text.pdf.PdfDictionary pageDict = reader.GetPageN(1);
int desiredRot = 90; // 90 degrees clockwise from what it is now
iTextSharp.text.pdf.PdfNumber rotation = pageDict.GetAsNumber(iTextSharp.text.pdf.PdfName.ROTATE);
if (rotation != null)
{
desiredRot += rotation.IntValue;
desiredRot %= 360; // must be 0, 90, 180, or 270
}
pageDict.Put(iTextSharp.text.pdf.PdfName.ROTATE, new iTextSharp.text.pdf.PdfNumber(desiredRot));
stamper.Close();
}
}
现在您可以将它们合并在一起:
public static void MergeTwoPdfsToSingle(string inputFile1, string inputFile2, string outputFile)
{
//Step 1: Create a Docuement-Object
Document document = new Document();
try
{
//Step 2: we create a writer that listens to the document
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFile, FileMode.Create));
//Step 3: Open the document
document.Open();
PdfContentByte cb = writer.DirectContent;
PdfImportedPage page1;
PdfImportedPage page2;
// we create a reader for the document
PdfReader reader1 = new PdfReader(inputFile1);
PdfReader reader2 = new PdfReader(inputFile2);
document.SetPageSize(reader1.GetPageSizeWithRotation(1));
document.NewPage();
page1 = writer.GetImportedPage(reader1, 1);
page2 = writer.GetImportedPage(reader2, 1);
cb.AddTemplate(page1, 0, 0);
//play around to find the exact location for the next pdf
cb.AddTemplate(page2, 0, 300);
}
catch (Exception e) { throw e; }
finally { document.Close(); }
}
答案 1 :(得分:0)
是的......即使对于PDF专家来说,它也很难。通过提问,你已经表明你不是一个......至少现在还没有。把它拉下来,你就会顺利......但是:
没有简单的方法来确定围绕给定页面上所有内容的边界框。 com.itextpdf.text.pdf.parser(或它的#等价物)有几个类可以帮助你一路走下去,但最重要的是PDF不能像这样被解析。
我强烈建议您尝试其他方法。任何涉及短语“然后我们从PDF中获取信息”的内容都需要进行彻底检查。哦,它可能,但几乎总是一个更好的方法来做到这一点。
答案 2 :(得分:0)
我们使用了一种名为PDFMerger的产品。然而它并不便宜。我们并没有真正找到任何其他可以轻易实现的目标。