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

Mon Mar 28, 2022 4:52 am

开发人员, 您好!

我正在测试一个功能: 将PDF文档的每两张页面打印到一张纸上
下面的代码来源于spire帮助网站,
执行后结果: 两页是在一个页面中, 但是顶部和底部有空白, 请看下面图片
按逻辑应该需要调整页面方向, 我把下面的代码做了修改, 但问题没有解决
之前:
doc.PrintSettings.SelectMultiPageLayout(1, 2);
之后
doc.PrintSettings.SelectMultiPageLayout(1, 2, hasPageBorder: false, PdfMultiPageOrder.Horizontal);

还有就是代码中设置了acrobat pdf 打印机, 在打印时会有一个提示输入文件名的对话框弹出, 请问这个可以用设置为不弹出窗口吗?

另外, 还有一个功能询问,
能否实现acrobat软件的裁切功能,
使用场景:
例如, 还是上面的合并打印的例子, 我想先将每页的页边距裁切掉一些, 然后再合并打印

提前感谢!

Code: Select all
//https://www.e-iceblue.cn/print/print-multi-pdf-pages-per-sheet-and-print-single-pdf-page-to-multi-sheets.html
namespace PrintPdfSilently
{
   class Program
   {
      static void Main(string[] args)
      {
         Environment.CurrentDirectory = @"C:\Users\Administrator\Desktop";
         //创建一个PdfDocument对象
         PdfDocument doc = new PdfDocument();

         //加载PDF文件
         doc.LoadFromFile("test.pdf");

         //指定打印机名称
         doc.PrintSettings.PrinterName = "Adobe PDF";

         //将PDF文档的每两张页面打印到一张纸上(排版格式为1行,2列)
         doc.PrintSettings.SelectMultiPageLayout(1, 2, hasPageBorder: false, PdfMultiPageOrder.Horizontal);

         //静默打印
         doc.PrintSettings.PrintController = new StandardPrintController();

         //打印文档
         doc.Print();
      }
   }

123.png

test.pdf.zip

dswxf1680
 
Posts: 13
Joined: Tue Jan 25, 2022 5:54 am

Mon Mar 28, 2022 10:21 am

您好,

感谢您的询问,下面是我对你问题的答复。
1.我们产品支持自定义打印尺寸,请参考下面的代码,这可以解决顶部和底部空白的问题。
Code: Select all
 
            Environment.CurrentDirectory = @"C:\Users\Administrator\Desktop";
            PdfDocument doc = new PdfDocument();
            //加载PDF文件
            doc.LoadFromFile("test.pdf");
            //指定打印机名称
            doc.PrintSettings.PrinterName = "Adobe PDF";
            //获取原文档第一页的纸张大小,这里的单位是Point
            SizeF size = newdoc.Pages[0].Size;
            //实例化PaperSize对象,设置其宽高
            //需要特别注意的是这里涉及到单位的转换,PaperSize的宽高参数默认单位是百英寸
            PaperSize paper = new PaperSize("Custom", (int)(size.Width), (int)(size.Height / 200 * 100));
            paper.RawKind = (int)PaperKind.Custom;

            //设置打印的纸张大小为原来文档的大小
            doc.PrintSettings.PaperSize = paper;

            //需要选择FitSize打印模式
            doc.PrintSettings.SelectSinglePageLayout(PdfSinglePageScalingMode.FitSize, true);
            //将PDF文档的每两张页面打印到一张纸上(排版格式为1行,2列)
            doc.PrintSettings.SelectMultiPageLayout(1, 2);
            //静默打印
            doc.PrintSettings.PrintController = new StandardPrintController();

            //打印文档
            doc.Print();

2. 我们提供了 doc.PrintSettings.PrintToFile(filepath);的功能,这可以直接输出打印结果,不会弹出输入文件名的对话框。

3. 请参考这篇文档在不改变页面大小的情况下裁切每页的页边距https://www.e-iceblue.cn/page/change-margins-in-pdf.html

如果有任何问题,请随时联系。

Sincerely,
Kylie
E-iceblue support team
User avatar

kylie.tian
 
Posts: 412
Joined: Mon Mar 07, 2022 2:30 am

Tue Mar 29, 2022 4:17 am

kylie.tian wrote:您好,

感谢您的询问,下面是我对你问题的答复。
1.我们产品支持自定义打印尺寸,请参考下面的代码,这可以解决顶部和底部空白的问题。
Code: Select all
 
