使用Aspose

时间:2017-12-11 14:30:02

标签: c# pdf merge aspose aspose.pdf

由于我是Aspose的新手,在下面的情况下我需要帮助 我想使用Aspose将多个PDF合并为1个PDF,我可以轻松地完成,但问题是,我想将PDF大小限制为200MB。 这意味着,如果我合并的PDF大小超过200MB,那么我需要将PDF拆分为多个PDF。例如,如果我的合并PDF是300MB,那么第一个PDF应该是200MB并且第二个PDF应该是100MB。

主要问题是,我无法在下面的代码中找到文档的大小。我正在使用下面的代码。

Document destinationPdfDocument = new Document();
                Document sourcePdfDocument = new Document();

            //Merge PDF one by one
            for (int i = 0; i < filesFromDirectory.Count(); i++)
            {
                if (i == 0)
                {
                    destinationPdfDocument = new Document(filesFromDirectory[i].FullName);
                }
                else
                {
                    // Open second document
                    sourcePdfDocument = new Document(filesFromDirectory[i].FullName);

                    // Add pages of second document to the first
                    destinationPdfDocument.Pages.Add(sourcePdfDocument.Pages);


                    //** I need to check size of destinationPdfDocument over here to limit the size of resultant PDF**

                }
            }

            // Encrypt PDF
            destinationPdfDocument.Encrypt("userP", "ownerP", 0, CryptoAlgorithm.AESx128);

            string finalPdfPath = Path.Combine(destinationSourceDirectory, destinatedPdfPath);

            // Save concatenated output file
            destinationPdfDocument.Save(finalPdfPath);

基于大小合并PDF的其他方式也值得赞赏。
在此先感谢

1 个答案:

答案 0 :(得分:0)

我担心在物理保存之前没有直接的方法来确定PDF文件的大小。因此,我们已在问题跟踪系统中记录了 PDFNET-43073 的功能请求,产品团队一直在调查此功能的可行性。只要我们对该功能的可用性有一些重要更新,我们一定会通知您。请多花点时间。

但是,作为一种解决方法,您可以将文档保存到内存流中,并检查该内存流的大小,是否超出所需的PDF大小。请查看以下代码段,其中我们使用上述方法生成了所需大小为200MB的PDF。

//Instantiate document objects
Document destinationPdfDocument = new Document();
Document sourcePdfDocument = new Document();

//Load source files which are to be merged
var filesFromDirectory = Directory.GetFiles(dataDir, "*.pdf");

for (int i = 0; i < filesFromDirectory.Count(); i++)
{    
 if (i == 0)
 {
 destinationPdfDocument = new Document(filesFromDirectory[i]);
 }
 else
 {
 // Open second document
 sourcePdfDocument = new Document(filesFromDirectory[i]);
 // Add pages of second document to the first
 destinationPdfDocument.Pages.Add(sourcePdfDocument.Pages);
 //** I need to check size of destinationPdfDocument over here to limit the size of resultant PDF**
 MemoryStream ms = new MemoryStream();
 destinationPdfDocument.Save(ms);
 long filesize = ms.Length;
 ms.Flush();
 // Compare the filesize in MBs
 if (i == filesFromDirectory.Count() - 1)
 {
  destinationPdfDocument.Save(dataDir + "PDFOutput_" + i + ".pdf");
 }
 else if ((filesize / (1024 * 1024)) < 200)
 continue;
 else
 {
  destinationPdfDocument.Save(dataDir + "PDFOutput_" + i.ToString() + ".pdf");
  destinationPdfDocument = new Document();
 }
 }
 }

我希望这会有所帮助。如果您需要任何进一步的帮助,请告诉我们。

我与Aspose一起担任开发者布道者。