C# 使用横向和纵向文档
我目前正在编写一个pdf api。有一种方法可以将具有不同方向的选定页面合并到一个文档中。在运行时,如果所选页面处于横向,我希望像这样合并,但当前显示的所有内容都具有纵向 我在网上看过好几篇文章,但都没有帮助 这就是我目前拥有的:C# 使用横向和纵向文档,c#,itextsharp,C#,Itextsharp,我目前正在编写一个pdf api。有一种方法可以将具有不同方向的选定页面合并到一个文档中。在运行时,如果所选页面处于横向,我希望像这样合并,但当前显示的所有内容都具有纵向 我在网上看过好几篇文章,但都没有帮助 这就是我目前拥有的: public static void MergePDF(string source, string destination, PageCollection pages) { try { PdfReader reader = ne
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) {
}
}
谢谢你的帮助
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;
此部分将计算页面的方向,以了解旋转页面的程度,如果删除此部分,所有页面将按原样导入。如果你离开它,所有的东西都会旋转到垂直的位置
您已经告诉您的程序,如果它比它高(横向)更宽,那么它应该旋转成纵向。只需删除该旋转段
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;
此部分将计算页面的方向,以了解旋转页面的程度,如果删除此部分,所有页面将按原样导入。如果您将其保留,则根据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));
}
谢谢。根据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));
}
谢谢。我没有那句台词就试过了。我甚至尝试过:doc.SetPageSize(PageSize.a4u);仍然显示我删除了switch语句并执行了此contentByte.AddTemplate(pdfImportedPagepage,0,0);为了澄清这一点,您删除了switch语句,if语句检查宽度是否大于高度?是的,我删除了,但它仍在旋转。有人告诉我这与示例中addTemplate附带的0和-f有关,我不完全理解它们。yetI在没有该行的情况下尝试过它。我甚至尝试过:doc.SetPageSize(PageSize.a4u);仍然显示我删除了switch语句并执行了此contentByte.AddTemplate(pdfImportedPagepage,0,0);这无助于澄清,您删除了switch语句,if语句检查宽度是否大于高度?是的,我删除了,它仍在旋转。有人告诉我这与示例中addTemplate附带的0和-f有关,我不完全理解他们是的,您使用
PdfWriter
而不是PdfCopy
执行此任务是有特殊原因的吗PdfCopy
只需按原样使用页面,包括页面的尺寸和方向……您使用PdfWriter
而不是PdfCopy
执行此任务是否有特殊原因PdfCopy
只需按原样使用页面,包括其尺寸和方向……不客气。请考虑阅读(免费提供)更多关于如何使用ITEXT来处理PDF文件的信息。不客气。请考虑阅读(免费提供)更多关于如何使用ITEXT来操纵PDFS的信息。