            Environment.CurrentDirectory = @"C:\Users\Administrator\Desktop";
            PdfDocument doc = new PdfDocument();
            //加载PDF文件
            doc.LoadFromFile("test.pdf");
            //指定打印机名称
            doc.PrintSettings.PrinterName = "Adobe PDF";
            //获取原文档第一页的纸张大小,这里的单位是Point
            SizeF size = newdoc.Pages[0].Size;
            //实例化PaperSize对象,设置其宽高
            //需要特别注意的是这里涉及到单位的转换,PaperSize的宽高参数默认单位是百英寸
            PaperSize paper = new PaperSize("Custom", (int)(size.Width), (int)(size.Height / 200 * 100));
            paper.RawKind = (int)PaperKind.Custom;

            //设置打印的纸张大小为原来文档的大小
            doc.PrintSettings.PaperSize = paper;

            //需要选择FitSize打印模式
            doc.PrintSettings.SelectSinglePageLayout(PdfSinglePageScalingMode.FitSize, true);
            //将PDF文档的每两张页面打印到一张纸上(排版格式为1行,2列)
            doc.PrintSettings.SelectMultiPageLayout(1, 2);
            //静默打印
            doc.PrintSettings.PrintController = new StandardPrintController();

            //打印文档
            doc.Print();

2. 我们提供了 doc.PrintSettings.PrintToFile(filepath);的功能,这可以直接输出打印结果,不会弹出输入文件名的对话框。

3. 请参考这篇文档在不改变页面大小的情况下裁切每页的页边距https://www.e-iceblue.cn/page/change-margins-in-pdf.html

如果有任何问题,请随时联系。

Sincerely,
Kylie
E-iceblue support team


非常感谢您的技术支持!
关于问题1 解决顶部和底部空白的问题
使用您的代码确实可以实现效果, 但是打印时, 默认选实际大小时, 内容区域很小, 要选择适当缩放才行, 其实就是一个打印方向的参数设置(请看下面的图片), 感觉设置页面大小实在太麻烦了, 不知道有没有这个参数, 如果没有,能改进一下就更好了
打印设置.gif

关于问题2 我尝试了下面的方案, 但是使用win10系统自带的PDF打印机和acrobat pdf打印机都会提示字体报错
2. 我们提供了 doc.PrintSettings.PrintToFile(filepath);的功能,这可以直接输出打印结果,不会弹出输入文件名的对话框。

dswxf1680
 
Posts: 13
Joined: Tue Jan 25, 2022 5:54 am

Tue Mar 29, 2022 7:20 am

您好,

感谢您的回复。
1.我们提供了打印方向的参数设置,请使用doc.PrintSettings.Landscape = true。
2.关于打印机提示字体报错的问题,请问报错是否为图1所示
图1.jpg
如果是,请按照图2所示,取消打印机该勾选框即可。
图2.png

如果您还有任何问题,请随时与我们联系。

Sincerely,
Kylie
E-iceblue support team
User avatar

kylie.tian
 
Posts: 412
Joined: Mon Mar 07, 2022 2:30 am

Tue Mar 29, 2022 10:35 am

kylie.tian wrote:您好,

感谢您的回复。
1.我们提供了打印方向的参数设置,请使用doc.PrintSettings.Landscape = true。
2.关于打印机提示字体报错的问题,请问报错是否为图1所示
图1.jpg
如果是,请按照图2所示,取消打印机该勾选框即可。
图2.png

如果您还有任何问题,请随时与我们联系。

Sincerely,
Kylie
E-iceblue support team


非常感谢您的技术支持! 问题得到很好的解决!

另外想问一下, 我的主要用途是打算用doc组件
1.在实际测试中, 发现很多时候, 也需要引用pdf组件, 这种情况是否需要购买两个组件?
2.以上贴子提到的合并打印功能, doc组件应该也有吧

dswxf1680
 
Posts: 13
Joined: Tue Jan 25, 2022 5:54 am

Wed Mar 30, 2022 10:33 am

你好,

感谢您的回复。
1. 你前面的需求是打印PDF格式文档,这属于Spire.PDF的功能,而Spire.Doc是用于操作Word文档的。如果你想要操作Word和PDF两种格式文档,那就需要购买Doc和PDF两个授权。
2. 抱歉Spire.Doc没有提供像PDF这样的合并打印功能,我建议你先转换Word到PDF,再使用PDF合并打印。
如果还有其他问题,请随时与我们联系。

Sincerely,
Nina
E-iceblue support team
User avatar

Nina.Tang
 
Posts: 1182
Joined: Tue Sep 27, 2016 1:06 am

Return to 中文技术支持

cron