在使用itextsharp.dll 做pdf中,使用 rotate() 将pdf变成横着的,让后然后将PDF进行合并,发现这个pdf,又变成了纵向的。而里面的内容却变成了横着的。请问这个问题有没有解决的办法。第一个帮我解决问题的,给予大于 150 元的回报。
///
///合并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();
}
}
///
/// 合成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纸张和字都是横向的了^_^
在合并的时候需要判断页面方向