2017-09-21 90 views
0

我正在创建一个用于创建PDF报告的C#WPF应用程序。创建文件后,我需要将它们打印出来。创建的文件采用A7格式并存储在同一目录中。C#WPF打印pdf每页多页

为了帮助森林里,我想在一张纸上打印4个文件:-)

我能够打印每个文件的文件。我试图设置打印机首选项,以便在一张纸上堆叠4个文件,但仍然打印,每张纸打印一个文件。

我在网上搜索了一个解决方案,但找不到我的路。

任何想法如何实现这一目标?

感谢您的意见

+0

请提供您当前的代码不是编码问题,这是一个战略问题 –

+0

更多。目前我使用Free.spire.pdf在每张纸上打印一个文件。 – JulBat

+0

如果我的理解正确 - 您创建单页文件并且想要选择4个文件并将它们打印在一张纸上。要做到这一点,您需要将每个选定的文件读入您​​的应用程序并创建一个新的临时文件,并按照您的要求和打印方式排列这四个文件。您可以创建一个包含正确大小的四张图像的文档模板并[将PDF转换为图像](https://code.google.com/archive/p/lib-pdf/)进行打印。 (我没有使用我给你的链接库 - 只是给出链接作为建议) – PaulF

回答

0

您可以render the pdf files into images - 将它们连接起来,并发送至打印机。

或者你可以使用下面的代码示例(因为我已经使用的样本Apitron PDF套件):

using System; 
using System.Collections.Generic; 
using System.IO; 

using Apitron.PDF.Kit.FixedLayout; 
using Apitron.PDF.Kit.FixedLayout.Content; 

public void CombinePDFDocuments() 
    { 
     using (Stream stream1 = new FileStream("input1.pdf", FileMode.Open, FileAccess.Read)) 
     using (Stream stream2 = new FileStream("input2.pdf", FileMode.Open, FileAccess.Read)) 
     using (Stream stream3 = new FileStream("input3.pdf", FileMode.Open, FileAccess.Read)) 
     using (Stream stream4 = new FileStream("input4.pdf", FileMode.Open, FileAccess.Read)) 
     { 
      using (FixedDocument doc1 = new FixedDocument(stream1)) 
      using (FixedDocument doc2 = new FixedDocument(stream2)) 
      using (FixedDocument doc3 = new FixedDocument(stream3)) 
      using (FixedDocument doc4 = new FixedDocument(stream4)) 
      { 
       using (FixedDocument result = new FixedDocument()) 
       { 
        Page page = new Page(Boundaries.A4); 
        result.Pages.Add(page); 

        // Left bottom 
        page.Content.AppendContent(doc1.Pages[0].Content); 

        // Left Top 
        page.Content.SetTranslate(0, Boundaries.A7.Height); 
        page.Content.AppendContent(doc2.Pages[0].Content); 

        // Right Top 
        page.Content.SetTranslate(Boundaries.A7.Width, 0); 
        page.Content.AppendContent(doc3.Pages[0].Content); 

        // Right Bottom 
        page.Content.SetTranslate(0, -Boundaries.A7.Height); 
        page.Content.AppendContent(doc4.Pages[0].Content); 

        using (Stream outStream = new FileStream("out.pdf", FileMode.Create, FileAccess.ReadWrite)) 
        { 
         result.Save(outStream); 
        }       
       } 
      } 
     } 
    }