我正在写一篇pdf api。有一种方法可以将具有不同方向的选定页面合并到一个文档中。在运行时,如果所选页面处于横向状态,我希望像这样合并,但目前所有内容都显示为纵向。
我在网上看过几篇帖子,但没有一篇有帮助。
这就是我目前所拥有的:
public static void MergePDF(string source, string destination, PageCollection pages) {
try {
PdfReader reader = new PdfReader(new RandomAccessFileOrArray(source), null);
Document doc = new Document();
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(destination, FileMode.Create));
doc.Open();
PdfContentByte contentByte = writer.DirectContent;
foreach (Page page in pages) {
float width = reader.GetPageSize(page.Number).Width;
float height = reader.GetPageSize(page.Number).Height;
PdfImportedPage pdfImportedPagepage = writer.GetImportedPage(reader, page.Number);
doc.NewPage();
if (width > height) {
doc.SetPageSize(PageSize.A4.Rotate());
} else {
doc.SetPageSize(PageSize.A4);
}
iTextSharp.text.Rectangle psize = reader.GetPageSizeWithRotation(page.Number);
switch (psize.Rotation) {
case 0:
contentByte.AddTemplate(pdfImportedPagepage, 1f, 0, 0, 1f, 0, 0);
break;
case 90:
contentByte.AddTemplate(pdfImportedPagepage, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(page.Number).Height);
break;
case 180:
contentByte.AddTemplate(pdfImportedPagepage, -1f, 0, 0, -1f, 0, 0);
break;
case 270:
contentByte.AddTemplate(pdfImportedPagepage, 0, 1.0F, -1.0F, 0, reader.GetPageSizeWithRotation(page.Number).Width, 0);
break;
default:
break;
}
}
doc.Close();
} catch (Exception ex) {
}
}
感谢您的帮助。
答案 0 :(得分:4)
if (width > height) {
doc.SetPageSize(PageSize.A4.Rotate());
你告诉你的程序,如果它比它高(风景)宽,那么它应该被旋转为肖像。只需删除旋转段
即可 switch (psize.Rotation) {
case 0:
contentByte.AddTemplate(pdfImportedPagepage, 1f, 0, 0, 1f, 0, 0);
break;
case 90:
contentByte.AddTemplate(pdfImportedPagepage, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(page.Number).Height);
break;
case 180:
contentByte.AddTemplate(pdfImportedPagepage, -1f, 0, 0, -1f, 0, 0);
break;
case 270:
contentByte.AddTemplate(pdfImportedPagepage, 0, 1.0F, -1.0F, 0, reader.GetPageSizeWithRotation(page.Number).Width, 0);
break;
default:
break;
这部分是计算页面的方向以了解旋转多少,如果删除这个页面将完全按原样导入。如果你把它全部旋转到垂直位置
答案 1 :(得分:2)
按照MKL的建议,这有效:
Document doc = new Document();
PdfCopy copy = new PdfCopy(doc, new FileStream(destination, FileMode.Create));
doc.Open();
foreach (Page page in pages) {
doc.NewPage();
copy.AddPage(copy.GetImportedPage(reader, page.Number));
}
感谢。