使用横向和纵向文档

时间:2013-01-08 15:32:05

标签: c# itextsharp

我正在写一篇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) {

        }
    }

感谢您的帮助。

2 个答案:

答案 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));
            }

感谢。