u013794840
alisehellen
采纳率0%
2015-09-29 02:22

C# itextsharp pdf的纵横合并问题(第一个解决者,给予大于 150 元的回报)

在使用itextsharp.dll 做pdf中,使用 rotate() 将pdf变成横着的,让后然后将PDF进行合并,发现这个pdf,又变成了纵向的。而里面的内容却变成了横着的。请问这个问题有没有解决的办法。第一个帮我解决问题的,给予大于 150 元的回报。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • qq_14942565 qq_14942565 3年前

    ///
    ///合并pdf文件(参数都是相对路径)
    ///
    /// 合并之后的文件
    /// 待合并的文件集合
    public void MergePDFFiles(string outMergeFile, List Files)
    {
    if (String.IsNullOrEmpty(outMergeFile) || Files.Count == 0)
    { return; }

            outMergeFile = HttpContext.Current.Server.MapPath(outMergeFile);
            List<PdfReader> readerList = new List<PdfReader>();
            iTextSharp.text.Document document = new iTextSharp.text.Document(new Rectangle(297.5f, 297.5f), 1, 1, 0
                , 0);
            FileStream fs = new FileStream(outMergeFile, FileMode.Create);
            PdfWriter writer = PdfWriter.GetInstance(document, fs);
            document.Open();
            PdfContentByte cb = writer.DirectContent;
            PdfImportedPage newPage;
            for (int i = 0; i < Files.Count; i++)
            {
                string newpath = HttpContext.Current.Server.MapPath(Files[i]);
                PdfReader reader = new PdfReader(newpath);
                int iPageNum = reader.NumberOfPages;
                int startPage = 1;
                int rotation;
                while (startPage <= iPageNum)
                {
                    document.NewPage();
                    newPage = writer.GetImportedPage(reader, startPage);
                    rotation = reader.GetPageRotation(startPage);
                    if (rotation == 90)
                    {
                        cb.AddTemplate(newPage, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(startPage).Height);
                    }
                    else if (rotation == 180)
                    {
                        cb.AddTemplate(newPage, -1f, 0, 0, -1f, reader.GetPageSizeWithRotation(startPage).Width, reader.GetPageSizeWithRotation(startPage).Height);
                    }
                    else if (rotation == 270)
                    {
                        cb.AddTemplate(newPage, 0, 1f, -1f, 0, reader.GetPageSizeWithRotation(startPage).Width, 0);
                    }
                    else
                    {
                        //a左右拉伸 b左倾斜 c右倾斜  d上下拉伸 e左右平移 f上下平移             
                        cb.AddTemplate(newPage, 1f, 0, 0, 1f, 0, 0);
                    }
                    startPage++;
                }
                readerList.Add(reader);
            }
            document.Dispose();
            writer.Dispose();
            fs.Dispose();
            //在上面的循环里面释放资源会报错
            foreach (var rd in readerList)
            {
                rd.Dispose();
            }
        }
    
    点赞 1 评论 复制链接分享
  • qq_14942565 qq_14942565 3年前

    在合并的时候需要判断页面方向

    点赞 评论 复制链接分享
  • qxb15828481161 qxb15828481161 5年前

    ///
    /// 合成pdf文件
    ///
    /// 需要合并的文件名列表
    /// 输出路径
    public static void mergePDFFiles(List fileList, string outMergeFile)
    {
    PdfReader reader;
    Document document = new Document(PageSize.A4);
    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outMergeFile, FileMode.Create));
    document.Open();
    PdfContentByte cb = writer.DirectContent;
    PdfImportedPage newPage;
    for (int i = 0; i < fileList.Count; i++)
    {
    reader = new PdfReader(fileList[i]);
    int iPageNum = reader.NumberOfPages;
    for (int j = 1; j <= iPageNum; j++)
    {
    newPage = writer.GetImportedPage(reader, j);
    document.SetPageSize(PageSize.A4.Rotate());
    document.NewPage();
    cb.AddTemplate(newPage, 0, -1f, 1f, 0, -10, reader.GetPageSizeWithRotation(j).Height);
    }
    }
    document.Close();
    }

                这样合并后的PDF纸张和字都是横向的了^_^
    
    点赞 评论 复制链接分享

相关推荐