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

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

3个回答

///
/// 合成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纸张和字都是横向的了^_^

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

///
///合并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();
        }
    }
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!