为有中文需求的客户提供多渠道中文技术支持.

Sat Oct 08, 2022 3:15 am

您好,

我使用中文帮助中的如下代码, 将6个页面拼成了一个小册子
Code: Select all
//加载PDF示例文档
PdfDocument doc = new PdfDocument();
String srcPdf = "原始6页.pdf";

//创建PDF小册子
float width = PdfPageSize.A4.Width * 2;
float height = PdfPageSize.A4.Height;
doc.CreateBooklet(srcPdf, width, height,true);

//保存PDF文档
doc.SaveToFile("小册子.pdf");


拼合的效果满足要求, 但是页面的顺序, 我想实现如下图所示的样子, 我没有找到相关的参数, 请求帮助, 谢谢!
b.png

keLi1680
 
Posts: 30
Joined: Sun Oct 02, 2022 2:35 am

Sat Oct 08, 2022 9:47 am

您好,

感谢您的留言。
打印小册子的功能并不支持设置页面顺序,您可以参考下面将多页pdf打印在一页上的代码去实现您的需求。
如果您有任何问题,欢迎随时联系。

Code: Select all
 String srcPdf = @"../../data/原始6页.pdf";
            PdfDocument doc = new PdfDocument();
            doc.LoadFromFile(srcPdf);

            //设置每页安一行两列来打印
            doc.PrintSettings.SelectMultiPageLayout(1, 2);

            //设置打印页面为A3
            doc.PrintSettings.PaperSize = PdfPaperSizes.A3;

            //设置打印页面为横向
            doc.PrintSettings.Landscape = true;

            //选择window自带的虚拟打印机
            doc.PrintSettings.PrinterName = "Microsoft Print to PDF";

            //设置打印的文件的存放地址
            doc.PrintSettings.PrintToFile(@"../../out/result.pdf");

            doc.Print();


Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 1010
Joined: Tue Mar 08, 2022 2:02 am

Sat Oct 08, 2022 10:02 am

Abel.He wrote:您好,

感谢您的留言。
打印小册子的功能并不支持设置页面顺序,您可以参考下面将多页pdf打印在一页上的代码去实现您的需求。
如果您有任何问题,欢迎随时联系。

Code: Select all
 String srcPdf = @"../../data/原始6页.pdf";
            PdfDocument doc = new PdfDocument();
            doc.LoadFromFile(srcPdf);

            //设置每页安一行两列来打印
            doc.PrintSettings.SelectMultiPageLayout(1, 2);

            //设置打印页面为A3
            doc.PrintSettings.PaperSize = PdfPaperSizes.A3;

            //设置打印页面为横向
            doc.PrintSettings.Landscape = true;

            //选择window自带的虚拟打印机
            doc.PrintSettings.PrinterName = "Microsoft Print to PDF";

            //设置打印的文件的存放地址
            doc.PrintSettings.PrintToFile(@"../../out/result.pdf");

            doc.Print();


Sincerely
Abel
E-iceblue support team


感谢你的回复, 打印的方法在win7下不行, 另外打印Pdf也太慢了, 如果小册子, 能设置上面提到的页面顺序就太好了!

keLi1680
 
Posts: 30
Joined: Sun Oct 02, 2022 2:35 am

Sun Oct 09, 2022 8:19 am

Hello,

感谢您的回复。
我们产品是支持在Win7系统上进行打印的。经过测试,我使用最新版本的Spire.PDF Pack Version:8.9打印PDF所花费的时间大约在5s左右。如果您使用的是旧版本,我建议您使用最新版本重新测试一次。
此外,我们产品打印小册子是依据Adobe标准的,目前并不支持设置页面顺序。如果您是需要按照顺序生成新的双页PDF文档,您可以参考我下面的代码通过CreateTemplate()绘制新的页面来完成您的需求。如果您还有其它问题,请随时与我们联系。
Code: Select all
            String srcPdf = @"原始6页.pdf";
            PdfDocument doc = new PdfDocument();
            doc.LoadFromFile(srcPdf);
            PdfDocument newDoc = new PdfDocument();
            for (int i = 0; i < doc.Pages.Count/2; i++)
            {
                PdfPageBase pdfPageBase1 = doc.Pages[i*2];
                PdfPageBase pdfPageBase2 = doc.Pages[(i*2)+1];
                PdfPageBase pageBase = newDoc.Pages.Add(new SizeF(pdfPageBase1.Size.Width + pdfPageBase2.Size.Width, pdfPageBase1.Size.Height), new PdfMargins(0));
                pdfPageBase1.CreateTemplate().Draw(pageBase, new PointF(0, 0));
                pdfPageBase2.CreateTemplate().Draw(pageBase, new PointF(pdfPageBase1.Size.Width, 0));
            }
            newDoc.SaveToFile("result.pdf");


Sincerely,
Simple
E-iceblue support team
User avatar

Simple.Li
 
Posts: 248
Joined: Fri Jul 01, 2022 2:33 am

Mon Oct 10, 2022 3:16 am

用MS虚拟打印机的方法,在win7下无法执行, 提示找不到打印机,

用楼上的方法, 可以实现目标, 再次感谢!

keLi1680
 
Posts: 30
Joined: Sun Oct 02, 2022 2:35 am

Mon Oct 10, 2022 6:47 am

Hello,

感谢您的反馈。
根据您的描述,您先检查你系统上是否安装了MS虚拟打印机。如果有安装,要确保代码设置的名字一致,以便程序能正常访问到打印机。如果还有其它问题,请随时与我们联系。

Sincerely,
Simple
E-iceblue support team
User avatar

Simple.Li
 
Posts: 248
Joined: Fri Jul 01, 2022 2:33 am

Return to 中文技术支持