一、获取PDF的宽和高
PdfDocument doc = new PdfDocument();//Load an existing pdf from diskdoc.LoadFromFile(@"..\..\..\..\..\..\Data\Sample.pdf");//Get the first page of the loaded PDF filePdfPageBase page = doc.Pages[0];//Get the width of page based on "point"float pointWidth = page.Size.Width;//Get the height of pagefloat pointHeight = page.Size.Height;
二、小册子功能如下:
1、这是以小册子的形式保存成新的PDF文件:
//Create a pdf documentPdfDocument doc = new PdfDocument();String srcPdf = @"..\..\..\..\..\..\Data\Booklet.pdf";float width = PdfPageSize.A4.Width * 2;float height = PdfPageSize.A4.Height;doc.CreateBooklet(srcPdf, width, height, true);//Save pdf filedoc.SaveToFile("Booklet-result.pdf");
2、这是不保存,直接以小册子的形式打印:
//Create a pdf documentPdfDocument doc = new PdfDocument();String srcPdf = @"C:\Users\Administrator\Desktop\测试用10页.pdf";float width = PdfPageSize.A5.Width * 2;//A5就用A4纸来打,A4就用A3纸来打float height = PdfPageSize.A5.Height;//A5就用A4纸来打,A4就用A3纸来打doc.CreateBooklet(srcPdf, width, height, true);doc.PrintSettings.Duplex = Duplex.Vertical;//双面打印,向左翻页。doc.Print();//不用加载,直接调用Print打印
//=========================================================
//打印小册子代码更新如下:PdfDocument doc = new PdfDocument();doc.LoadFromFile(@"C:\Users\Administrator\Desktop\第一页.pdf");doc.PrintSettings.SelectBookletLayout(Spire.Pdf.Print.PdfBookletSubsetMode.BothSides, Spire.Pdf.Print.PdfBookletBindingMode.Left);doc.Print();
需要注意的是,当打印小册子时,既不要设置双面打印,也不要设置单面打印,采用默认即可。单双面设置只针对非小册子的打印,统一向左翻页。
三、排版、划边框线、排序方向
doc.PrintSettings.SelectMultiPageLayout(int rows, int columns, bool hasPageBorder, PdfMultiPageOrder pageOrder);
前两个属性是决定设置打印多少页的内容到一张纸上,排版的行和列,如每张纸6页,可排版为2行3列;第三个属性hasPageBorder设置是否显示边框线,true是显示,false是不显示;最后一个属性控制方向,0 水平和从左到右,1 水平和从右到左(水平反转),2 垂直和从左到右,3 垂直和从右到左(垂直反转)。
四、双面打印翻页问题(纵向文件:高>=宽),统一设置为向左翻页
//判断打印机是否支持双面打印if (doc.PrintSettings.CanDuplex)//如果打印机支持双面打印{if (sAD == "0")//单面打印{}else if (sAD == "1")//双面打印{doc.PrintSettings.Duplex = Duplex.Vertical;//双面打印,纵向打印向左翻页,横向打印向上翻页。Default,Simplex,Vertical,Horizontal}}
1、Vertical 是双面打印向左翻页,这是对于纵向打印来说。如果是横向打印(纵向的文件要求每张纸打印2页、3页、6页、8页),就变成了向上翻页。
doc.PrintSettings.Duplex = Duplex.Vertical;
2、Default 是单面打印。
3、Horizontal 是双面打印向上翻页,这是对于纵向打印来说。如果是横向打印(纵向的文件要求每张纸打印2页、3页、6页、8页),就变成了向左翻页。
关于双面打印翻页问题,经过反复的测试确认,分为两种情况:一是小册子,不用设置翻页,也不能设置翻页;二是小册子以外的,不管是纵向文件还是横向文件,都统一设置为向左翻页即可,即统一使用Vertical 。
五、双面打印翻页问题(横向文件:高<宽),统一设置为向左翻页
关于双面打印的翻页方向问题,经测试,横向文件的翻页方向处理,其实是把文件的所有页面统一按逆时针方向旋转90度以后,再当做纵向文件来进行处理。
1、每张纸打印1页,经测试,只能进行向左翻页才符合正常需求逻辑。
2、每张纸打印2页,
六、打印队列中文档名设置
using (PdfDocument source = new PdfDocument()){string filepath=@"C:\Users\Administrator\Desktop\2019-12-20\test.pdf";FileInfo file=new FileInfo(filepath);source.LoadFromFile(filepath);source.PrintSettings.DocumentName = file.Name;//设置显示打印文件的名称source.Print();}
七、面朝上,即逆向打印:先打印最后一页,然后打印倒数第二页,以此类推,第一页是在最后面打印
spire.pdf组件目前暂时不支持这个功能,不过您可以先操作PDF,将页面反向绘制到新的页面中,然后再打印,示例代码如下:
using (PdfDocument newPdf = new PdfDocument()){using (PdfDocument source = new PdfDocument()){source.LoadFromFile(@"111.pdf");PdfPageBase newPage = null;for (int i = source.Pages.Count - 1; i >= 0;i-- ){PdfPageBase sourcePage = source.Pages[i];newPage = newPdf.Pages.Add(sourcePage.ActualSize, new PdfMargins(0));sourcePage.CreateTemplate().Draw(newPage.Canvas, new PointF(0, 0));}newPdf.SaveToFile("111-test-spire.pdf");}}
八、转换其它格式到PDF
暂时不做。